def __init__(self, interface="::0", port=80, tls_cert_path=None, tls_key_path=None, check_cert_callback=None, new_client_callback=None): self.handler = _TCPConnectionsHandler() self.tls_cert_path = tls_cert_path self.bind_interface = interface self.bind_port = port if tls_cert_path != None: self.use_tls = True self.tls_cert = X509Certificate(open(tls_cert_path).read()) self.tls_key = X509PrivateKey(open(tls_key_path).read()) self.tls_cred = X509Credentials(self.tls_cert, self.tls_key, [], []) else: self.use_tls = False self.socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if self.use_tls: self.tls_session = ServerSessionFactory(self.socket, self.tls_cred) gnutls.gnutls_transport_set_push_function( self.tls_session, self.tls_send) gnutls.gnutls_transport_set_pull_function( self.tls_session, self.tls_recv) self.tls_session.bind((self.bind_interface, port)) self.tls_session.listen(100) self.handler.add_tls_connection(self.socket, self.tls_session, server=True) else: self.socket.bind((self.bind_interface, port)) self.socket.listen(100) self.handler.add_plain_connection(self.socket, server=True)
def add_tls_connection(self, socket, tls_session, receive_callback=None, server=False): wrappedsocket = TCPWrappedSocket(self, socket, tls_session, uses_tls=True, server_and_auto_accept=server) self.connections.add[tls_session] = wrappedsocket self.connections.add[socket] = wrappedsocket gnutls.gnutls_transport_set_push_function( tls_session, self._tls_custom_io_send) gnutls.gnutls_transport_set_pull_function( self.tls_session, self._tls_custom_io_recv) if receive_callback != None: wrappedsocket.set_receive_callback(receive_callback)