|
@@ -47,6 +47,7 @@ from twisted.internet.tcp import Port
|
|
|
from twisted.logger import LoggingFile, LogLevel
|
|
|
from twisted.protocols.tls import TLSMemoryBIOFactory
|
|
|
from twisted.python.threadpool import ThreadPool
|
|
|
+from twisted.web.resource import Resource
|
|
|
|
|
|
import synapse.util.caches
|
|
|
from synapse.api.constants import MAX_PDU_SIZE
|
|
@@ -55,12 +56,13 @@ from synapse.app.phone_stats_home import start_phone_stats_home
|
|
|
from synapse.config import ConfigError
|
|
|
from synapse.config._base import format_config_error
|
|
|
from synapse.config.homeserver import HomeServerConfig
|
|
|
-from synapse.config.server import ManholeConfig
|
|
|
+from synapse.config.server import ListenerConfig, ManholeConfig
|
|
|
from synapse.crypto import context_factory
|
|
|
from synapse.events.presence_router import load_legacy_presence_router
|
|
|
from synapse.events.spamcheck import load_legacy_spam_checkers
|
|
|
from synapse.events.third_party_rules import load_legacy_third_party_event_rules
|
|
|
from synapse.handlers.auth import load_legacy_password_auth_providers
|
|
|
+from synapse.http.site import SynapseSite
|
|
|
from synapse.logging.context import PreserveLoggingContext
|
|
|
from synapse.logging.opentracing import init_tracer
|
|
|
from synapse.metrics import install_gc_manager, register_threadpool
|
|
@@ -357,6 +359,55 @@ def listen_tcp(
|
|
|
return r # type: ignore[return-value]
|
|
|
|
|
|
|
|
|
+def listen_http(
|
|
|
+ listener_config: ListenerConfig,
|
|
|
+ root_resource: Resource,
|
|
|
+ version_string: str,
|
|
|
+ max_request_body_size: int,
|
|
|
+ context_factory: IOpenSSLContextFactory,
|
|
|
+ reactor: IReactorSSL = reactor,
|
|
|
+) -> List[Port]:
|
|
|
+ port = listener_config.port
|
|
|
+ bind_addresses = listener_config.bind_addresses
|
|
|
+ tls = listener_config.tls
|
|
|
+
|
|
|
+ assert listener_config.http_options is not None
|
|
|
+
|
|
|
+ site_tag = listener_config.http_options.tag
|
|
|
+ if site_tag is None:
|
|
|
+ site_tag = str(port)
|
|
|
+
|
|
|
+ site = SynapseSite(
|
|
|
+ "synapse.access.%s.%s" % ("https" if tls else "http", site_tag),
|
|
|
+ site_tag,
|
|
|
+ listener_config,
|
|
|
+ root_resource,
|
|
|
+ version_string,
|
|
|
+ max_request_body_size=max_request_body_size,
|
|
|
+ reactor=reactor,
|
|
|
+ )
|
|
|
+ if tls:
|
|
|
+ # refresh_certificate should have been called before this.
|
|
|
+ assert context_factory is not None
|
|
|
+ ports = listen_ssl(
|
|
|
+ bind_addresses,
|
|
|
+ port,
|
|
|
+ site,
|
|
|
+ context_factory,
|
|
|
+ reactor=reactor,
|
|
|
+ )
|
|
|
+ logger.info("Synapse now listening on TCP port %d (TLS)", port)
|
|
|
+ else:
|
|
|
+ ports = listen_tcp(
|
|
|
+ bind_addresses,
|
|
|
+ port,
|
|
|
+ site,
|
|
|
+ reactor=reactor,
|
|
|
+ )
|
|
|
+ logger.info("Synapse now listening on TCP port %d", port)
|
|
|
+ return ports
|
|
|
+
|
|
|
+
|
|
|
def listen_ssl(
|
|
|
bind_addresses: Collection[str],
|
|
|
port: int,
|