from eventlet.patcher import slurp_properties
slurp_properties(__ssl, globals(), srckeys=dir(__ssl))
+import functools
import sys
import errno
time = __import__('time')
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:
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,
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