if done:
break
+###--------------------------------------------------------------------------
+### Address manipulation.
+
+def parse_address(addrstr):
+ return unpack('>L', S.inet_aton(addrstr))[0]
+
+def straddr(a): return a is None and '#<none>' or S.inet_ntoa(pack('>L', a))
+def strmask(m):
+ for i in xrange(33):
+ if m == 0xffffffff ^ ((1 << (32 - i)) - 1): return str(i)
+ return straddr(m)
+
###--------------------------------------------------------------------------
### Parse the configuration file.
## and MASK is either a dotted-quad or a single integer N indicating
## a mask with N leading ones followed by trailing zeroes.
slash = net.index('/')
- addr, = unpack('>L', S.inet_aton(net[:slash]))
- if net.find('.', slash + 1) >= 0:
- mask, = unpack('>L', S.inet_aton(net[:slash]))
- else:
+ addr = parse_address(net[:slash])
+ if net[slash + 1:].isdigit():
n = int(net[slash + 1:], 10)
mask = (1 << 32) - (1 << 32 - n)
+ else:
+ mask = parse_address(net[slash + 1:])
pats.append((tag, peer, addr & mask, mask))
## Annoyingly, RawConfigParser doesn't preserve the order of options.
### This will be a configuration file.
CF = None
-def straddr(a): return a is None and '#<none>' or S.inet_ntoa(pack('>L', a))
-def strmask(m):
- for i in xrange(33):
- if m == 0xffffffff ^ ((1 << (32 - i)) - 1): return i
- return straddr(m)
-
def cmd_showconfig():
T.svcinfo('test-addr=%s' % CF.testaddr)
def cmd_showgroups():
try:
sk.connect((peer, 1))
addr, _ = sk.getsockname()
- addr, = unpack('>L', S.inet_aton(addr))
+ addr = parse_address(addr)
return addr
except S.error:
return None