(self, event: events.Event)
| 86 | state = start |
| 87 | |
| 88 | def read_body(self, event: events.Event) -> layer.CommandGenerator[None]: |
| 89 | assert self.stream_id is not None |
| 90 | while True: |
| 91 | try: |
| 92 | if isinstance(event, events.DataReceived): |
| 93 | h11_event = self.body_reader(self.buf) |
| 94 | elif isinstance(event, events.ConnectionClosed): |
| 95 | h11_event = self.body_reader.read_eof() |
| 96 | else: |
| 97 | raise AssertionError(f"Unexpected event: {event}") |
| 98 | except h11.ProtocolError as e: |
| 99 | yield commands.CloseConnection(self.conn) |
| 100 | yield ReceiveHttp( |
| 101 | self.ReceiveProtocolError( |
| 102 | self.stream_id, |
| 103 | f"HTTP/1 protocol error: {e}", |
| 104 | code=self.ReceiveProtocolError.code, |
| 105 | ) |
| 106 | ) |
| 107 | return |
| 108 | |
| 109 | if h11_event is None: |
| 110 | return |
| 111 | elif isinstance(h11_event, h11.Data): |
| 112 | data: bytes = bytes(h11_event.data) |
| 113 | if data: |
| 114 | yield ReceiveHttp(self.ReceiveData(self.stream_id, data)) |
| 115 | elif isinstance(h11_event, h11.EndOfMessage): |
| 116 | assert self.request |
| 117 | if h11_event.headers: |
| 118 | raise NotImplementedError(f"HTTP trailers are not implemented yet.") |
| 119 | if self.request.data.method.upper() != b"CONNECT": |
| 120 | yield ReceiveHttp(self.ReceiveEndOfMessage(self.stream_id)) |
| 121 | is_request = isinstance(self, Http1Server) |
| 122 | yield from self.mark_done(request=is_request, response=not is_request) |
| 123 | return |
| 124 | |
| 125 | def wait(self, event: events.Event) -> layer.CommandGenerator[None]: |
| 126 | """ |
nothing calls this directly
no test coverage detected