MCPcopy Index your code
hub / github.com/mitmproxy/mitmproxy / _setup_reverse_proxy

Method _setup_reverse_proxy

mitmproxy/addons/next_layer.py:341–404  ·  view source on GitHub ↗
(context: Context, data_client: bytes)

Source from the content-addressed store, hash-verified

339
340 @staticmethod
341 def _setup_reverse_proxy(context: Context, data_client: bytes) -> Layer:
342 spec = cast(mode_specs.ReverseMode, context.client.proxy_mode)
343 stack = tunnel.LayerStack()
344
345 match spec.scheme:
346 case "http":
347 if starts_like_tls_record(data_client):
348 stack /= ClientTLSLayer(context)
349 stack /= HttpLayer(context, HTTPMode.transparent)
350 case "https":
351 if context.client.transport_protocol == "udp":
352 stack /= ServerQuicLayer(context)
353 stack /= ClientQuicLayer(context)
354 stack /= HttpLayer(context, HTTPMode.transparent)
355 else:
356 stack /= ServerTLSLayer(context)
357 if starts_like_tls_record(data_client):
358 stack /= ClientTLSLayer(context)
359 stack /= HttpLayer(context, HTTPMode.transparent)
360
361 case "tcp":
362 if starts_like_tls_record(data_client):
363 stack /= ClientTLSLayer(context)
364 stack /= TCPLayer(context)
365 case "tls":
366 stack /= ServerTLSLayer(context)
367 if starts_like_tls_record(data_client):
368 stack /= ClientTLSLayer(context)
369 stack /= TCPLayer(context)
370
371 case "udp":
372 if starts_like_dtls_record(data_client):
373 stack /= ClientTLSLayer(context)
374 stack /= UDPLayer(context)
375 case "dtls":
376 stack /= ServerTLSLayer(context)
377 if starts_like_dtls_record(data_client):
378 stack /= ClientTLSLayer(context)
379 stack /= UDPLayer(context)
380
381 case "dns":
382 # TODO: DNS-over-TLS / DNS-over-DTLS
383 # is_tls_or_dtls = (
384 # context.client.transport_protocol == "tcp" and starts_like_tls_record(data_client)
385 # or
386 # context.client.transport_protocol == "udp" and starts_like_dtls_record(data_client)
387 # )
388 # if is_tls_or_dtls:
389 # stack /= ClientTLSLayer(context)
390 stack /= DNSLayer(context)
391
392 case "http3":
393 stack /= ServerQuicLayer(context)
394 stack /= ClientQuicLayer(context)
395 stack /= HttpLayer(context, HTTPMode.transparent)
396 case "quic":
397 stack /= ServerQuicLayer(context)
398 stack /= ClientQuicLayer(context)

Callers 1

_next_layerMethod · 0.95

Calls 11

starts_like_tls_recordFunction · 0.90
ClientTLSLayerClass · 0.90
HttpLayerClass · 0.90
ServerQuicLayerClass · 0.90
ClientQuicLayerClass · 0.90
ServerTLSLayerClass · 0.90
TCPLayerClass · 0.90
starts_like_dtls_recordFunction · 0.90
UDPLayerClass · 0.90
DNSLayerClass · 0.90
RawQuicLayerClass · 0.90

Tested by

no test coverage detected