MCPcopy
hub / github.com/mitmproxy/mitmproxy / Http2Server

Class Http2Server

mitmproxy/proxy/layers/http/_http2.py:406–471  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

404
405
406class Http2Server(Http2Connection):
407 h2_conf = h2.config.H2Configuration(
408 **Http2Connection.h2_conf_defaults,
409 client_side=False,
410 )
411
412 ReceiveProtocolError = RequestProtocolError
413 ReceiveData = RequestData
414 ReceiveTrailers = RequestTrailers
415 ReceiveEndOfMessage = RequestEndOfMessage
416
417 def __init__(self, context: Context):
418 super().__init__(context, context.client)
419
420 def _handle_event(self, event: Event) -> CommandGenerator[None]:
421 if isinstance(event, ResponseHeaders):
422 if self.is_open_for_us(event.stream_id):
423 self.h2_conn.send_headers(
424 event.stream_id,
425 headers=(
426 yield from format_h2_response_headers(self.context, event)
427 ),
428 end_stream=event.end_stream,
429 )
430 yield SendData(self.conn, self.h2_conn.data_to_send())
431 else:
432 yield from super()._handle_event(event)
433
434 def handle_h2_event(self, event: h2.events.Event) -> CommandGenerator[bool]:
435 if isinstance(event, h2.events.RequestReceived):
436 try:
437 (
438 host,
439 port,
440 method,
441 scheme,
442 authority,
443 path,
444 headers,
445 ) = parse_h2_request_headers(event.headers)
446 except ValueError as e:
447 yield from self.protocol_error(f"Invalid HTTP/2 request headers: {e}")
448 return True
449 request = http.Request(
450 host=host,
451 port=port,
452 method=method,
453 scheme=scheme,
454 authority=authority,
455 path=path,
456 http_version=b"HTTP/2.0",
457 headers=headers,
458 content=None,
459 trailers=None,
460 timestamp_start=time.time(),
461 timestamp_end=None,
462 )
463 self.streams[event.stream_id] = StreamState.HEADERS_RECEIVED

Callers 1

_handle_eventMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…