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

Method _handle_event

mitmproxy/proxy/layers/http/_http3.py:60–211  ·  view source on GitHub ↗
(self, event: events.Event)

Source from the content-addressed store, hash-verified

58 )
59
60 def _handle_event(self, event: events.Event) -> layer.CommandGenerator[None]:
61 if isinstance(event, events.Start):
62 yield from self.h3_conn.transmit()
63
64 # send mitmproxy HTTP events over the H3 connection
65 elif isinstance(event, HttpEvent):
66 try:
67 if isinstance(event, (RequestData, ResponseData)):
68 self.h3_conn.send_data(event.stream_id, event.data)
69 elif isinstance(event, (RequestHeaders, ResponseHeaders)):
70 headers = yield from (
71 format_h2_request_headers(self.context, event)
72 if isinstance(event, RequestHeaders)
73 else format_h2_response_headers(self.context, event)
74 )
75 self.h3_conn.send_headers(
76 event.stream_id, headers, end_stream=event.end_stream
77 )
78 elif isinstance(event, (RequestTrailers, ResponseTrailers)):
79 self.h3_conn.send_trailers(
80 event.stream_id, [*event.trailers.fields]
81 )
82 elif isinstance(event, (RequestEndOfMessage, ResponseEndOfMessage)):
83 self.h3_conn.end_stream(event.stream_id)
84 elif isinstance(event, (RequestProtocolError, ResponseProtocolError)):
85 status = event.code.http_status_code()
86 if (
87 isinstance(event, ResponseProtocolError)
88 and not self.h3_conn.has_sent_headers(event.stream_id)
89 and status is not None
90 ):
91 self.h3_conn.send_headers(
92 event.stream_id,
93 [
94 (b":status", b"%d" % status),
95 (b"server", version.MITMPROXY.encode()),
96 (b"content-type", b"text/html"),
97 ],
98 )
99 self.h3_conn.send_data(
100 event.stream_id,
101 format_error(status, event.message),
102 end_stream=True,
103 )
104 else:
105 match event.code:
106 case ErrorCode.CANCEL | ErrorCode.CLIENT_DISCONNECTED:
107 error_code = H3ErrorCode.H3_REQUEST_CANCELLED
108 case ErrorCode.KILL:
109 error_code = H3ErrorCode.H3_INTERNAL_ERROR
110 case ErrorCode.HTTP_1_1_REQUIRED:
111 error_code = H3ErrorCode.H3_VERSION_FALLBACK
112 case ErrorCode.PASSTHROUGH_CLOSE:
113 # FIXME: This probably shouldn't be a protocol error, but an EOM event.
114 error_code = H3ErrorCode.H3_REQUEST_CANCELLED
115 case (
116 ErrorCode.GENERIC_CLIENT_ERROR
117 | ErrorCode.GENERIC_SERVER_ERROR

Callers

nothing calls this directly

Calls 15

parse_headersMethod · 0.95
error_code_to_strFunction · 0.90
format_errorFunction · 0.85
ReceiveHttpClass · 0.85
transmitMethod · 0.80
http_status_codeMethod · 0.80
has_sent_headersMethod · 0.80
close_streamMethod · 0.80
handle_stream_eventMethod · 0.80

Tested by

no test coverage detected