mitmproxy/mitmproxy/exceptions.py
Aldo Cortesi b0b67fe2a7 commands: refactor types
The type system was scattered over a number of places, making it hard to
follow. This collects all command types in types.py, and completion, validation
and parsing for each type is centralised. We should use the same mechanism for
options.
2017-12-18 17:02:48 +13:00

173 lines
3 KiB
Python

"""
We try to be very hygienic regarding the exceptions we throw:
- Every exception that might be externally visible to users shall be a subclass
of MitmproxyException.p
- Every exception in the base net module shall be a subclass
of NetlibException, and will not be propagated directly to users.
See also: http://lucumr.pocoo.org/2014/10/16/on-error-handling/
"""
class MitmproxyException(Exception):
"""
Base class for all exceptions thrown by mitmproxy.
"""
def __init__(self, message=None):
super().__init__(message)
class Kill(MitmproxyException):
"""
Signal that both client and server connection(s) should be killed immediately.
"""
pass
class ProtocolException(MitmproxyException):
"""
ProtocolExceptions are caused by invalid user input, unavailable network resources,
or other events that are outside of our influence.
"""
pass
class TlsProtocolException(ProtocolException):
pass
class ClientHandshakeException(TlsProtocolException):
def __init__(self, message, server):
super().__init__(message)
self.server = server
class InvalidServerCertificate(TlsProtocolException):
def __repr__(self):
# In contrast to most others, this is a user-facing error which needs to look good.
return str(self)
class Socks5ProtocolException(ProtocolException):
pass
class HttpProtocolException(ProtocolException):
pass
class Http2ProtocolException(ProtocolException):
pass
class Http2ZombieException(ProtocolException):
pass
class ServerException(MitmproxyException):
pass
class ContentViewException(MitmproxyException):
pass
class ReplayException(MitmproxyException):
pass
class FlowReadException(MitmproxyException):
pass
class ControlException(MitmproxyException):
pass
class SetServerNotAllowedException(MitmproxyException):
pass
class CommandError(Exception):
pass
class OptionsError(MitmproxyException):
pass
class AddonManagerError(MitmproxyException):
pass
class AddonHalt(MitmproxyException):
"""
Raised by addons to signal that no further handlers should handle this event.
"""
pass
class TypeError(MitmproxyException):
pass
"""
Net-layer exceptions
"""
class NetlibException(MitmproxyException):
"""
Base class for all exceptions thrown by mitmproxy.net.
"""
def __init__(self, message=None):
super().__init__(message)
class Disconnect:
"""Immediate EOF"""
class HttpException(NetlibException):
pass
class HttpReadDisconnect(HttpException, Disconnect):
pass
class HttpSyntaxException(HttpException):
pass
class TcpException(NetlibException):
pass
class TcpDisconnect(TcpException, Disconnect):
pass
class TcpReadIncomplete(TcpException):
pass
class TcpTimeout(TcpException):
pass
class TlsException(NetlibException):
pass
class InvalidCertificateException(TlsException):
pass
class Timeout(TcpException):
pass