diff options
author | Maximilian Hils <git@maximilianhils.com> | 2014-09-08 14:32:42 +0200 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2014-09-08 14:32:42 +0200 |
commit | d06b4bfa4e4cc51e903b49e246d7771726a3e3a4 (patch) | |
tree | 23b215550d09202b987540485c8bbea25ee96f46 /libmproxy/proxy/primitives.py | |
parent | 6dbe431c5e680d1c7f693a4c7bb7f3f65314c5c6 (diff) | |
download | mitmproxy-d06b4bfa4e4cc51e903b49e246d7771726a3e3a4.tar.gz mitmproxy-d06b4bfa4e4cc51e903b49e246d7771726a3e3a4.tar.bz2 mitmproxy-d06b4bfa4e4cc51e903b49e246d7771726a3e3a4.zip |
remove proxy mode abstraction: always be clear which mode we are in
Diffstat (limited to 'libmproxy/proxy/primitives.py')
-rw-r--r-- | libmproxy/proxy/primitives.py | 64 |
1 files changed, 54 insertions, 10 deletions
diff --git a/libmproxy/proxy/primitives.py b/libmproxy/proxy/primitives.py index 8c674381..23d089d3 100644 --- a/libmproxy/proxy/primitives.py +++ b/libmproxy/proxy/primitives.py @@ -11,28 +11,54 @@ class ProxyServerError(Exception): pass -class UpstreamServerResolver(object): - def __call__(self, conn): +class ProxyMode(object): + http_form_in = None + http_form_out = None + + def get_upstream_server(self, conn): """ Returns the address of the server to connect to. + Returns None if the address needs to be determined on the protocol level (regular proxy mode) """ - raise NotImplementedError # pragma: nocover + raise NotImplementedError() # pragma: nocover + @property + def name(self): + return self.__class__.__name__.replace("ProxyMode", "").lower() -class ConstUpstreamServerResolver(UpstreamServerResolver): - def __init__(self, dst): - self.dst = dst + def __str__(self): + return self.name - def __call__(self, conn): - return self.dst + def __eq__(self, other): + """ + Allow comparisions with "regular" etc. + """ + if isinstance(other, ProxyMode): + return self is other + else: + return self.name == other + + def __ne__(self, other): + return not self.__eq__(other) + + +class RegularProxyMode(ProxyMode): + http_form_in = "absolute" + http_form_out = "relative" + + def get_upstream_server(self, conn): + return None -class TransparentUpstreamServerResolver(UpstreamServerResolver): +class TransparentProxyMode(ProxyMode): + http_form_in = "relative" + http_form_out = "relative" + def __init__(self, resolver, sslports): self.resolver = resolver self.sslports = sslports - def __call__(self, conn): + def get_upstream_server(self, conn): try: dst = self.resolver.original_addr(conn) except Exception, e: @@ -45,6 +71,24 @@ class TransparentUpstreamServerResolver(UpstreamServerResolver): return [ssl, ssl] + list(dst) +class _ConstDestinationProxyMode(ProxyMode): + def __init__(self, dst): + self.dst = dst + + def get_upstream_server(self, conn): + return self.dst + + +class ReverseProxyMode(_ConstDestinationProxyMode): + http_form_in = "relative" + http_form_out = "relative" + + +class UpstreamProxyMode(_ConstDestinationProxyMode): + http_form_in = "absolute" + http_form_out = "absolute" + + class Log: def __init__(self, msg, level="info"): self.msg = msg |