1#!/usr/bin/env python3 2 3import argparse 4import logging 5import os 6import sys 7from typing import Any 8 9_dir = os.path.dirname(__file__) 10 11 12def get_parser() -> argparse.ArgumentParser: 13 parser = argparse.ArgumentParser(description='QUIC server') 14 parser.add_argument( 15 '-c', 16 '--certificate', 17 type=str, 18 default=os.path.join(_dir, 'certs', 'cert.pem'), 19 help='load the TLS certificate from the specified file', 20 ) 21 parser.add_argument( 22 '--host', 23 type=str, 24 default='::', 25 help='listen on the specified address (defaults to ::)', 26 ) 27 parser.add_argument( 28 '--port', 29 type=int, 30 default=4433, 31 help='listen on the specified port (defaults to 4433)', 32 ) 33 parser.add_argument( 34 '-k', 35 '--private-key', 36 type=str, 37 default=os.path.join(_dir, 'certs', 'cert.key'), 38 help='load the TLS private key from the specified file', 39 ) 40 parser.add_argument( 41 '--handlers-path', 42 type=str, 43 default=os.path.join( 44 _dir, '..', '..', 'webtransport', 'quic', 'handlers'), 45 help='the directory path of QuicTransport event handlers', 46 ) 47 parser.add_argument( 48 '-v', 49 '--verbose', 50 action='store_true', 51 help='increase logging verbosity' 52 ) 53 return parser 54 55 56def run(venv: Any, **kwargs: Any) -> None: 57 # The venv argument is passed with `wpt serve-quic-transport` but is unused. 58 assert sys.version_info.major == 3, 'QUIC server only runs in Python 3' 59 logging.basicConfig( 60 format='%(asctime)s %(levelname)s %(name)s %(message)s', 61 level=logging.DEBUG if kwargs.get('verbose') else logging.INFO, 62 ) 63 64 # Delay import after version check to make the error easier to understand. 65 from .quic_transport_server import start 66 start(**kwargs) 67 68 69def main() -> None: 70 # This is only used when executing the script directly. Users are 71 # responsible for managing venv themselves. `wpt serve-quic-transport` does 72 # NOT use this code path. 73 kwargs = vars(get_parser().parse_args()) 74 run(None, **kwargs) 75 76 77if __name__ == '__main__': 78 main() 79