The unified diff between revisions [1f414f68..] and [6d4712d0..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "twistedrbl.py"
#  from [be28b7fcae565230b2cbdd157aa5d3707af6056c]
#    to [e5749b334cad76c3d382f6bb2283dd3cf8cb7500]
#
============================================================
--- twistedrbl.py	be28b7fcae565230b2cbdd157aa5d3707af6056c
+++ twistedrbl.py	e5749b334cad76c3d382f6bb2283dd3cf8cb7500
@@ -13,32 +13,43 @@ class Echo(basic.LineReceiver):

 class Echo(basic.LineReceiver):
     delimiter = '\n'
-    def __init__(self, log_fd):
+    def __init__(self, log_fd, result_fd):
         self.log_fd = log_fd
+        self.result_fd = result_fd
         self.resolver = client.createResolver()
+        self.track = 0

     def connectionMade(self):
         self.log_fd.write('Connection established.\n')

-    def dns_response(self, line, is_ok, result):
-        if is_ok:
-            self.log_fd.write("got a response: %s for %s\n" % (result, line))
-
+    def dns_response(self, querying_rbl, ipr, track, line, is_ok, result):
+        in_rbl = is_ok and result and result.startswith('127.0.0')
+        in_kas = line['spamstatus'] != 'no'
+        log_fd.write('result for %s (%d)\n' % (ipr, track))
+        self.result_fd.write("date=%s rbl=%s ip=%s in_kas=%s in_rbl=%s\n" % (line['date'],
+                                                                             querying_rbl,
+                                                                             line['ip'],
+                                                                             in_kas,
+                                                                             in_rbl))
+
     def lineReceived(self, line):
         match = spam_info_re.match(line)
         if not match:
             return
         match = match.groupdict()
         ip_address = match['ip']
-        ipr = '.'.join(reversed(ip_address.split('.'))) + '.' + 'dnsbl.sorbs.net'
-        self.log_fd.write('starting query up for %s\n' % (ipr))
-        deferred = self.resolver.getHostByName(ipr)
-        response = lambda x: self.dns_response(match, True, x)
-        error = lambda x: self.dns_response(match, False, x)
-        deferred.addCallbacks(response, error)
+        for rbl in ['bl.spamcop.net', 'sbl-xbl.spamhaus.org', 'dnsbl.sorbs.net']:
+            self.track += 1
+            ipr = '.'.join(reversed(ip_address.split('.'))) + '.' + rbl
+            log_fd.write('%s (%d) issued\n' % (ipr, self.track))
+            deferred = self.resolver.getHostByName(ipr)
+            response = lambda x: self.dns_response(rbl, ipr, self.track, match, True, x)
+            error = lambda x: self.dns_response(rbl, ipr, self.track, match, False, x)
+            deferred.addCallbacks(response, error)

 if __name__ == '__main__':
     log_fd = open('log.txt', 'w')
-    stdio.StandardIO(Echo(log_fd))
+    result_fd = open('result.txt', 'w')
+    stdio.StandardIO(Echo(log_fd, result_fd))
     from twisted.internet import reactor
     reactor.run()