[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