This commit is contained in:
Izalia Mae 2024-03-18 23:12:27 -04:00
parent ff34b26072
commit 2de3558925

View file

@ -10,6 +10,7 @@ from asyncio.exceptions import CancelledError
from OpenSSL import crypto
from pathlib import Path
from . import logger as logging
from .error import GeminiError
from .message import Request, Response
from .router import Router, route
@ -17,6 +18,7 @@ from .transport import AsyncTransport
if typing.TYPE_CHECKING:
from asyncio import StreamReader, StreamWriter
from collections.abc import Callable
from .router import RouteHandler
@ -94,7 +96,7 @@ class AsyncServer(dict):
SERVERS[server.name] = server
def add_route(path: str, handler: RouteHandler) -> None:
def add_route(self, path: str, handler: RouteHandler) -> None:
self.router.add_route(path, handler)
@ -139,7 +141,7 @@ class AsyncServer(dict):
if self._server is not None:
return
print(f"Starting server @ gemini://{self.host}:{self.port}")
logging.info(f"Starting server @ gemini://{self.host}:{self.port}")
loop = asyncio.get_event_loop()
@ -148,7 +150,7 @@ class AsyncServer(dict):
loop.add_signal_handler(sig, self.stop)
except ValueError:
print(f"Cannot handle signal: {sig}")
logging.warning(f"Cannot handle signal: {sig}")
self._server = await asyncio.start_server(
client_connected_cb = self.handle_client,
@ -173,11 +175,11 @@ class AsyncServer(dict):
loop.add_signal_handler(sig, signal.SIG_DFL) # type: ignore
except ValueError:
print(f"Cannot handle signal: {sig}")
logging.warning(f"Cannot handle signal: {sig}")
await self._server.wait_closed()
print("Shutting down...")
logging.info("Shutting down...")
self._server = None
@ -202,8 +204,11 @@ class AsyncServer(dict):
raise GeminiError(50, "Invalid response")
except GeminiError as error:
traceback.print_exc()
response = Response(error.status, error.message.encode("utf-8"), "text/plain")
response = Response(
error.status,
(f"{error.status.reason}: {error.message}").encode("utf-8"),
"text/plain"
)
except Exception:
response = Response(50, b"Server Error :/", "text/plain")
@ -211,7 +216,13 @@ class AsyncServer(dict):
try:
await transport.write(response.build())
print(f"{transport.remote_address} {request.path} {response.status} {len(response.body)}")
logging.info(
"ip: %s, path: %s, status: %i, length: %i",
transport.remote_address,
request.path,
response.status,
len(response.body)
)
except Exception:
traceback.print_exc()
@ -225,8 +236,8 @@ class AsyncServer(dict):
name: str,
context: ssl.SSLContext) -> int | None:
print(ssl_object)
print(name)
logging.debug(ssl_object)
logging.debug(name)
return None