[or-cvs] [torflow/master] Add timer to HTTP requests. They were sometimes hanging.

mikeperry at torproject.org mikeperry at torproject.org
Thu Sep 30 16:29:13 UTC 2010


Author: Mike Perry <mikeperry-git at fscked.org>
Date: Thu, 30 Sep 2010 09:28:08 -0700
Subject: Add timer to HTTP requests. They were sometimes hanging.
Commit: d56328fac04cb336433832251bb705daff82c4b6

Also add some logs.
---
 NetworkScanners/ExitAuthority/soat.py |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/NetworkScanners/ExitAuthority/soat.py b/NetworkScanners/ExitAuthority/soat.py
index 100907d..da3a94e 100755
--- a/NetworkScanners/ExitAuthority/soat.py
+++ b/NetworkScanners/ExitAuthority/soat.py
@@ -410,6 +410,7 @@ def http_request(address, cookie_jar=None, headers=firefox_headers):
     plog('WARN', 'An unknown HTTP error occured for '+address+": "+str(e))
     traceback.print_exc()
     rval = (E_MISC, None, [], "", e.__class__.__name__+str(e))
+  plog("INFO", "Completed HTTP Reqest for: "+address)
   return rval
 
 
@@ -420,6 +421,7 @@ def ssl_request(address):
   try:
     return _ssl_request(address)
   except socket.timeout, e:
+    plog("INFO", "SSL Request done with timoeut for addrress: "+str(address))
     return (E_TIMEOUT, None, "Socket timeout")
 
 def _ssl_request(address, method='TLSv1_METHOD'):
@@ -495,6 +497,7 @@ def _ssl_request(address, method='TLSv1_METHOD'):
     traceback.print_exc()
     rval = (E_MISC, None,  e.__class__.__name__+str(e))
   signal.alarm(0)
+  plog("INFO", "SSL Request done for addrress: "+str(address))
   return rval
 
 
@@ -2815,10 +2818,16 @@ def decompress_response_data(response):
   if not tot_len:
     tot_len = "0"
 
+  def _raise_timeout(signum, frame):
+    raise socket.timeout("HTTP read timed out")
+  signal.signal(signal.SIGALRM, _raise_timeout)
+
   start = 0
   data = ""
   while True:
+    signal.alarm(int(read_timeout)) # raise a timeout after read_timeout
     data_read = response.read(500) # Cells are 495 bytes..
+    signal.alarm(0)
     if not start:
       start = time.time()
     # TODO: if this doesn't work, check stream observer for
@@ -2838,6 +2847,7 @@ def decompress_response_data(response):
       break
     data += data_read
 
+  plog("INFO", "Completed read")
   if encoding == 'gzip' or encoding == 'x-gzip':
     return gzip.GzipFile('', 'rb', 9, StringIO.StringIO(data)).read()
   elif encoding == 'deflate':
-- 
1.7.1



More information about the tor-commits mailing list