diff options
| author | UltraQbik <no1skill@yandex.ru> | 2024-08-23 02:39:59 +0300 |
|---|---|---|
| committer | UltraQbik <no1skill@yandex.ru> | 2024-08-23 02:39:59 +0300 |
| commit | 1743ab0a4fdb380cca245875a3f9f5b17d049019 (patch) | |
| tree | a3719e0ceb1bb71c516c585af2218ca0fa10edea | |
| parent | d9cc26c6a545e110615957890f36163dff4db7c0 (diff) | |
| download | httpy-1743ab0a4fdb380cca245875a3f9f5b17d049019.tar.gz httpy-1743ab0a4fdb380cca245875a3f9f5b17d049019.zip | |
Add basic stuff
| -rw-r--r-- | main.py | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/main.py b/main.py index f68f6dd..c202dea 100644 --- a/main.py +++ b/main.py @@ -40,6 +40,48 @@ I_PATH_MAP = { class HTTPServer: """ + The mightier HTTP server! + Now uses threading + """ + + def __init__(self, *, port: int, packet_size: int = 2048): + # SSL context + context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + context.check_hostname = False + context.load_cert_chain( + certfile=r"C:\Certbot\live\qubane.ddns.net\fullchain.pem", # use your own path here + keyfile=r"C:\Certbot\live\qubane.ddns.net\privkey.pem") # here too + + # Sockets + self.sock: ssl.SSLSocket = context.wrap_socket( + socket.socket(socket.AF_INET, socket.SOCK_STREAM), + server_side=True) + self.packet_size: int = packet_size + self.port: int = port + + # client thread list + self.client_threads: list[threading.Thread] = [] + + # add signaling + self.stop_event = threading.Event() + signal.signal(signal.SIGINT, self._signal_interrupt) + + def _signal_interrupt(self, *args): + """ + Checks for CTRL+C keyboard interrupt, to properly stop the HTTP server + """ + + # stop all threads + self.stop_event.set() + for thread in self.client_threads: + thread.join() + + # close server socket + self.sock.close() + + +class HTTPServer: + """ The mighty HTTP server """ @@ -76,7 +118,6 @@ class HTTPServer: """ # setup signaling - signal.signal(signal.SIGINT, self.interrupt) # bind and start listening to port self.socket.bind(('', self.bind_port)) |