diff --git a/synapse/server.py b/synapse/server.py
index 368d615576..0bfb411269 100644
--- a/synapse/server.py
+++ b/synapse/server.py
@@ -19,29 +19,45 @@
# partial one for unit test mocking.
# Imports required for the default HomeServer() implementation
-from twisted.web.client import BrowserLikePolicyForHTTPS
+import logging
+
from twisted.enterprise import adbapi
+from twisted.web.client import BrowserLikePolicyForHTTPS
+from synapse.api.auth import Auth
+from synapse.api.filtering import Filtering
+from synapse.api.ratelimiting import Ratelimiter
+from synapse.appservice.api import ApplicationServiceApi
+from synapse.appservice.scheduler import ApplicationServiceScheduler
+from synapse.crypto.keyring import Keyring
+from synapse.events.builder import EventBuilderFactory
from synapse.federation import initialize_http_replication
+from synapse.federation.send_queue import FederationRemoteSendQueue
+from synapse.federation.transport.client import TransportLayerClient
+from synapse.federation.transaction_queue import TransactionQueue
+from synapse.handlers import Handlers
+from synapse.handlers.appservice import ApplicationServicesHandler
+from synapse.handlers.auth import AuthHandler
+from synapse.handlers.devicemessage import DeviceMessageHandler
+from synapse.handlers.device import DeviceHandler
+from synapse.handlers.e2e_keys import E2eKeysHandler
+from synapse.handlers.presence import PresenceHandler
+from synapse.handlers.room_list import RoomListHandler
+from synapse.handlers.sync import SyncHandler
+from synapse.handlers.typing import TypingHandler
+from synapse.handlers.events import EventHandler, EventStreamHandler
+from synapse.handlers.initial_sync import InitialSyncHandler
+from synapse.handlers.receipts import ReceiptsHandler
from synapse.http.client import SimpleHttpClient, InsecureInterceptableContextFactory
+from synapse.http.matrixfederationclient import MatrixFederationHttpClient
from synapse.notifier import Notifier
-from synapse.api.auth import Auth
-from synapse.handlers import Handlers
+from synapse.push.pusherpool import PusherPool
+from synapse.rest.media.v1.media_repository import MediaRepository
from synapse.state import StateHandler
from synapse.storage import DataStore
+from synapse.streams.events import EventSources
from synapse.util import Clock
from synapse.util.distributor import Distributor
-from synapse.streams.events import EventSources
-from synapse.api.ratelimiting import Ratelimiter
-from synapse.crypto.keyring import Keyring
-from synapse.push.pusherpool import PusherPool
-from synapse.events.builder import EventBuilderFactory
-from synapse.api.filtering import Filtering
-
-from synapse.http.matrixfederationclient import MatrixFederationHttpClient
-
-import logging
-
logger = logging.getLogger(__name__)
@@ -78,6 +94,20 @@ class HomeServer(object):
'auth',
'rest_servlet_factory',
'state_handler',
+ 'presence_handler',
+ 'sync_handler',
+ 'typing_handler',
+ 'room_list_handler',
+ 'auth_handler',
+ 'device_handler',
+ 'e2e_keys_handler',
+ 'event_handler',
+ 'event_stream_handler',
+ 'initial_sync_handler',
+ 'application_service_api',
+ 'application_service_scheduler',
+ 'application_service_handler',
+ 'device_message_handler',
'notifier',
'distributor',
'client_resource',
@@ -97,6 +127,10 @@ class HomeServer(object):
'filtering',
'http_client_context_factory',
'simple_http_client',
+ 'media_repository',
+ 'federation_transport_client',
+ 'federation_sender',
+ 'receipts_handler',
]
def __init__(self, hostname, **kwargs):
@@ -164,6 +198,48 @@ class HomeServer(object):
def build_state_handler(self):
return StateHandler(self)
+ def build_presence_handler(self):
+ return PresenceHandler(self)
+
+ def build_typing_handler(self):
+ return TypingHandler(self)
+
+ def build_sync_handler(self):
+ return SyncHandler(self)
+
+ def build_room_list_handler(self):
+ return RoomListHandler(self)
+
+ def build_auth_handler(self):
+ return AuthHandler(self)
+
+ def build_device_handler(self):
+ return DeviceHandler(self)
+
+ def build_device_message_handler(self):
+ return DeviceMessageHandler(self)
+
+ def build_e2e_keys_handler(self):
+ return E2eKeysHandler(self)
+
+ def build_application_service_api(self):
+ return ApplicationServiceApi(self)
+
+ def build_application_service_scheduler(self):
+ return ApplicationServiceScheduler(self)
+
+ def build_application_service_handler(self):
+ return ApplicationServicesHandler(self)
+
+ def build_event_handler(self):
+ return EventHandler(self)
+
+ def build_event_stream_handler(self):
+ return EventStreamHandler(self)
+
+ def build_initial_sync_handler(self):
+ return InitialSyncHandler(self)
+
def build_event_sources(self):
return EventSources(self)
@@ -193,6 +269,33 @@ class HomeServer(object):
**self.db_config.get("args", {})
)
+ def build_media_repository(self):
+ return MediaRepository(self)
+
+ def build_federation_transport_client(self):
+ return TransportLayerClient(self)
+
+ def build_federation_sender(self):
+ if self.should_send_federation():
+ return TransactionQueue(self)
+ elif not self.config.worker_app:
+ return FederationRemoteSendQueue(self)
+ else:
+ raise Exception("Workers cannot send federation traffic")
+
+ def build_receipts_handler(self):
+ return ReceiptsHandler(self)
+
+ def remove_pusher(self, app_id, push_key, user_id):
+ return self.get_pusherpool().remove_pusher(app_id, push_key, user_id)
+
+ def should_send_federation(self):
+ "Should this server be sending federation traffic directly?"
+ return self.config.send_federation and (
+ not self.config.worker_app
+ or self.config.worker_app == "synapse.app.federation_sender"
+ )
+
def _make_dependency_method(depname):
def _get(hs):
|