Repository: libcloud
Updated Branches:
  refs/heads/trunk 9c4d15c67 -> 69fc915b5


Refactor the code in a separate function.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/69fc915b
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/69fc915b
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/69fc915b

Branch: refs/heads/trunk
Commit: 69fc915b52fc42b288fa503b2c44c4cc4691ec18
Parents: 9c4d15c
Author: Tomaz Muraus <[email protected]>
Authored: Sat Jan 16 21:03:20 2016 +0100
Committer: Tomaz Muraus <[email protected]>
Committed: Sat Jan 16 21:03:20 2016 +0100

----------------------------------------------------------------------
 libcloud/httplib_ssl.py | 54 ++++++++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/69fc915b/libcloud/httplib_ssl.py
----------------------------------------------------------------------
diff --git a/libcloud/httplib_ssl.py b/libcloud/httplib_ssl.py
index 5f11d05..2355368 100644
--- a/libcloud/httplib_ssl.py
+++ b/libcloud/httplib_ssl.py
@@ -290,6 +290,8 @@ class LibcloudHTTPSConnection(httplib.HTTPSConnection, 
LibcloudBaseConnection):
         if self.http_proxy_used:
             self._activate_http_proxy(sock=sock)
 
+        ssl_version = libcloud.security.SSL_VERSION
+
         try:
             self.sock = ssl.wrap_socket(
                 sock,
@@ -297,31 +299,11 @@ class LibcloudHTTPSConnection(httplib.HTTPSConnection, 
LibcloudBaseConnection):
                 self.cert_file,
                 cert_reqs=ssl.CERT_REQUIRED,
                 ca_certs=self.ca_cert,
-                ssl_version=libcloud.security.SSL_VERSION)
+                ssl_version=ssl_version)
         except socket.error:
             exc = sys.exc_info()[1]
-            exc_msg = str(exc)
-
             # Re-throw an exception with a more friendly error message
-            if 'connection reset by peer' in exc_msg.lower():
-                ssl_version = libcloud.security.SSL_VERSION
-                ssl_version = SSL_CONSTANT_TO_TLS_VERSION_MAP[ssl_version]
-                msg = (UNSUPPORTED_TLS_VERSION_ERROR_MSG %
-                       (exc_msg, ssl_version))
-
-                # Note: In some cases arguments are (errno, message) and in
-                # other it's just (message,)
-                exc_args = getattr(exc, 'args', [])
-
-                if len(exc_args) == 2:
-                    new_exc_args = [exc.args[0], msg]
-                else:
-                    new_exc_args = [msg]
-
-                new_exc = socket.error(*new_exc_args)
-                new_exc.original_exc = exc
-                raise new_exc
-
+            exc = get_socket_error_exception(ssl_version=ssl_version, exc=exc)
             raise exc
 
         cert = self.sock.getpeercert()
@@ -330,3 +312,31 @@ class LibcloudHTTPSConnection(httplib.HTTPSConnection, 
LibcloudBaseConnection):
         except CertificateError:
             e = sys.exc_info()[1]
             raise ssl.SSLError('Failed to verify hostname: %s' % (str(e)))
+
+
+def get_socket_error_exception(ssl_version, exc):
+    """
+    Function which intercepts socket.error exceptions and re-throws an
+    exception with a more user-friendly message in case server doesn't support
+    requested SSL version.
+    """
+    exc_msg = str(exc)
+
+    # Re-throw an exception with a more friendly error message
+    if 'connection reset by peer' in exc_msg.lower():
+        ssl_version_name = SSL_CONSTANT_TO_TLS_VERSION_MAP[ssl_version]
+        msg = (UNSUPPORTED_TLS_VERSION_ERROR_MSG %
+               (exc_msg, ssl_version_name))
+
+        # Note: In some cases arguments are (errno, message) and in
+        # other it's just (message,)
+        exc_args = getattr(exc, 'args', [])
+
+        if len(exc_args) == 2:
+            new_exc_args = [exc.args[0], msg]
+        else:
+            new_exc_args = [msg]
+
+        new_exc = socket.error(*new_exc_args)
+        new_exc.original_exc = exc
+        return new_exc

Reply via email to