Alex Gaynor | a079213 | 2017-07-22 09:13:57 -0400 | [diff] [blame] | 1 | import warnings |
Alex Gaynor | c3fac9d | 2016-01-16 12:15:09 -0500 | [diff] [blame] | 2 | from threading import RLock as _RLock |
Jean-Paul Calderone | 897bc25 | 2008-02-18 20:50:23 -0500 | [diff] [blame] | 3 | |
Alex Gaynor | c3fac9d | 2016-01-16 12:15:09 -0500 | [diff] [blame] | 4 | from OpenSSL import SSL as _ssl |
Jean-Paul Calderone | 897bc25 | 2008-02-18 20:50:23 -0500 | [diff] [blame] | 5 | |
Hynek Schlawack | ba1d66c | 2015-09-05 18:17:42 +0200 | [diff] [blame] | 6 | |
Alex Gaynor | a079213 | 2017-07-22 09:13:57 -0400 | [diff] [blame] | 7 | warnings.warn( |
| 8 | "OpenSSL.tsafe is deprecated and will be removed", |
| 9 | DeprecationWarning, stacklevel=3 |
| 10 | ) |
| 11 | |
| 12 | |
Jean-Paul Calderone | 897bc25 | 2008-02-18 20:50:23 -0500 | [diff] [blame] | 13 | class Connection: |
| 14 | def __init__(self, *args): |
Jean-Paul Calderone | 65627a2 | 2014-03-25 20:58:30 -0400 | [diff] [blame] | 15 | self._ssl_conn = _ssl.Connection(*args) |
Jean-Paul Calderone | 897bc25 | 2008-02-18 20:50:23 -0500 | [diff] [blame] | 16 | 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 Schlawack | ba1d66c | 2015-09-05 18:17:42 +0200 | [diff] [blame] | 23 | '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 Calderone | e628465 | 2010-08-11 22:40:57 -0400 | [diff] [blame] | 26 | exec("""def %s(self, *args): |
Jean-Paul Calderone | 897bc25 | 2008-02-18 20:50:23 -0500 | [diff] [blame] | 27 | self._lock.acquire() |
| 28 | try: |
Jean-Paul Calderone | e628465 | 2010-08-11 22:40:57 -0400 | [diff] [blame] | 29 | return self._ssl_conn.%s(*args) |
Jean-Paul Calderone | 897bc25 | 2008-02-18 20:50:23 -0500 | [diff] [blame] | 30 | finally: |
Jean-Paul Calderone | e628465 | 2010-08-11 22:40:57 -0400 | [diff] [blame] | 31 | self._lock.release()\n""" % (f, f)) |