MCPcopy
hub / github.com/mitmproxy/mitmproxy / handle_stream

Method handle_stream

mitmproxy/proxy/mode_servers.py:185–219  ·  view source on GitHub ↗
(
        self,
        reader: asyncio.StreamReader | mitmproxy_rs.Stream,
        writer: asyncio.StreamWriter | mitmproxy_rs.Stream | None = None,
    )

Source from the content-addressed store, hash-verified

183 }
184
185 async def handle_stream(
186 self,
187 reader: asyncio.StreamReader | mitmproxy_rs.Stream,
188 writer: asyncio.StreamWriter | mitmproxy_rs.Stream | None = None,
189 ) -> None:
190 if writer is None:
191 assert isinstance(reader, mitmproxy_rs.Stream)
192 writer = reader
193 handler = ProxyConnectionHandler(
194 ctx.master, reader, writer, ctx.options, self.mode
195 )
196 handler.layer = self.make_top_layer(handler.layer.context)
197 if isinstance(self.mode, mode_specs.TransparentMode):
198 assert isinstance(writer, asyncio.StreamWriter)
199 s = cast(socket.socket, writer.get_extra_info("socket"))
200 try:
201 assert platform.original_addr
202 original_dst = platform.original_addr(s)
203 except Exception as e:
204 logger.error(f"Transparent mode failure: {e!r}")
205 writer.close()
206 return
207 else:
208 handler.layer.context.client.sockname = original_dst
209 handler.layer.context.server.address = original_dst
210 elif isinstance(
211 self.mode,
212 (mode_specs.WireGuardMode, mode_specs.LocalMode, mode_specs.TunMode),
213 ): # pragma: no cover on platforms without wg-test-client
214 handler.layer.context.server.address = writer.get_extra_info(
215 "remote_endpoint", handler.layer.context.client.sockname
216 )
217
218 with self.manager.register_connection(handler.layer.context.client.id, handler):
219 await handler.handle_client()
220
221
222class AsyncioServerInstance(ServerInstance[M], metaclass=ABCMeta):

Callers 1

Calls 7

make_top_layerMethod · 0.95
original_addrMethod · 0.80
handle_clientMethod · 0.80
errorMethod · 0.45
closeMethod · 0.45
register_connectionMethod · 0.45

Tested by

no test coverage detected