[or-cvs] [torflow/master 16/92] Defined magic numbers

mikeperry at torproject.org mikeperry at torproject.org
Sat Aug 21 05:13:58 UTC 2010


Author: John M. Schanck <john at anomos.info>
Date: Fri, 9 Jul 2010 15:17:46 -0400
Subject: Defined magic numbers
Commit: 284dcfe851e8a650a4c28da7bbfd87ae73ddb57c

---
 NetworkScanners/ExitAuthority/libsoat.py |   16 ++++++++-
 NetworkScanners/ExitAuthority/soat.py    |   58 +++++++++++++++---------------
 2 files changed, 44 insertions(+), 30 deletions(-)

diff --git a/NetworkScanners/ExitAuthority/libsoat.py b/NetworkScanners/ExitAuthority/libsoat.py
index 31ec77f..2b3461f 100644
--- a/NetworkScanners/ExitAuthority/libsoat.py
+++ b/NetworkScanners/ExitAuthority/libsoat.py
@@ -52,7 +52,9 @@ __all__ = [ # Classes
            "FAILURE_CONNREFUSED", "FAILURE_CONNERROR", "FAILURE_URLERROR", "FAILURE_CRYPTOERROR",
            "FAILURE_TIMEOUT", "FAILURE_HEADERCHANGE", "FAILURE_MISCEXCEPTION",
            "FALSEPOSITIVE_HTTPERRORS", "FALSEPOSITIVE_DYNAMIC", "FALSEPOSITIVE_DYNAMIC_TOR",
-           "FALSEPOSITIVE_DEADSITE"
+           "FALSEPOSITIVE_DEADSITE",
+           "E_SOCKS", "E_POLICY", "E_NETUNREACH", "E_HOSTUNREACH", "E_REFUSED",
+           "E_TIMEOUT", "E_NOCONTENT", "E_CRYPTO", "E_URL", "E_MISC",
           ]
 
 
@@ -112,6 +114,18 @@ FALSEPOSITIVE_DYNAMIC = "FalsePositiveDynamic"
 FALSEPOSITIVE_DYNAMIC_TOR = "FalsePositiveDynamicTor"
 FALSEPOSITIVE_DEADSITE = "FalsePositiveDeadSite"
 
+# Error Codes (Negative floats so as to distinguish from positive int HTTP resp. codes)
+E_SOCKS = -1.0
+E_POLICY = -2.0
+E_NETUNREACH = -3.0
+E_HOSTUNREACH = -4.0
+E_REFUSED = -5.0
+E_TIMEOUT = -6.0
+E_NOCONTENT = -13.0
+E_CRYPTO = -14.0
+E_URL = -15.0
+E_MISC = -99.0
+
 # classes to use with pickle to dump test results into files
 
 class TestResult(object):
diff --git a/NetworkScanners/ExitAuthority/soat.py b/NetworkScanners/ExitAuthority/soat.py
index d0d1b0e..3157063 100755
--- a/NetworkScanners/ExitAuthority/soat.py
+++ b/NetworkScanners/ExitAuthority/soat.py
@@ -332,28 +332,28 @@ def http_request(address, cookie_jar=None, headers=firefox_headers):
   except socket.timeout, e:
     plog("WARN", "Socket timeout for "+address+": "+str(e))
     traceback.print_exc()
-    return (-6.0, None, [], "", e.__class__.__name__+str(e))
+    return (E_TIMEOUT, None, [], "", e.__class__.__name__+str(e))
   except httplib.BadStatusLine, e:
     plog('NOTICE', "HTTP Error during request of "+address+": "+str(e))
     if not e.line: 
-      return (-13.0, None, [], "", e.__class__.__name__+"(None)") 
+      return (E_NOCONTENT, None, [], "", e.__class__.__name__+"(None)")
     else:
       traceback.print_exc()
-      return (-666.0, None, [], "", e.__class__.__name__+str(e)) 
+      return (E_MISC, None, [], "", e.__class__.__name__+str(e))
   except urllib2.HTTPError, e:
     plog('NOTICE', "HTTP Error during request of "+address+": "+str(e))
     if str(e) == "<urlopen error timed out>": # Yah, super ghetto...
-      return (-6.0, None, [], "", e.__class__.__name__+str(e)) 
+      return (E_TIMEOUT, None, [], "", e.__class__.__name__+str(e))
     else:
       traceback.print_exc()
       return (e.code, None, [], "", e.__class__.__name__+str(e)) 
   except (ValueError, urllib2.URLError), e:
     plog('WARN', 'The http-request address ' + address + ' is malformed')
     if str(e) == "<urlopen error timed out>": # Yah, super ghetto...
-      return (-6.0, None, [], "", e.__class__.__name__+str(e)) 
+      return (E_TIMEOUT, None, [], "", e.__class__.__name__+str(e))
     else:
       traceback.print_exc()
-      return (-23.0, None, [], "", e.__class__.__name__+str(e))
+      return (E_URL, None, [], "", e.__class__.__name__+str(e))
   except socks.Socks5Error, e:
     plog('WARN', 'A SOCKS5 error '+str(e.value[0])+' occured for '+address+": "+str(e))
     return (-float(e.value[0]), None, [], "", e.__class__.__name__+str(e))
@@ -362,7 +362,7 @@ def http_request(address, cookie_jar=None, headers=firefox_headers):
   except Exception, e:
     plog('WARN', 'An unknown HTTP error occured for '+address+": "+str(e))
     traceback.print_exc()
-    return (-666.0, None, [], "", e.__class__.__name__+str(e))
+    return (E_MISC, None, [], "", e.__class__.__name__+str(e))
 
   return (reply.code, reply_headers, new_cookies, mime_type, content)
 
@@ -1108,35 +1108,35 @@ class HTTPTest(SearchBasedTest):
         return TEST_INCONCLUSIVE 
 
       if pcode < 0 and type(pcode) == float:
-        if pcode == -1: # "General socks error"
+        if pcode == E_SOCKS: # "General socks error"
           fail_reason = FAILURE_CONNERROR
-        elif pcode == -2: # "connection not allowed aka ExitPolicy
+        elif pcode == E_POLICY: # "connection not allowed aka ExitPolicy
           fail_reason = FAILURE_EXITPOLICY
-        elif pcode == -3: # "Net Unreach" ??
+        elif pcode == E_NETUNREACH: # "Net Unreach" ??
           fail_reason = FAILURE_NETUNREACH
-        elif pcode == -4: # "Host Unreach" aka RESOLVEFAILED
+        elif pcode == E_HOSTUNREACH: # "Host Unreach" aka RESOLVEFAILED
           fail_reason = FAILURE_HOSTUNREACH
           result = HttpTestResult(self.node_map[exit_node[1:]],
                                  address, TEST_FAILURE, fail_reason)
           return self.register_dns_failure(result)
-        elif pcode == -5: # Connection refused
+        elif pcode == E_REFUSED: # Connection refused
           fail_reason = FAILURE_CONNREFUSED
           result = HttpTestResult(self.node_map[exit_node[1:]], 
                               address, TEST_FAILURE, fail_reason)
           self.register_exit_failure(result)
           return TEST_FAILURE
-        elif pcode == -6: # timeout
+        elif pcode == E_TIMEOUT: # timeout
           fail_reason = FAILURE_TIMEOUT
           result = HttpTestResult(self.node_map[exit_node[1:]],
                                  address, TEST_FAILURE, fail_reason)
           return self.register_timeout_failure(result)
-        elif pcode == -13:
+        elif pcode == E_NOCONTENT:
           fail_reason = FAILURE_NOEXITCONTENT
           result = HttpTestResult(self.node_map[exit_node[1:]], 
                               address, TEST_FAILURE, fail_reason)
           self.register_exit_failure(result)
           return TEST_FAILURE
-        elif pcode == -23: 
+        elif pcode == E_URL:
           fail_reason = FAILURE_URLERROR
         else:
           fail_reason = FAILURE_MISCEXCEPTION
@@ -1737,7 +1737,7 @@ class SSLTest(SearchBasedTest):
     try:
       return self._ssl_request(address)
     except socket.timeout, e:
-      return (-6.0, None, "Socket timeout")
+      return (E_TIMEOUT, None, "Socket timeout")
 
   def _ssl_request(self, address, method='TLSv1_METHOD'):
     ''' initiate an ssl connection and return the server certificate '''
@@ -1765,17 +1765,17 @@ class SSLTest(SearchBasedTest):
       c.do_handshake()
       rval = (0, c.get_peer_certificate(), None)
     except socket.timeout, e:
-      rval = (-6.0, None, "Socket timeout")
+      rval = (E_TIMEOUT, None, "Socket timeout")
     except socks.Socks5Error, e:
       plog('WARN', 'A SOCKS5 error '+str(e.value[0])+' occured for '+address+": "+str(e))
       rval = (-float(e.value[0]), None,  e.__class__.__name__+str(e))
     except crypto.Error, e:
       traceback.print_exc()
-      rval = (-23.0, None, e.__class__.__name__+str(e))
+      rval = (E_CRYPTO, None, e.__class__.__name__+str(e))
     except (SSL.ZeroReturnError, SSL.WantReadError, SSL.WantWriteError, SSL.WantX509LookupError), e:
       # XXX: None of these are really "errors" per se
       traceback.print_exc()
-      rval = (-666.0, None, e.__class__.__name__+str(e))
+      rval = (E_MISC, None, e.__class__.__name__+str(e))
     except SSL.SysCallError, e:
       # Errors on the underlying socket will be caught here.
       if e[0] == -1: # unexpected eof
@@ -1783,7 +1783,7 @@ class SSLTest(SearchBasedTest):
         rval = (float(e[0]), None, e[1])
       else:
         traceback.print_exc()
-        rval = (-666.0, None, e.__class__.__name__+str(e))
+        rval = (E_MISC, None, e.__class__.__name__+str(e))
     except SSL.Error, e:
       signal.alarm(0) # Since we might recurse
       for (lib, func, reason) in e.message: # e.message is always list of 3-tuples
@@ -1796,14 +1796,14 @@ class SSLTest(SearchBasedTest):
       else:
         plog('WARN', 'An unknown SSL error occured for '+address+': '+str(e))
         traceback.print_exc()
-        rval = (-666.0, None,  e.__class__.__name__+str(e))
+        rval = (E_MISC, None,  e.__class__.__name__+str(e))
     except KeyboardInterrupt:
       signal.alarm(0)
       raise
     except Exception, e:
       plog('WARN', 'An unknown SSL error occured for '+address+': '+str(e))
       traceback.print_exc()
-      rval = (-666.0, None,  e.__class__.__name__+str(e))
+      rval = (E_MISC, None,  e.__class__.__name__+str(e))
     signal.alarm(0)
     return rval
 
@@ -1930,30 +1930,30 @@ class SSLTest(SearchBasedTest):
 
     if not cert:
       if code < 0 and type(code) == float:
-        if code == -1: # "General socks error"
+        if code == E_SOCKS: # "General socks error"
           fail_reason = FAILURE_CONNERROR
-        elif code == -2: # "connection not allowed" aka ExitPolicy
+        elif code == E_POLICY: # "connection not allowed" aka ExitPolicy
           fail_reason = FAILURE_EXITPOLICY
-        elif code == -3: # "Net Unreach" ??
+        elif code == E_NETUNREACH: # "Net Unreach" ??
           fail_reason = FAILURE_NETUNREACH
-        elif code == -4: # "Host Unreach" aka RESOLVEFAILED
+        elif code == E_HOSTUNREACH: # "Host Unreach" aka RESOLVEFAILED
           fail_reason = FAILURE_HOSTUNREACH
           result = SSLTestResult(self.node_map[exit_node[1:]], address,
                                 ssl_file_name, TEST_FAILURE, fail_reason)
           return self.register_dns_failure(result)
-        elif code == -5: # Connection refused
+        elif code == E_REFUSED: # Connection refused
           fail_reason = FAILURE_CONNREFUSED
           result = SSLTestResult(self.node_map[exit_node[1:]],
                        address, ssl_file_name, TEST_FAILURE, fail_reason)
           self.extra_info=exc
           self.register_exit_failure(result)
           return TEST_FAILURE
-        elif code == -6: # timeout
+        elif code == E_TIMEOUT: # timeout
           fail_reason = FAILURE_TIMEOUT
           result = SSLTestResult(self.node_map[exit_node[1:]], address,
                                 ssl_file_name, TEST_FAILURE, fail_reason)
           return self.register_timeout_failure(result)
-        elif code == -23:
+        elif code == E_CRYPTO:
           fail_reason = FAILURE_CRYPTOERROR
           result = SSLTestResult(self.node_map[exit_node[1:]],
                        address, ssl_file_name, TEST_FAILURE, fail_reason)
-- 
1.7.1




More information about the tor-commits mailing list