add a ssl timeout (temp fix)

This commit is contained in:
Romain Bignon 2012-11-05 15:58:59 +01:00
commit e825a7eac0
2 changed files with 23 additions and 15 deletions

View file

@ -64,13 +64,3 @@ class BPBackend(BaseBackend, ICapBank):
#TODO: retourner le numero du virement
#TODO: support the 'reason' parameter
return self.browser.make_transfer(from_account, to_account, amount)
# XXX This hack is useful to workaround a bug in OpenSSL 1.0.1c-4 in Debian Wheezy.
# See https://symlink.me/issues/863 and
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666051
import ssl
def mywrap_socket(sock, *args, **kwargs):
kwargs['ssl_version'] = kwargs.get('ssl_version', ssl.PROTOCOL_TLSv1)
return ssl.wrap_socketold(sock, *args, **kwargs)
ssl.wrap_socketold=ssl.wrap_socket
ssl.wrap_socket=mywrap_socket

View file

@ -172,7 +172,7 @@ class StandardBrowser(mechanize.Browser):
SAVE_RESPONSES = False
DEBUG_HTTP = False
DEBUG_MECHANIZE = False
DEFAULT_TIMEOUT = 10
DEFAULT_TIMEOUT = 15
responses_dirname = None
responses_count = 0
@ -254,7 +254,7 @@ class StandardBrowser(mechanize.Browser):
try:
return self._openurl(*args, **kwargs)
except (mechanize.BrowserStateError, mechanize.response_seek_wrapper,
urllib2.HTTPError, urllib2.URLError, BadStatusLine), e:
urllib2.HTTPError, urllib2.URLError, BadStatusLine, ssl.SSLError), e:
if isinstance(e, mechanize.BrowserStateError) and hasattr(self, 'home'):
self.home()
return self._openurl(*args, **kwargs)
@ -507,7 +507,7 @@ class BaseBrowser(StandardBrowser):
nologin = kwargs.pop('nologin', False)
try:
self._change_location(mechanize.Browser.submit(self, *args, **kwargs), no_login=nologin)
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError, BadStatusLine), e:
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError, BadStatusLine, ssl.SSLError), e:
self.page = None
raise self.get_exception(e)(e)
except (mechanize.BrowserStateError, BrowserRetry), e:
@ -539,7 +539,7 @@ class BaseBrowser(StandardBrowser):
"""
try:
self._change_location(mechanize.Browser.follow_link(self, *args, **kwargs))
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError, BadStatusLine), e:
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError, BadStatusLine, ssl.SSLError), e:
self.page = None
raise self.get_exception(e)('%s (url="%s")' % (e, args and args[0] or 'None'))
except (mechanize.BrowserStateError, BrowserRetry), e:
@ -574,7 +574,7 @@ class BaseBrowser(StandardBrowser):
if not self.page or not args or self.page.url != args[0]:
keep_kwargs['no_login'] = True
self.location(*keep_args, **keep_kwargs)
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError, BadStatusLine), e:
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError, BadStatusLine, ssl.SSLError), e:
self.page = None
raise self.get_exception(e)('%s (url="%s")' % (e, args and args[0] or 'None'))
except mechanize.BrowserStateError:
@ -664,3 +664,21 @@ class BaseBrowser(StandardBrowser):
if self._cookie:
self._cookie.save()
import ssl
def mywrap_socket(sock, *args, **kwargs):
kwargs['do_handshake_on_connect']=False
kwargs['ssl_version'] = kwargs.get('ssl_version', ssl.PROTOCOL_TLSv1)
sock = ssl.wrap_socketold(sock, *args, **kwargs)
sock.settimeout(StandardBrowser.DEFAULT_TIMEOUT)
try:
sock.getpeername()
except:
sock.do_handshake_on_connect = True
else:
sock.do_handshake()
return sock
ssl.wrap_socketold=ssl.wrap_socket
ssl.wrap_socket=mywrap_socket