blob: f1c6f67b30dce576eb368fe877a6f5f826e94bcf [file] [log] [blame]
Alex Gaynora0792132017-07-22 09:13:57 -04001import warnings
Alex Gaynorc3fac9d2016-01-16 12:15:09 -05002from threading import RLock as _RLock
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05003
Alex Gaynorc3fac9d2016-01-16 12:15:09 -05004from OpenSSL import SSL as _ssl
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05005
Hynek Schlawackba1d66c2015-09-05 18:17:42 +02006
Alex Gaynora0792132017-07-22 09:13:57 -04007warnings.warn(
8 "OpenSSL.tsafe is deprecated and will be removed",
9 DeprecationWarning, stacklevel=3
10)
11
12
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050013class Connection:
14 def __init__(self, *args):
Jean-Paul Calderone65627a22014-03-25 20:58:30 -040015 self._ssl_conn = _ssl.Connection(*args)
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050016 self._lock = _RLock()
17
18 for f in ('get_context', 'pending', 'send', 'write', 'recv', 'read',
19 'renegotiate', 'bind', 'listen', 'connect', 'accept',
20 'setblocking', 'fileno', 'shutdown', 'close', 'get_cipher_list',
21 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
22 'makefile', 'get_app_data', 'set_app_data', 'state_string',
Hynek Schlawackba1d66c2015-09-05 18:17:42 +020023 'sock_shutdown', 'get_peer_certificate', 'get_peer_cert_chain',
24 'want_read', 'want_write', 'set_connect_state',
25 'set_accept_state', 'connect_ex', 'sendall'):
Jean-Paul Calderonee6284652010-08-11 22:40:57 -040026 exec("""def %s(self, *args):
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050027 self._lock.acquire()
28 try:
Jean-Paul Calderonee6284652010-08-11 22:40:57 -040029 return self._ssl_conn.%s(*args)
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050030 finally:
Jean-Paul Calderonee6284652010-08-11 22:40:57 -040031 self._lock.release()\n""" % (f, f))