summary refs log tree commit diff
path: root/synapse/module_api/errors.py
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/module_api/errors.py')
-rw-r--r--synapse/module_api/errors.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/synapse/module_api/errors.py b/synapse/module_api/errors.py

index bedd045d6f..984fc8b3e5 100644 --- a/synapse/module_api/errors.py +++ b/synapse/module_api/errors.py
@@ -13,6 +13,7 @@ # limitations under the License. """Exception types which are exposed as part of the stable module API""" +import attr from synapse.api.errors import ( Codes, @@ -24,6 +25,57 @@ from synapse.config._base import ConfigError from synapse.handlers.push_rules import InvalidRuleException from synapse.storage.push_rule import RuleNotFoundException + +@attr.s(auto_attribs=True) +class FederationHttpResponseException(Exception): + """ + Raised when an HTTP request over federation returns a status code > 300 (and not 429). + """ + + remote_server_name: str + # The HTTP status code of the response. + status_code: int + # A human-readable explanation for the error. + msg: str + # The non-parsed HTTP response body. + response_body: bytes + + +@attr.s(auto_attribs=True) +class FederationHttpNotRetryingDestinationException(Exception): + """ + Raised when the local homeserver refuses to send traffic to a remote homeserver that + it believes is experiencing an outage. + """ + + remote_server_name: str + + +@attr.s(auto_attribs=True) +class FederationHttpDeniedException(Exception): + """ + Raised when the local homeserver refuses to send federation traffic to a remote + homeserver. This is due to the remote homeserver not being on the configured + federation whitelist. + """ + + remote_server_name: str + + +@attr.s(auto_attribs=True) +class FederationHttpRequestSendFailedException(Exception): + """ + Raised when there are problems connecting to the remote homeserver due to e.g. + DNS failures, connection timeouts, etc. + """ + + remote_server_name: str + # Whether the request can be retried with a chance of success. This will be True + # if the failure occurred due to e.g. timeouts, a disruption in the connection etc. + # Will be false in the case of e.g. a malformed response from the remote homeserver. + can_retry: bool + + __all__ = [ "Codes", "InvalidClientCredentialsError", @@ -32,4 +84,8 @@ __all__ = [ "ConfigError", "InvalidRuleException", "RuleNotFoundException", + "FederationHttpResponseException", + "FederationHttpNotRetryingDestinationException", + "FederationHttpDeniedException", + "FederationHttpRequestSendFailedException", ]