[tor-commits] [ooni-probe/master] Refactoring ooni.templates.DNST

art at torproject.org art at torproject.org
Mon Mar 31 09:32:23 UTC 2014


commit 68e777d4a3c374a842f7cd149129361620c74e5c
Author: Arun Pandian G <arunpandianp at gmail.com>
Date:   Wed Mar 26 01:30:00 2014 +0530

    Refactoring ooni.templates.DNST
---
 ooni/templates/dnst.py |  190 +++++++++++++-----------------------------------
 1 file changed, 50 insertions(+), 140 deletions(-)

diff --git a/ooni/templates/dnst.py b/ooni/templates/dnst.py
index 38da177..7f076ed 100644
--- a/ooni/templates/dnst.py
+++ b/ooni/templates/dnst.py
@@ -85,56 +85,7 @@ class DNSTest(NetTestCase):
 
                      if None, system dns settings will be used
         """
-        query = [dns.Query(hostname, dns.A, dns.IN)]
-        if dns_server:
-            def gotResponse(message):
-                addrs = []
-                answers = []
-                for answer in message.answers:
-                    if answer.type is dns.A:
-                        addr = answer.payload.dottedQuad()
-                        addrs.append(addr)
-                    answers.append(representAnswer(answer))
-
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='A',
-                        answers=answers, addrs=addrs)
-                return addrs
-
-            def gotError(failure):
-                failure.trap(gaierror, TimeoutError)
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='A',
-                        failure=failure)
-                return failure
-
-            resolver = Resolver(servers=[dns_server])
-            d = resolver.queryUDP(query, timeout=self.queryTimeout)
-            d.addCallback(gotResponse)
-            d.addErrback(gotError)
-        else:
-            def gotResponse(message):
-                addrs = []
-                answers = []
-                for answer in message[0]:
-                    if answer.type is dns.A:
-                        addr = answer.payload.dottedQuad()
-                        addrs.append(addr)
-                    answers.append(representAnswer(answer))
-
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='A',
-                        answers=answers, addrs=addrs)
-                return addrs
-
-            def gotError(failure):
-                failure.trap(gaierror, TimeoutError)
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='A',
-                        failure=failure)
-                return failure
-
-            d = client.lookupAddress(hostname)
-            d.addCallback(gotResponse)
-            d.addErrback(gotError)
-
-        return d
+        return self.dnsLookup(hostname, 'A', dns_server)
 
     def performNSLookup(self, hostname, dns_server = None):
         """
@@ -145,118 +96,77 @@ class DNSTest(NetTestCase):
 
         :dns_server: is the dns_server that should be used for the lookup as a
                      tuple of ip port (ex. ("127.0.0.1", 53))
-        """
-        query = [dns.Query(hostname, dns.NS, dns.IN)]
-        if dns_server:
-            def gotResponse(message):
-                addrs = []
-                answers = []
-                for answer in message.answers:
-                    if answer.type is dns.NS:
-                        addr = answer.payload.name.name
-                        addrs.append(addr)
-                    answers.append(representAnswer(answer))
-
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='NS',
-                        answers=answers, addrs=addrs)
-                return addrs
-
-            def gotError(failure):
-                failure.trap(gaierror, TimeoutError)
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='NS',
-                        failure=failure)
-                return failure
-
-            resolver = Resolver(servers=[dns_server])
-            d = resolver.queryUDP(query, timeout=self.queryTimeout)
-            d.addCallback(gotResponse)
-            d.addErrback(gotError)
-        else:
-            def gotResponse(message):
-                addrs = []
-                answers = []
-                for answer in message[0]:
-                    if answer.type is dns.NS:
-                        addr = answer.payload.name.name
-                        addrs.append(addr)
-                    answers.append(representAnswer(answer))
-
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='NS',
-                        answers=answers, addrs=addrs)
-                return addrs
 
-            def gotError(failure):
-                failure.trap(gaierror, TimeoutError)
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='NS',
-                        failure=failure)
-                return failure
-
-            d = client.lookupNameservers(hostname)
-            d.addCallback(gotResponse)
-            d.addErrback(gotError)
-
-        return d
+                     if None, system dns settings will be used
+        """
+        return self.dnsLookup(hostname, 'NS', dns_server)
 
     def performSOALookup(self, hostname, dns_server = None):
         """
         Performs a SOA lookup and returns the response (name,serial).
 
-        :hostname: is the hostname to perform the NS lookup on
+        :hostname: is the hostname to perform the SOA lookup on
+        :dns_server: is the dns_server that should be used for the lookup as a
+                     tuple of ip port (ex. ("127.0.0.1", 53))
+
+                     if None, system dns settings will be used
+        """
+        return self.dnsLookup(hostname,'SOA',dns_server)
 
+    def dnsLookup(self, hostname, dns_type, dns_server = None):
+        """
+        Performs a DNS lookup and returns the response.
+
+        :hostname: is the hostname to perform the DNS lookup on
+        :dns_type: type of lookup 'NS'/'A'/'SOA'
         :dns_server: is the dns_server that should be used for the lookup as a
                      tuple of ip port (ex. ("127.0.0.1", 53))
         """
-        query = [dns.Query(hostname, dns.SOA, dns.IN)]
-        if dns_server:
-            def gotResponse(message):
-                addrs = []
-                answers = []
-                for answer in message.answers:
-                    if answer.type is dns.SOA:
+        types={'NS':dns.NS,'A':dns.A,'SOA':dns.SOA}
+        dnsType=types[dns_type]
+        query = [dns.Query(hostname, dnsType, dns.IN)]
+        def gotResponse(message):
+            addrs = []
+            answers = []
+            if dns_server:
+                msg = message.answers
+            else:
+                msg = message[0]
+            for answer in msg:
+                if answer.type is dnsType:
+                    if dnsType is dns.SOA:
                         addr = (answer.name.name,answer.payload.serial)
-                        addrs.append(addr)
-                    answers.append(representAnswer(answer))
+                    elif dnsType is dns.NS:
+                        addr = answer.payload.name.name
+                    elif dnsType is dns.A:
+                        addr = answer.payload.dottedQuad()
+                    else:
+                        addr = None
+                    addrs.append(addr)
+                answers.append(representAnswer(answer))
 
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='SOA',
+            DNSTest.addToReport(self, query, resolver=dns_server, query_type=dns_type,
                         answers=answers, addrs=addrs)
-                return addrs
+            return addrs
 
-            def gotError(failure):
-                failure.trap(gaierror, TimeoutError)
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='SOA',
+        def gotError(failure):
+            failure.trap(gaierror, TimeoutError)
+            DNSTest.addToReport(self, query, resolver=dns_server, query_type=dns_type,
                         failure=failure)
-                return failure
+            return failure
 
+        if dns_server:
             resolver = Resolver(servers=[dns_server])
             d = resolver.queryUDP(query, timeout=self.queryTimeout)
-            d.addCallback(gotResponse)
-            d.addErrback(gotError)
         else:
-            def gotResponse(message):
-                addrs = []
-                answers = []
-                for answer in message[0]:
-                    if answer.type is dns.SOA:
-                        addr = (answer.name.name,answer.payload.serial)
-                        addrs.append(addr)
-                    answers.append(representAnswer(answer))
-
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='SOA',
-                        answers=answers, addrs=addrs)
-                return addrs
-
-            def gotError(failure):
-                failure.trap(gaierror, TimeoutError)
-                DNSTest.addToReport(self, query, resolver=dns_server, query_type='SOA',
-                        failure=failure)
-                return failure
-
-            d = client.lookupAuthority(hostname)
-            d.addCallback(gotResponse)
-            d.addErrback(gotError)
+            lookupFunction={'NS':client.lookupNameservers, 'SOA':client.lookupAuthority, 'A':client.lookupAddress}
+            d = lookupFunction[dns_type](hostname)
 
+        d.addCallback(gotResponse)
+        d.addErrback(gotError)
         return d
 
+
     def addToReport(self, query, resolver=None, query_type=None,
                     answers=None, name=None, addrs=None, failure=None):
         log.debug("Adding %s to report)" % query)





More information about the tor-commits mailing list