Skip to content

Commit

Permalink
Ensure we are utilizing the context created by HTTPSConnection, or fa…
Browse files Browse the repository at this point in the history
…lling back to ssl. Fixes #517
  • Loading branch information
sivel committed May 24, 2018
1 parent c7530bb commit 41e599f
Showing 1 changed file with 17 additions and 12 deletions.
29 changes: 17 additions & 12 deletions speedtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
gzip = None
GZIP_BASE = object

__version__ = '2.0.1'
__version__ = '2.0.2a'


class FakeShutdownEvent(object):
Expand Down Expand Up @@ -85,9 +85,9 @@ def isSet():
HTTPErrorProcessor, OpenerDirector)

try:
from httplib import HTTPConnection
from httplib import HTTPConnection, BadStatusLine
except ImportError:
from http.client import HTTPConnection
from http.client import HTTPConnection, BadStatusLine

try:
from httplib import HTTPSConnection
Expand Down Expand Up @@ -266,10 +266,13 @@ def write(data):
except AttributeError:
CERT_ERROR = tuple()

HTTP_ERRORS = ((HTTPError, URLError, socket.error, ssl.SSLError) +
CERT_ERROR)
HTTP_ERRORS = (
(HTTPError, URLError, socket.error, ssl.SSLError, BadStatusLine) +
CERT_ERROR
)
except ImportError:
HTTP_ERRORS = (HTTPError, URLError, socket.error)
ssl = None
HTTP_ERRORS = (HTTPError, URLError, socket.error, BadStatusLine)


class SpeedtestException(Exception):
Expand Down Expand Up @@ -420,24 +423,26 @@ class SpeedtestHTTPSConnection(HTTPSConnection,
"""
def __init__(self, *args, **kwargs):
source_address = kwargs.pop('source_address', None)
context = kwargs.pop('context', None)
timeout = kwargs.pop('timeout', 10)

HTTPSConnection.__init__(self, *args, **kwargs)

self.source_address = source_address
self._context = context
self.timeout = timeout
self.source_address = source_address

def connect(self):
"Connect to a host on a given (SSL) port."

SpeedtestHTTPConnection.connect(self)

kwargs = {}
if hasattr(ssl, 'SSLContext'):
kwargs['server_hostname'] = self.host
self.sock = self._context.wrap_socket(self.sock, **kwargs)
if ssl:
if hasattr(ssl, 'SSLContext'):
kwargs['server_hostname'] = self.host
try:
self.sock = self._context.wrap_socket(self.sock, **kwargs)
except AttributeError:
self.sock = ssl.wrap_socket(self.sock, **kwargs)


def _build_connection(connection, source_address, timeout, context=None):
Expand Down

0 comments on commit 41e599f

Please sign in to comment.