QUIC Protocol Implementation 1.0
A Python implementation of the QUIC (Quick UDP Internet Connections) protocol.
|
Public Member Functions | |
__init__ (self, int stream_id, bool is_usable) | |
add_data_to_buffer (self, bytes data) | |
generate_stream_frames (self, int max_size) | |
FrameStream | generate_fin_frame (self) |
FrameStream | send_next_frame (self) |
![]() | |
bool | has_data (self) |
bool | is_terminal_state (self) |
Protected Member Functions | |
_add_data_to_buffer (self, bytes data) | |
int | _get_total_stream_frames_amount (self, int max_size) |
![]() | |
bool | _set_state (self, int state) |
Protected Attributes | |
_stream_frames | |
_state | |
_buffer | |
![]() | |
_state | |
_buffer | |
@brief Represents the sending endpoint of a QUIC stream. @details Handles buffering of data to send, generation of stream frames, and sending frames over the network.
stream.StreamSender.__init__ | ( | self, | |
int | stream_id, | ||
bool | is_usable | ||
) |
@brief Initialize a StreamSender instance. @param stream_id The stream ID associated with this sender. @param is_usable Whether this sender can be used for sending data.
Reimplemented from stream.StreamEndpointABC.
Definition at line 199 of file stream.py.
References stream.StreamSender.__init__().
Referenced by stream.StreamSender.__init__().
|
protected |
@brief Internal method to add data to the buffer. @details Only adds data if the stream is in READY state. @param data The data to add. @throws ValueError If the stream is not in READY state.
Reimplemented from stream.StreamEndpointABC.
Definition at line 217 of file stream.py.
Referenced by stream.StreamSender.add_data_to_buffer().
|
protected |
@brief Calculate the number of frames required for the data in the buffer. @param max_size The maximum size of each frame. @return The total number of frames.
Definition at line 248 of file stream.py.
Referenced by stream.StreamSender.generate_stream_frames().
stream.StreamSender.add_data_to_buffer | ( | self, | |
bytes | data | ||
) |
@brief Add data to the sender's buffer. @param data The data to add.
Definition at line 209 of file stream.py.
References stream.StreamEndpointABC._add_data_to_buffer(), stream.StreamSender._add_data_to_buffer(), and stream.StreamReceiver._add_data_to_buffer().
FrameStream stream.StreamSender.generate_fin_frame | ( | self | ) |
@brief Generate a frame with the FIN bit set. @details This indicates the end of the stream. @return The final frame for the stream.
Definition at line 260 of file stream.py.
References stream.StreamEndpointABC._buffer, stream.StreamSender._buffer, stream.StreamEndpointABC._set_state(), and stream.Stream._stream_id.
Referenced by stream.StreamSender.generate_stream_frames().
stream.StreamSender.generate_stream_frames | ( | self, | |
int | max_size | ||
) |
@brief Generate frames for the data in the buffer. @details Splits data into chunks if necessary. @param max_size The maximum size of each frame.
Definition at line 231 of file stream.py.
References stream.StreamEndpointABC._buffer, stream.StreamSender._buffer, stream.StreamSender._get_total_stream_frames_amount(), stream.StreamSender._stream_frames, stream.Stream._stream_id, and stream.StreamSender.generate_fin_frame().
FrameStream stream.StreamSender.send_next_frame | ( | self | ) |
@brief Send the next frame in the queue. @return The next frame to be sent.
Definition at line 275 of file stream.py.
References stream.StreamEndpointABC._set_state(), and stream.StreamSender._stream_frames.
|
protected |
Definition at line 255 of file stream.py.
Referenced by stream.StreamEndpointABC.__init__(), stream.StreamReceiver._add_data_to_buffer(), stream.StreamSender.generate_fin_frame(), stream.StreamSender.generate_stream_frames(), and stream.StreamReceiver.get_data_from_buffer().
|
protected |
Definition at line 226 of file stream.py.
Referenced by stream.StreamEndpointABC.__init__(), stream.StreamReceiver._add_data_to_buffer(), stream.StreamReceiver.get_data_from_buffer(), and stream.StreamEndpointABC.is_terminal_state().
|
protected |
Definition at line 207 of file stream.py.
Referenced by stream.StreamSender.generate_stream_frames(), and stream.StreamSender.send_next_frame().