|
QUIC Protocol Implementation 1.0
A Python implementation of the QUIC (Quick UDP Internet Connections) protocol.
|
Public Member Functions | |
| __init__ (self, int connection_id, tuple local_addr, tuple remote_addr) | |
| 'Stream' | get_stream (self, int initiated_by, int direction) |
| add_file_to_stream (self, int stream_id, str path) | |
| send_packets (self) | |
| receive_packets (self) | |
Protected Member Functions | |
| int | _stream_id_generator (self, int initiated_by, int direction) |
| _add_stream (self, int stream_id, bool initiated_by, bool direction) | |
| _add_stream_to_stats_dict (self, int stream_id) | |
| 'Stream' | _get_stream_by_id (self, int stream_id) |
| 'Stream' | _remove_stream (self, int stream_id) |
| _add_data_to_stream (self, int stream_id, bytes data) | |
| _add_active_stream_id (self, int stream_id) | |
| bool | _is_stream_id_in_dict (self, int stream_id) |
| _set_start_time (self) | |
| _send_packet_size (self) | |
| Packet | _create_packet (self) |
| _generate_streams_frames (self) | |
| Stream|None | _get_stream_from_active_streams (self) |
| _send_packet (self, bytes packet) | |
| _receive_packet (self) | |
| _increment_received_packets_counter (self) | |
| _handle_received_packet_size (self, bytes packet_size) | |
| _handle_received_packet (self, bytes packet) | |
| bool | _write_stream (self, int stream_id) |
| _close_connection (self) | |
| _print_stats (self) | |
Protected Attributes | |
| _connection_id | |
| _local_addr | |
| _remote_addr | |
| _socket | |
| _stats_dict | |
| _streams_counter | |
| _sent_packets_counter | |
| _received_packets_counter | |
| _idle | |
| _packet_size | |
| _active_streams_ids | |
| _total_time | |
@brief Manages a QUIC connection.
@details Handles stream creation, packet assembly, sending/receiving data,
and tracking connection statistics.
| quic.QuicConnection.__init__ | ( | self, | |
| int | connection_id, | ||
| tuple | local_addr, | ||
| tuple | remote_addr | ||
| ) |
|
protected |
@brief Mark a stream as active. @details Adds stream ID to the active streams list. @param stream_id The ID of the stream to mark as active.
Definition at line 149 of file quic.py.
References quic.QuicConnection._active_streams_ids.
Referenced by quic.QuicConnection._add_data_to_stream(), and quic.QuicConnection._handle_received_packet().
|
protected |
@brief Add data to a specific stream's buffer. @param stream_id The ID of the stream. @param data The data to add.
Definition at line 138 of file quic.py.
References quic.QuicConnection._add_active_stream_id(), and quic.QuicConnection._get_stream_by_id().
Referenced by quic.QuicConnection.add_file_to_stream().
|
protected |
@brief Add a new stream to the connection. @details Initializes the stream's statistics. @param stream_id The ID of the stream to add. @param initiated_by Indicates if the stream was initiated by the server. @param direction Indicates if the stream is unidirectional.
Definition at line 82 of file quic.py.
References quic.QuicConnection._add_stream_to_stats_dict(), and quic.QuicConnection._streams_counter.
Referenced by quic.QuicConnection._get_stream_by_id(), and quic.QuicConnection.get_stream().
|
protected |
@brief Initialize statistics for a new stream. @param stream_id The ID of the stream.
Definition at line 96 of file quic.py.
References quic.QuicConnection._stats_dict.
Referenced by quic.QuicConnection._add_stream().
|
protected |
@brief Close the connection, socket, and print the statistics.
Definition at line 353 of file quic.py.
References quic.QuicConnection._idle, quic.QuicConnection._print_stats(), quic.QuicConnection._socket, and quic.QuicConnection._total_time.
Referenced by quic.QuicConnection.send_packets().
|
protected |
@brief Create a packet containing frames from the streams.
@details 1. Generate frames for each stream
2. Assemble SOME of them and add to packet payload
3. Add packet to pending packets
@return The created packet with frames from different streams.
Definition at line 200 of file quic.py.
References quic.QuicConnection._connection_id, quic.QuicConnection._generate_streams_frames(), quic.QuicConnection._get_stream_from_active_streams(), quic.QuicConnection._packet_size, quic.QuicConnection._remove_stream(), and quic.QuicConnection._sent_packets_counter.
Referenced by quic.QuicConnection.send_packets().
|
protected |
@brief Generate frames for each active stream.
Definition at line 235 of file quic.py.
References quic.QuicConnection._active_streams_ids, and quic.QuicConnection._get_stream_by_id().
Referenced by quic.QuicConnection._create_packet().
|
protected |
@brief Retrieve a stream by its ID. @details Creates the stream if necessary. @param stream_id The ID of the stream to retrieve. @return The retrieved or newly created stream.
Definition at line 104 of file quic.py.
References quic.QuicConnection._add_stream(), and quic.QuicConnection._is_stream_id_in_dict().
Referenced by quic.QuicConnection._add_data_to_stream(), quic.QuicConnection._generate_streams_frames(), quic.QuicConnection._handle_received_packet(), and quic.QuicConnection.get_stream().
|
protected |
@brief Retrieve a stream from the list of active streams. @return The retrieved stream, or None if no active streams.
Definition at line 242 of file quic.py.
References quic.QuicConnection._active_streams_ids, and quic.QuicConnection._idle.
Referenced by quic.QuicConnection._create_packet().
|
protected |
@brief Handle the reception of a packet and its frames. @param packet The received packet in bytes.
Definition at line 314 of file quic.py.
References quic.QuicConnection._add_active_stream_id(), quic.QuicConnection._get_stream_by_id(), quic.QuicConnection._stats_dict, and quic.QuicConnection._write_stream().
|
protected |
@brief Handle the reception of the packet size from the peer. @param packet_size The received packet size in bytes.
Definition at line 305 of file quic.py.
References quic.QuicConnection._packet_size.
|
protected |
@brief Increment the counter for received packets.
Definition at line 299 of file quic.py.
References quic.QuicConnection._received_packets_counter.
|
protected |
@brief Check if a stream ID exists in the streams dict. @param stream_id The ID of the stream to check. @return True if the stream ID exists, False otherwise.
Definition at line 160 of file quic.py.
Referenced by quic.QuicConnection._get_stream_by_id(), and quic.QuicConnection.get_stream().
|
protected |
@brief Print the statistics for all active streams in the connection.
Definition at line 362 of file quic.py.
References quic.QuicConnection._stats_dict, and quic.QuicConnection._total_time.
Referenced by quic.QuicConnection._close_connection().
|
protected |
@brief Receive a packet and process it. @details If socket times out, the connection will be closed.
Definition at line 278 of file quic.py.
References quic.QuicConnection._packet_size, and quic.QuicConnection._socket.
Referenced by quic.QuicConnection.receive_packets().
|
protected |
@brief Remove a stream from the active streams list and the streams dictionary. @param stream_id The ID of the stream to remove. @return The removed stream.
Definition at line 117 of file quic.py.
References quic.QuicConnection._active_streams_ids.
Referenced by quic.QuicConnection._create_packet(), and quic.QuicConnection._write_stream().
|
protected |
@brief Send a packet to the remote address. @param packet The packet to send. @return True if the packet was sent successfully, False otherwise.
Definition at line 257 of file quic.py.
References quic.QuicConnection._remote_addr, and quic.QuicConnection._socket.
Referenced by quic.QuicConnection.send_packets().
|
protected |
@brief Send the packet size to the remote peer. @return True if the packet size was sent successfully, False otherwise.
Definition at line 190 of file quic.py.
Referenced by quic.QuicConnection.send_packets().
|
protected |
@brief Set the start time for all streams in the connection.
Definition at line 169 of file quic.py.
References quic.QuicConnection._stats_dict.
|
protected |
@brief Generate a unique stream ID. @details Generates ID based on stream counter, initiator, and direction. @param initiated_by Indicates whether the stream was initiated by 'client'(0) or 'server'(1). @param direction Indicates whether the stream is bidirectional(0) or unidirectional(1). @return The generated stream ID.
Definition at line 67 of file quic.py.
References quic.QuicConnection._streams_counter.
Referenced by quic.QuicConnection.get_stream().
|
protected |
@brief Write the received data of a stream to a file. @param stream_id The ID of the stream whose data should be written. @return True if the data was written successfully, False otherwise.
Definition at line 334 of file quic.py.
References quic.QuicConnection._remove_stream(), and quic.QuicConnection._stats_dict.
Referenced by quic.QuicConnection._handle_received_packet().
| quic.QuicConnection.add_file_to_stream | ( | self, | |
| int | stream_id, | ||
| str | path | ||
| ) |
@brief Add a file's content to a stream. @param stream_id The ID of the stream to add the file to. @param path The file path.
Definition at line 127 of file quic.py.
References quic.QuicConnection._add_data_to_stream().
| 'Stream' quic.QuicConnection.get_stream | ( | self, | |
| int | initiated_by, | ||
| int | direction | ||
| ) |
@brief Retrieve or create a new stream for the connection. @param initiated_by Indicates whether the stream was initiated by 'client'(0) or 'server'(1). @param direction Indicates if the stream is bidirectional(0) or unidirectional(1). @return The created or retrieved stream.
Definition at line 54 of file quic.py.
References quic.QuicConnection._add_stream(), quic.QuicConnection._get_stream_by_id(), quic.QuicConnection._is_stream_id_in_dict(), and quic.QuicConnection._stream_id_generator().
| quic.QuicConnection.receive_packets | ( | self | ) |
@brief Continuously receive packets until the connection is closed or a timeout occurs.
Definition at line 266 of file quic.py.
References quic.QuicConnection._idle, quic.QuicConnection._receive_packet(), and quic.QuicConnection._socket.
| quic.QuicConnection.send_packets | ( | self | ) |
@brief Continuously create and send packets until all streams are finished.
Definition at line 177 of file quic.py.
References quic.QuicConnection._active_streams_ids, quic.QuicConnection._close_connection(), quic.QuicConnection._create_packet(), quic.QuicConnection._send_packet(), quic.QuicConnection._send_packet_size(), and quic.QuicConnection._stats_dict.
|
protected |
Definition at line 252 of file quic.py.
Referenced by quic.QuicConnection._add_active_stream_id(), quic.QuicConnection._generate_streams_frames(), quic.QuicConnection._get_stream_from_active_streams(), quic.QuicConnection._remove_stream(), and quic.QuicConnection.send_packets().
|
protected |
Definition at line 38 of file quic.py.
Referenced by quic.QuicConnection._create_packet().
|
protected |
Definition at line 52 of file quic.py.
Referenced by quic.QuicConnection._close_connection(), quic.QuicConnection._get_stream_from_active_streams(), and quic.QuicConnection.receive_packets().
|
protected |
Definition at line 196 of file quic.py.
Referenced by quic.QuicConnection._create_packet(), quic.QuicConnection._handle_received_packet_size(), and quic.QuicConnection._receive_packet().
|
protected |
Definition at line 48 of file quic.py.
Referenced by quic.QuicConnection._increment_received_packets_counter().
|
protected |
Definition at line 40 of file quic.py.
Referenced by quic.QuicConnection._send_packet().
|
protected |
Definition at line 47 of file quic.py.
Referenced by quic.QuicConnection._create_packet().
|
protected |
Definition at line 41 of file quic.py.
Referenced by quic.QuicConnection._close_connection(), quic.QuicConnection._receive_packet(), quic.QuicConnection._send_packet(), and quic.QuicConnection.receive_packets().
|
protected |
Definition at line 45 of file quic.py.
Referenced by quic.QuicConnection._add_stream_to_stats_dict(), quic.QuicConnection._handle_received_packet(), quic.QuicConnection._print_stats(), quic.QuicConnection._set_start_time(), quic.QuicConnection._write_stream(), and quic.QuicConnection.send_packets().
|
protected |
Definition at line 46 of file quic.py.
Referenced by quic.QuicConnection._add_stream(), and quic.QuicConnection._stream_id_generator().
|
protected |
Definition at line 287 of file quic.py.
Referenced by quic.QuicConnection._close_connection(), and quic.QuicConnection._print_stats().