def close(self, close_info: Optional[Tuple[int, bytes]]) -> None: """ Close the session. :param close_info The close information to send. """ self._protocol._allow_calling_session_closed = False assert self._protocol._session_stream_id is not None session_stream_id = self._protocol._session_stream_id if close_info is not None: code = close_info[0] reason = close_info[1] buffer = Buffer(capacity=len(reason) + 4) buffer.push_uint32(code) buffer.push_bytes(reason) capsule =\ H3Capsule(CapsuleType.CLOSE_WEBTRANSPORT_SESSION, buffer.data) self._http.send_data(session_stream_id, capsule.encode(), end_stream=False) self._http.send_data(session_stream_id, b'', end_stream=True)
def test_push_uint32(self): buf = Buffer(capacity=4) buf.push_uint32(0x08070605) self.assertEqual(buf.data, b"\x08\x07\x06\x05") self.assertEqual(buf.tell(), 4)