250a251,299
>
> def toIpAddress(value):
> if not isinstance(value, str):
> raise TypeError, "wrong type '%s' should be str" % type(value)
>
> bytes = value.split('.')
> if len(bytes) != 4:
> raise ValueError, 'invalid ip address %s' % value
>
> for byte in bytes:
> if not 0 <= int(byte) <= 0xff:
> raise ValueError, 'invalid ip address %s' % value
>
> return (int(bytes[0]) << 24) | (int(bytes[1]) << 16) | \
> (int(bytes[2]) << 8) | (int(bytes[3]) << 0)
>
> def toIpNetmask(value):
> if not isinstance(value, str):
> raise TypeError, "wrong type '%s' should be str" % type(value)
>
> (ip, netmask) = value.split('/')
> ip = toIpAddress(ip)
> netmaskParts = netmask.split('.')
> if len(netmaskParts) == 1:
> if not 0 <= int(netmask) <= 32:
> raise ValueError, 'invalid netmask %s' % netmask
> return (ip, int(netmask))
> elif len(netmaskParts) == 4:
> netmaskNum = toIpAddress(netmask)
> if netmaskNum == 0:
> return (ip, 0)
> testVal = 0
> for i in range(32):
> testVal |= (1 << (31 - i))
> if testVal == netmaskNum:
> return (ip, i + 1)
> raise ValueError, 'invalid netmask %s' % netmask
> else:
> raise ValueError, 'invalid netmask %s' % netmask
>
> def toIpWithPort(value):
> if not isinstance(value, str):
> raise TypeError, "wrong type '%s' should be str" % type(value)
>
> (ip, port) = value.split(':')
> ip = toIpAddress(ip)
> if not 0 <= int(port) <= 0xffff:
> raise ValueError, 'invalid port %s' % port
> return (ip, int(port))