1 21 package org.jsmtpd.core.common.acl; 22 23 import java.net.Inet4Address ; 24 import java.util.BitSet ; 25 26 31 public class ExtendedInet4Address { 32 33 private Inet4Address ipAd = null; 34 private Inet4Address netmask = null; 35 36 public ExtendedInet4Address(Inet4Address ipAd, Inet4Address netmask) { 37 this.ipAd = ipAd; 38 this.netmask = netmask; 39 } 40 41 public ExtendedInet4Address(Inet4Address ipAd) { 42 this.ipAd = ipAd; 43 } 44 45 public boolean isEqualorInMask(Inet4Address ipIn) { 46 47 if (ipIn == null) 48 return false; 49 50 if (ipIn.equals(ipAd)) 51 return true; 52 53 if (netmask != null) { 54 55 BitSet mask = makeBitSet(netmask.getAddress()); 56 BitSet adrs = makeBitSet(ipAd.getAddress()); 57 BitSet against = makeBitSet(ipIn.getAddress()); 58 59 for (int i = 0; i < 32; i++) { 60 if (mask.get(i)) { 61 if ((adrs.get(i) != against.get(i))) 62 return false; 63 } 64 } 65 return true; 66 67 } 68 69 return false; 70 } 71 72 public static BitSet makeBitSetST(String host) { 73 String [] res; 74 host = host.replace(".", "Z"); 75 res = host.split("Z"); 76 System.out.println("host=" + host + ", len=" + res.length); 77 byte[] dt = new byte[res.length]; 78 79 for (int i = 0; i < res.length; i++) { 80 short tmp = Short.parseShort(res[i]); 81 dt[i] = (byte) tmp; 82 } 83 84 return makeBitSet(dt); 85 } 86 87 public static BitSet makeBitSet(byte[] in) { 88 BitSet bb = new BitSet (); 89 for (int j = 0; j < in.length; j++) { 90 byte bt = in[j]; 91 for (int i = 7; i >= 0; i--) 92 if (((1 << i) & bt) != 0) 93 bb.set(-i + 7 + j * 8); 94 else 95 bb.clear(-i + 7 + j * 8); 96 } 97 return bb; 98 } 99 100 static void debug(BitSet b) { 101 102 String out = new String (); 103 int i = 0; 104 for (int k = 0; k < b.size(); k++) { 105 out += (b.get(k) ? "1" : "0"); 106 i++; 107 if (i == 8) { 108 out += " "; 109 i = 0; 110 } 111 } 112 System.out.println("bit set contains " + out + ", size=" + b.size()); 113 } 114 115 } | Popular Tags |