[hipl-dev] [Branch ~hipl-core/hipl/trunk] Rev 6370: Refactor the ptr to addr and back methods to functions with tests.

  • From: noreply@xxxxxxxxxxxxx
  • To: HIPL core team <hipl-dev@xxxxxxxxxxxxx>
  • Date: Tue, 24 Apr 2012 15:49:12 -0000

------------------------------------------------------------
revno: 6370
committer: Paul Tötterman <paul.totterman@xxxxxx>
branch nick: methods-to-functions
timestamp: Tue 2012-04-03 22:55:22 +0300
message:
  Refactor the ptr to addr and back methods to functions with tests.
modified:
  tools/hipdnsproxy/hipdnsproxy.in
  tools/hipdnsproxy/hosts.py


--
lp:hipl
https://code.launchpad.net/~hipl-core/hipl/trunk

Your team HIPL core team is subscribed to branch lp:hipl.
To unsubscribe from this branch go to 
https://code.launchpad.net/~hipl-core/hipl/trunk/+edit-subscription
=== modified file 'tools/hipdnsproxy/hipdnsproxy.in'
--- tools/hipdnsproxy/hipdnsproxy.in    2012-04-03 19:40:35 +0000
+++ tools/hipdnsproxy/hipdnsproxy.in    2012-04-03 19:55:22 +0000
@@ -484,16 +484,6 @@
             if result:
                 return result
 
-    def ptr_str_to_addr_str(self, ptr_str):
-        """Convert PTR hostname to IP address."""
-        for hostsdb in self.hosts:
-            return hostsdb.ptr_str_to_addr_str(ptr_str)
-
-    def addr6_str_to_ptr_str(self, addr_str):
-        """Convert IPv6 address to PTR hostname."""
-        for hostsdb in self.hosts:
-            return hostsdb.addr6_str_to_ptr_str(addr_str)
-
     def forkme(self):
         """Daemonize current process."""
         pid = os.fork()
@@ -640,7 +630,7 @@
         # map host name to address from cache
         if qtype == 12:
             lr_ptr = None
-            addr_str = self.ptr_str_to_addr_str(qname)
+            addr_str = hosts.ptr_to_addr(qname)
             if (not self.disable_lsi and addr_str is not None and
                 hosts.valid_lsi(addr_str)):
                 addr_str = self.lsi_to_hit(addr_str)
@@ -889,14 +879,14 @@
 
                         if qtype == 12 and not self.disable_lsi:
                             qname = packet['questions'][0][0]
-                            addr_str = self.ptr_str_to_addr_str(qname)
+                            addr_str = hosts.ptr_to_addr(qname)
                             if (addr_str is not None and
                                 hosts.valid_lsi(addr_str)):
                                 query = (packet, from_a[0], from_a[1], qname)
                                 hit_str = self.lsi_to_hit(addr_str)
                                 if hit_str is not None:
                                     pckt['questions'][0][0] = \
-                                            self.addr6_str_to_ptr_str(hit_str)
+                                            hosts.addr_to_ptr(hit_str)
 
                         outbuf = Serialize(pckt).get_packet()
                         clisock.sendto(outbuf, (self.server_ip,

=== modified file 'tools/hipdnsproxy/hosts.py'
--- tools/hipdnsproxy/hosts.py  2012-04-03 19:40:35 +0000
+++ tools/hipdnsproxy/hosts.py  2012-04-03 19:55:22 +0000
@@ -125,6 +125,35 @@
                                                               addr))
 
 
+def addr_to_ptr(addr):
+    """Return PTR hostname string for IP address string.
+
+    >>> addr_to_ptr('192.168.1.2')
+    '2.1.168.192.in-addr.arpa'
+    >>> addr_to_ptr('2001:001e:361f:8a55:6730:6f82:ef36:2fff')
+    'f.f.f.2.6.3.f.e.2.8.f.6.0.3.7.6.5.5.a.8.f.1.6.3.e.1.0.0.1.0.0.2.ip6.arpa'
+    """
+    if valid_ipv6(addr):
+        return '%s.ip6.arpa' % '.'.join(reversed(addr.replace(':', '')))
+
+    return '%s.in-addr.arpa' % '.'.join(reversed(addr.split('.')))
+
+
+def ptr_to_addr(ptr):
+    """Return IP address string from PTR hostname string.
+
+    >>> ptr_to_addr('2.1.168.192.in-addr.arpa')
+    '192.168.1.2'
+    >>> ptr_to_addr('f.f.f.2.6.3.f.e.2.8.f.6.0.3.7.6.5.5.a.8.f.1.6.3.e.1.0.0'
+    ...             '.1.0.0.2.ip6.arpa')
+    '2001:001e:361f:8a55:6730:6f82:ef36:2fff'
+    """
+    if '.in-addr.arpa' in ptr:
+        return '.'.join(reversed(ptr.split('.')[:4]))
+    if '.ip6.arpa' in ptr:
+        return ':'.join(['%s' * 4] * 8) % tuple(reversed(ptr.split('.')[:32]))
+
+
 class Hosts:
     """Class for handling a hosts file."""
 
@@ -176,58 +205,6 @@
             if keyword == 'search':
                 self.suffixes = tuple([part.lower() for part in parts])
 
-    def ptr4_str_to_addr_str(self, ptr_str):
-        """Convert IPv4 PTR to IPv4 address."""
-        in4 = ''
-        octet = ''
-        for i in range(len(ptr_str)):
-            if ptr_str[i] == '.':
-                in4 = octet + '.' + in4
-                octet = ''
-            else:
-                octet += ptr_str[i]
-        in4 = octet + '.' + in4[0:len(in4) - 1]
-        return in4
-
-    def ptr6_str_to_addr_str(self, ptr_str):
-        """Convert IPv6 PTR to IPv6 address."""
-        in6 = ''
-        for i in range(len(ptr_str)):
-            if (((i + 1) % 8) == 0):
-                in6 += ':'
-            if ptr_str[i] != '.':
-                in6 += ptr_str[i]
-        return in6
-
-    def addr6_str_to_ptr_str(self, addr):
-        """Convert IPv6 address to IPv6 PTR hostname."""
-        # Note: address string must be in the full notation
-        ptr = ''
-        addr = addr[::-1]
-        for char in addr:
-            if char != ':':
-                ptr += char + '.'
-        ptr += 'ip6.arpa'
-        return ptr
-
-    def ptr_str_to_addr_str(self, ptr_str):
-        """Convert PTR hostname to IP address."""
-        # IPv4:
-        # - 102.2.168.192.in-addr.arpa
-        # - 4.3.2.1.in-addr.arpa
-        # IPv6:
-        # - 9.0...f.3.ip6.arpa
-        if not ptr_str:
-            return None
-        end = ptr_str.find('.i')
-        if end == -1:
-            return None
-        addr_part = ptr_str[0:end]
-        if ptr_str.find('.ip6') == -1:
-            return self.ptr4_str_to_addr_str(addr_part)
-        else:
-            return self.ptr6_str_to_addr_str(addr_part[::-1])
-
     def reread(self):
         """Re-read hosts file."""
         name_a = {}

Other related posts:

  • » [hipl-dev] [Branch ~hipl-core/hipl/trunk] Rev 6370: Refactor the ptr to addr and back methods to functions with tests. - noreply