Skip to content

Commit

Permalink
Combine the two different SSL transports, turns out they're not that …
Browse files Browse the repository at this point in the history
…different.
  • Loading branch information
barryp@macbook.home committed Jan 16, 2009
1 parent 597b815 commit ca667ca
Showing 1 changed file with 10 additions and 39 deletions.
49 changes: 10 additions & 39 deletions amqplib/client_0_8/transport.py
Expand Up @@ -128,12 +128,16 @@ class SSLTransport(_AbstractTransport):
"""
def _setup_transport(self):
"""
Wrap the socket in an sslobj, and use that
directly for _write().
Wrap the socket in an SSL object, either the
new Python 2.6 version, or the older Python 2.5 and
lower version.
"""
self.sslobj = socket.ssl(self.sock)
self._write = self.sslobj.write
if HAVE_PY26_SSL:
self.sslobj = ssl.wrap_socket(self.sock)
self.sslobj.do_handshake()
else:
self.sslobj = socket.ssl(self.sock)


def _read(self, n):
Expand All @@ -152,43 +156,13 @@ def _read(self, n):
return result


class SSLTransport2(_AbstractTransport):
"""
Transport that works over SSL for Python 2.6+
"""
def _setup_transport(self):
"""
Wrap the socket in an sslobj, and use that
directly for _write().
"""
self.sock = ssl.wrap_socket(self.sock)
self.sock.do_handshake()
self._read_buffer = ''


def _read(self, n):
"""
Read exactly n bytes from the SSL socket
"""
while len(self._read_buffer) < n:
self._read_buffer += self.sock.read(65536)

result = self._read_buffer[:n]
self._read_buffer = self._read_buffer[n:]

return result


def _write(self, s):
"""
Write a string out to the SSL socket fully.
"""
while s:
n = self.sock.write(s)
n = self.sslobj.write(s)
s = s[n:]


Expand Down Expand Up @@ -229,9 +203,6 @@ def create_transport(host, connect_timeout, ssl=False):
"""
if ssl:
if HAVE_PY26_SSL:
return SSLTransport2(host, connect_timeout)
else:
return SSLTransport(host, connect_timeout)
return SSLTransport(host, connect_timeout)
else:
return TCPTransport(host, connect_timeout)

0 comments on commit ca667ca

Please sign in to comment.