Source code for M2Crypto.SSL.SSLServer

"""SSLServer

Copyright (c) 1999-2002 Ng Pheng Siong. All rights reserved."""

# M2Crypto
from M2Crypto.SSL.Connection import Connection
from M2Crypto.SSL.Context import Context  # noqa
from M2Crypto import util  # noqa
from socketserver import (
    BaseRequestHandler,
    BaseServer,
    TCPServer,
    ThreadingMixIn,
)
import os

if os.name != "nt":
    from socketserver import ForkingMixIn
import socket as std_socket
from typing import Union, Optional

__all__ = ["SSLServer", "ForkingSSLServer", "ThreadingSSLServer"]


[docs] class SSLServer(TCPServer): socket: Connection # type: ignore[assignment] def __init__( self, server_address: util.AddrType, RequestHandlerClass: "BaseRequestHandler", ssl_context: "Context", bind_and_activate: bool = True, ) -> None: """ Superclass says: Constructor. May be extended, do not override. This class says: Ho-hum. """ BaseServer.__init__(self, server_address, RequestHandlerClass) # type: ignore[arg-type] self.ssl_ctx = ssl_context self.socket = Connection(self.ssl_ctx) if bind_and_activate: self.server_bind() self.server_activate()
[docs] def handle_request(self) -> None: from M2Crypto.SSL import SSLError request = None client_address = None try: request, client_address = self.get_request() if self.verify_request(request, client_address): self.process_request(request, client_address) except SSLError: self.handle_error(request, client_address)
[docs] def handle_error( # type: ignore[override] self, request: Optional[Union[std_socket.socket, Connection]], client_address: Optional[util.AddrType], ) -> None: print("-" * 40) import traceback traceback.print_exc() print("-" * 40)
[docs] class ThreadingSSLServer(ThreadingMixIn, SSLServer): pass
if os.name != "nt":
[docs] class ForkingSSLServer(ForkingMixIn, SSLServer): pass