blob: 3a9c71035149b947e3804fce2965928d1aa71f20 [file] [log] [blame]
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001from OpenSSL import SSL
2_ssl = SSL
3del SSL
4
5import threading
6_RLock = threading.RLock
7del threading
8
9class Connection:
10 def __init__(self, *args):
Jean-Paul Calderone65627a22014-03-25 20:58:30 -040011 self._ssl_conn = _ssl.Connection(*args)
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050012 self._lock = _RLock()
13
14 for f in ('get_context', 'pending', 'send', 'write', 'recv', 'read',
15 'renegotiate', 'bind', 'listen', 'connect', 'accept',
16 'setblocking', 'fileno', 'shutdown', 'close', 'get_cipher_list',
17 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
18 'makefile', 'get_app_data', 'set_app_data', 'state_string',
Jean-Paul Calderone95b92c72011-05-17 15:45:21 -040019 'sock_shutdown', 'get_peer_certificate', 'get_peer_cert_chain', 'want_read',
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050020 'want_write', 'set_connect_state', 'set_accept_state',
21 'connect_ex', 'sendall'):
Jean-Paul Calderonee6284652010-08-11 22:40:57 -040022 exec("""def %s(self, *args):
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050023 self._lock.acquire()
24 try:
Jean-Paul Calderonee6284652010-08-11 22:40:57 -040025 return self._ssl_conn.%s(*args)
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050026 finally:
Jean-Paul Calderonee6284652010-08-11 22:40:57 -040027 self._lock.release()\n""" % (f, f))
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050028