Ensure we are utilizing the context created by HTTPSConnection, or falling back to ssl. Fixes #517
This commit is contained in:
		
							parent
							
								
									c7530bb143
								
							
						
					
					
						commit
						41e599f9c3
					
				
							
								
								
									
										29
									
								
								speedtest.py
								
								
								
								
							
							
						
						
									
										29
									
								
								speedtest.py
								
								
								
								
							|  | @ -36,7 +36,7 @@ except ImportError: | ||||||
|     gzip = None |     gzip = None | ||||||
|     GZIP_BASE = object |     GZIP_BASE = object | ||||||
| 
 | 
 | ||||||
| __version__ = '2.0.1' | __version__ = '2.0.2a' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class FakeShutdownEvent(object): | class FakeShutdownEvent(object): | ||||||
|  | @ -85,9 +85,9 @@ except ImportError: | ||||||
|                                 HTTPErrorProcessor, OpenerDirector) |                                 HTTPErrorProcessor, OpenerDirector) | ||||||
| 
 | 
 | ||||||
| try: | try: | ||||||
|     from httplib import HTTPConnection |     from httplib import HTTPConnection, BadStatusLine | ||||||
| except ImportError: | except ImportError: | ||||||
|     from http.client import HTTPConnection |     from http.client import HTTPConnection, BadStatusLine | ||||||
| 
 | 
 | ||||||
| try: | try: | ||||||
|     from httplib import HTTPSConnection |     from httplib import HTTPSConnection | ||||||
|  | @ -266,10 +266,13 @@ try: | ||||||
|     except AttributeError: |     except AttributeError: | ||||||
|         CERT_ERROR = tuple() |         CERT_ERROR = tuple() | ||||||
| 
 | 
 | ||||||
|     HTTP_ERRORS = ((HTTPError, URLError, socket.error, ssl.SSLError) + |     HTTP_ERRORS = ( | ||||||
|                    CERT_ERROR) |         (HTTPError, URLError, socket.error, ssl.SSLError, BadStatusLine) + | ||||||
|  |         CERT_ERROR | ||||||
|  |     ) | ||||||
| except ImportError: | except ImportError: | ||||||
|     HTTP_ERRORS = (HTTPError, URLError, socket.error) |     ssl = None | ||||||
|  |     HTTP_ERRORS = (HTTPError, URLError, socket.error, BadStatusLine) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SpeedtestException(Exception): | class SpeedtestException(Exception): | ||||||
|  | @ -420,14 +423,12 @@ if HTTPSConnection: | ||||||
|         """ |         """ | ||||||
|         def __init__(self, *args, **kwargs): |         def __init__(self, *args, **kwargs): | ||||||
|             source_address = kwargs.pop('source_address', None) |             source_address = kwargs.pop('source_address', None) | ||||||
|             context = kwargs.pop('context', None) |  | ||||||
|             timeout = kwargs.pop('timeout', 10) |             timeout = kwargs.pop('timeout', 10) | ||||||
| 
 | 
 | ||||||
|             HTTPSConnection.__init__(self, *args, **kwargs) |             HTTPSConnection.__init__(self, *args, **kwargs) | ||||||
| 
 | 
 | ||||||
|             self.source_address = source_address |  | ||||||
|             self._context = context |  | ||||||
|             self.timeout = timeout |             self.timeout = timeout | ||||||
|  |             self.source_address = source_address | ||||||
| 
 | 
 | ||||||
|         def connect(self): |         def connect(self): | ||||||
|             "Connect to a host on a given (SSL) port." |             "Connect to a host on a given (SSL) port." | ||||||
|  | @ -435,9 +436,13 @@ if HTTPSConnection: | ||||||
|             SpeedtestHTTPConnection.connect(self) |             SpeedtestHTTPConnection.connect(self) | ||||||
| 
 | 
 | ||||||
|             kwargs = {} |             kwargs = {} | ||||||
|             if hasattr(ssl, 'SSLContext'): |             if ssl: | ||||||
|                 kwargs['server_hostname'] = self.host |                 if hasattr(ssl, 'SSLContext'): | ||||||
|                 self.sock = self._context.wrap_socket(self.sock, **kwargs) |                     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): | def _build_connection(connection, source_address, timeout, context=None): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue