aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/protocol/__init__.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2015-09-11 12:13:39 +0200
committerMaximilian Hils <git@maximilianhils.com>2015-09-11 12:13:39 +0200
commit7c186a4edbb0c6bc1f471d0db62dfc60008160a2 (patch)
tree89fb7e5b14cdfe9a0b61da828ddac8f355a3cdd0 /libmproxy/protocol/__init__.py
parentb62498e125191beca3b49841eb5f1fb9a93a868a (diff)
parentdd414e485212e3cab612a66d5d858c1a766ace04 (diff)
downloadmitmproxy-7c186a4edbb0c6bc1f471d0db62dfc60008160a2.tar.gz
mitmproxy-7c186a4edbb0c6bc1f471d0db62dfc60008160a2.tar.bz2
mitmproxy-7c186a4edbb0c6bc1f471d0db62dfc60008160a2.zip
Merge branch 'master' into contentviews
Diffstat (limited to 'libmproxy/protocol/__init__.py')
-rw-r--r--libmproxy/protocol/__init__.py31
1 files changed, 29 insertions, 2 deletions
diff --git a/libmproxy/protocol/__init__.py b/libmproxy/protocol/__init__.py
index c582592b..35d59f28 100644
--- a/libmproxy/protocol/__init__.py
+++ b/libmproxy/protocol/__init__.py
@@ -1,11 +1,38 @@
+"""
+In mitmproxy, protocols are implemented as a set of layers, which are composed on top each other.
+The first layer is usually the proxy mode, e.g. transparent proxy or normal HTTP proxy. Next,
+various protocol layers are stacked on top of each other - imagine WebSockets on top of an HTTP
+Upgrade request. An actual mitmproxy connection may look as follows (outermost layer first):
+
+ Transparent HTTP proxy, no TLS:
+ - TransparentProxy
+ - Http1Layer
+ - HttpLayer
+
+ Regular proxy, CONNECT request with WebSockets over SSL:
+ - ReverseProxy
+ - Http1Layer
+ - HttpLayer
+ - TLSLayer
+ - WebsocketLayer (or TCPLayer)
+
+Every layer acts as a read-only context for its inner layers (see :py:class:`Layer`). To communicate
+with an outer layer, a layer can use functions provided in the context. The next layer is always
+determined by a call to :py:meth:`.next_layer() <libmproxy.proxy.RootContext.next_layer>`,
+which is provided by the root context.
+
+Another subtle design goal of this architecture is that upstream connections should be established
+as late as possible; this makes server replay without any outgoing connections possible.
+"""
+
from __future__ import (absolute_import, print_function, division)
-from .base import Layer, ServerConnectionMixin, Log, Kill
+from .base import Layer, ServerConnectionMixin, Kill
from .http import Http1Layer, Http2Layer
from .tls import TlsLayer, is_tls_record_magic
from .rawtcp import RawTCPLayer
__all__ = [
- "Layer", "ServerConnectionMixin", "Log", "Kill",
+ "Layer", "ServerConnectionMixin", "Kill",
"Http1Layer", "Http2Layer",
"TlsLayer", "is_tls_record_magic",
"RawTCPLayer"