------------------------------------------------------------ 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 = {}