X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=python-eventlet%2Feventlet%2Fgreen%2Fssl.py;fp=eventlet%2Feventlet%2Fgreen%2Fssl.py;h=ded65338c8d59bad2c7d26b7be9f21b3c81d979d;hb=refs%2Fheads%2Fpre_1529660_master;hp=963fbdb265af85483f7ff2bdcebc9a4bd98da866;hpb=376ff3bfe7071cc0793184a378c4e74508fb0d97;p=packages%2Ftrusty%2Fpython-eventlet.git diff --git a/eventlet/eventlet/green/ssl.py b/python-eventlet/eventlet/green/ssl.py similarity index 95% rename from eventlet/eventlet/green/ssl.py rename to python-eventlet/eventlet/green/ssl.py index 963fbdb..ded6533 100644 --- a/eventlet/eventlet/green/ssl.py +++ b/python-eventlet/eventlet/green/ssl.py @@ -3,6 +3,7 @@ __ssl = __import__('ssl') from eventlet.patcher import slurp_properties slurp_properties(__ssl, globals(), srckeys=dir(__ssl)) +import functools import sys import errno time = __import__('time') @@ -162,11 +163,14 @@ class GreenSSLSocket(_original_sslsocket): self.__class__) amount = len(data) count = 0 + data_to_send = data while (count < amount): - v = self.send(data[count:]) + v = self.send(data_to_send) count += v if v == 0: trampoline(self, write=True, timeout_exc=timeout_exc('timed out')) + else: + data_to_send = data[count:] return amount else: while True: @@ -342,7 +346,7 @@ def wrap_socket(sock, *a, **kw): if hasattr(__ssl, 'sslwrap_simple'): def sslwrap_simple(sock, keyfile=None, certfile=None): """A replacement for the old socket.ssl function. Designed - for compability with Python 2.5 and earlier. Will disappear in + for compatibility with Python 2.5 and earlier. Will disappear in Python 3.0.""" ssl_sock = GreenSSLSocket(sock, keyfile=keyfile, certfile=certfile, server_side=False, @@ -350,3 +354,14 @@ if hasattr(__ssl, 'sslwrap_simple'): ssl_version=PROTOCOL_SSLv23, ca_certs=None) return ssl_sock + + +if hasattr(__ssl, 'SSLContext'): + @functools.wraps(__ssl.SSLContext.wrap_socket) + def _green_sslcontext_wrap_socket(self, sock, *a, **kw): + return GreenSSLSocket(sock, *a, _context=self, **kw) + + # FIXME: + # * GreenSSLContext akin to GreenSSLSocket + # * make ssl.create_default_context() use modified SSLContext from globals as usual + __ssl.SSLContext.wrap_socket = _green_sslcontext_wrap_socket