59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
from typing import TYPE_CHECKING
|
|
|
|
from mitmproxy import connection
|
|
from mitmproxy.options import Options
|
|
|
|
if TYPE_CHECKING:
|
|
import mitmproxy.proxy.layer
|
|
|
|
|
|
class Context:
|
|
"""
|
|
The context object provided to each protocol layer in the proxy core.
|
|
"""
|
|
|
|
client: connection.Client
|
|
"""The client connection."""
|
|
server: connection.Server
|
|
"""
|
|
The server connection.
|
|
|
|
For practical reasons this attribute is always set, even if there is not server connection yet.
|
|
In this case the server address is `None`.
|
|
"""
|
|
options: Options
|
|
"""
|
|
Provides access to options for proxy layers. Not intended for use by addons, use `mitmproxy.ctx.options` instead.
|
|
"""
|
|
layers: list["mitmproxy.proxy.layer.Layer"]
|
|
"""
|
|
The protocol layer stack.
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
client: connection.Client,
|
|
options: Options,
|
|
) -> None:
|
|
self.client = client
|
|
self.options = options
|
|
self.server = connection.Server(
|
|
address=None, transport_protocol=client.transport_protocol
|
|
)
|
|
self.layers = []
|
|
|
|
def fork(self) -> "Context":
|
|
ret = Context(self.client, self.options)
|
|
ret.server = self.server
|
|
ret.layers = self.layers.copy()
|
|
return ret
|
|
|
|
def __repr__(self):
|
|
return (
|
|
f"Context(\n"
|
|
f" {self.client!r},\n"
|
|
f" {self.server!r},\n"
|
|
f" layers=[{self.layers!r}]\n"
|
|
f")"
|
|
)
|