From e825a7eac05f77574468588d97cce4356ce1b8cd Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Mon, 5 Nov 2012 15:58:59 +0100 Subject: [PATCH] add a ssl timeout (temp fix) --- modules/bp/backend.py | 10 ---------- weboob/tools/browser/browser.py | 28 +++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/modules/bp/backend.py b/modules/bp/backend.py index 611be5b3..e476edc7 100644 --- a/modules/bp/backend.py +++ b/modules/bp/backend.py @@ -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 diff --git a/weboob/tools/browser/browser.py b/weboob/tools/browser/browser.py index 29f1578c..84f725a3 100644 --- a/weboob/tools/browser/browser.py +++ b/weboob/tools/browser/browser.py @@ -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