Process received HEADERS frame. Args: headers: List of (name, value) tuples end_stream: True if END_STREAM flag is set Raises: HTTP2StreamError: If headers received in invalid state
(self, headers, end_stream=False)
| 103 | ) |
| 104 | |
| 105 | def receive_headers(self, headers, end_stream=False): |
| 106 | """Process received HEADERS frame. |
| 107 | |
| 108 | Args: |
| 109 | headers: List of (name, value) tuples |
| 110 | end_stream: True if END_STREAM flag is set |
| 111 | |
| 112 | Raises: |
| 113 | HTTP2StreamError: If headers received in invalid state |
| 114 | """ |
| 115 | if self.state == StreamState.IDLE: |
| 116 | self.state = StreamState.OPEN |
| 117 | elif self.state not in (StreamState.OPEN, StreamState.HALF_CLOSED_LOCAL): |
| 118 | raise HTTP2StreamError( |
| 119 | self.stream_id, |
| 120 | f"Cannot receive headers in state {self.state.name}" |
| 121 | ) |
| 122 | |
| 123 | self.request_headers.extend(headers) |
| 124 | |
| 125 | if end_stream: |
| 126 | self._half_close_remote() |
| 127 | self.request_complete = True |
| 128 | |
| 129 | def receive_data(self, data, end_stream=False): |
| 130 | """Process received DATA frame with streaming support. |