#!/usr/bin/env python3 import argparse import logging import os import sys from typing import Any _dir = os.path.dirname(__file__) def get_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser(description='QUIC server') parser.add_argument( '-c', '--certificate', type=str, default=os.path.join(_dir, 'certs', 'cert.pem'), help='load the TLS certificate from the specified file', ) parser.add_argument( '--host', type=str, default='::', help='listen on the specified address (defaults to ::)', ) parser.add_argument( '--port', type=int, default=4433, help='listen on the specified port (defaults to 4433)', ) parser.add_argument( '-k', '--private-key', type=str, default=os.path.join(_dir, 'certs', 'cert.key'), help='load the TLS private key from the specified file', ) parser.add_argument( '--handlers-path', type=str, default=os.path.join( _dir, '..', '..', 'webtransport', 'quic', 'handlers'), help='the directory path of QuicTransport event handlers', ) parser.add_argument( '-v', '--verbose', action='store_true', help='increase logging verbosity' ) return parser def run(venv: Any, **kwargs: Any) -> None: # The venv argument is passed with `wpt serve-quic-transport` but is unused. assert sys.version_info.major == 3, 'QUIC server only runs in Python 3' logging.basicConfig( format='%(asctime)s %(levelname)s %(name)s %(message)s', level=logging.DEBUG if kwargs.get('verbose') else logging.INFO, ) # Delay import after version check to make the error easier to understand. from .quic_transport_server import start start(**kwargs) def main() -> None: # This is only used when executing the script directly. Users are # responsible for managing venv themselves. `wpt serve-quic-transport` does # NOT use this code path. kwargs = vars(get_parser().parse_args()) run(None, **kwargs) if __name__ == '__main__': main()