aboutsummaryrefslogtreecommitdiff
path: root/rpki/ipaddrs.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2014-07-07 23:13:35 +0000
committerRob Austein <sra@hactrn.net>2014-07-07 23:13:35 +0000
commit13a65b463cd0acedd3bc36c9437d5ee8b2e26b60 (patch)
treed129b276d8e77591943d03f1995ac76c3eb6d5f8 /rpki/ipaddrs.py
parentbfba2f0ce8f8416b9e5f91542068d0d6470bc19f (diff)
Checkpoint of SQL-based publish and withdraw processing. Doesn't
handle publish-with-overwrite correctly yet, not generating RRDP files yet, but passes "make test" without doing anything obviously insane. svn path=/branches/tk705/; revision=5887
Diffstat (limited to 'rpki/ipaddrs.py')
-rw-r--r--rpki/ipaddrs.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/rpki/ipaddrs.py b/rpki/ipaddrs.py
index 68b2d27d..25eefd0d 100644
--- a/rpki/ipaddrs.py
+++ b/rpki/ipaddrs.py
@@ -61,6 +61,7 @@ class v4addr(long):
"""
Construct a v4addr object.
"""
+
if isinstance(x, unicode):
x = x.encode("ascii")
if isinstance(x, str):
@@ -72,6 +73,7 @@ class v4addr(long):
"""
Convert a v4addr object to a raw byte string.
"""
+
return struct.pack("!I", long(self))
@classmethod
@@ -79,12 +81,14 @@ class v4addr(long):
"""
Convert from a raw byte string to a v4addr object.
"""
+
return cls(struct.unpack("!I", x)[0])
def __str__(self):
"""
Convert a v4addr object to string format.
"""
+
return socket.inet_ntop(socket.AF_INET, self.to_bytes())
class v6addr(long):
@@ -101,6 +105,7 @@ class v6addr(long):
"""
Construct a v6addr object.
"""
+
if isinstance(x, unicode):
x = x.encode("ascii")
if isinstance(x, str):
@@ -112,6 +117,7 @@ class v6addr(long):
"""
Convert a v6addr object to a raw byte string.
"""
+
return struct.pack("!QQ", long(self) >> 64, long(self) & 0xFFFFFFFFFFFFFFFF)
@classmethod
@@ -119,6 +125,7 @@ class v6addr(long):
"""
Convert from a raw byte string to a v6addr object.
"""
+
x = struct.unpack("!QQ", x)
return cls((x[0] << 64) | x[1])
@@ -126,12 +133,14 @@ class v6addr(long):
"""
Convert a v6addr object to string format.
"""
+
return socket.inet_ntop(socket.AF_INET6, self.to_bytes())
def parse(s):
"""
Parse a string as either an IPv4 or IPv6 address, and return object of appropriate class.
"""
+
if isinstance(s, unicode):
s = s.encode("ascii")
return v6addr(s) if ":" in s else v4addr(s)