aboutsummaryrefslogtreecommitdiff
path: root/rpki/ipaddrs.py
diff options
context:
space:
mode:
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)