You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
1.1 KiB

4 years ago
  1. import warnings
  2. from threading import RLock as _RLock
  3. from OpenSSL import SSL as _ssl
  4. warnings.warn(
  5. "OpenSSL.tsafe is deprecated and will be removed",
  6. DeprecationWarning, stacklevel=3
  7. )
  8. class Connection:
  9. def __init__(self, *args):
  10. self._ssl_conn = _ssl.Connection(*args)
  11. self._lock = _RLock()
  12. for f in ('get_context', 'pending', 'send', 'write', 'recv', 'read',
  13. 'renegotiate', 'bind', 'listen', 'connect', 'accept',
  14. 'setblocking', 'fileno', 'shutdown', 'close', 'get_cipher_list',
  15. 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
  16. 'makefile', 'get_app_data', 'set_app_data', 'state_string',
  17. 'sock_shutdown', 'get_peer_certificate', 'get_peer_cert_chain',
  18. 'want_read', 'want_write', 'set_connect_state',
  19. 'set_accept_state', 'connect_ex', 'sendall'):
  20. exec("""def %s(self, *args):
  21. self._lock.acquire()
  22. try:
  23. return self._ssl_conn.%s(*args)
  24. finally:
  25. self._lock.release()\n""" % (f, f))