QUIC Connection. More...
#include <connection.h>
Data Fields | |
char * | name |
Name of this connection (for logging purposes) | |
gboolean | is_server |
Whether this is a server or a client connection (inherited from the endpoint) | |
gboolean | just_started |
Whether this connection has just started (e.g., to decide whether we need to derive initial secrets) | |
gboolean | have_params |
Whether we already received the peer QUIC transport parameters. | |
imquic_connection_id | initial_cid |
Initial Connection ID. | |
imquic_connection_id | local_cid |
Local and remote Connection ID. | |
imquic_connection_id | remote_cid |
imquic_connection_id | new_remote_cid |
New remote Connection ID. | |
GList * | connection_ids |
List of Connection IDs our peer has used. | |
enum ssl_encryption_level_t | level |
Current encryption level. | |
imquic_data_fixed | retry_token |
Retry token, if any. | |
uint64_t | pkn [4] |
Current outgoing packet number for each encryption level. | |
imquic_connection_parameters | local_params |
Transport parameters (local and remote) | |
imquic_connection_parameters | remote_params |
imquic_data | alpn |
ALPN. | |
uint64_t | stream_next_uni |
Next unidirectional and bidirectional stream we can create (as actual ID, not QUIC one) | |
uint64_t | stream_next_bidi |
GHashTable * | streams |
Map of streams we're handling, and map of streams that are now done. | |
GHashTable * | streams_done |
uint64_t | current_max_streams_uni |
Current cap for the maximum number of unidirectional and bidirectional streams we're prepared to accept. | |
uint64_t | current_max_streams_bidi |
gboolean | max_streams_uni_updated |
Whether our QUIC stack just updated the cap for the maximum number of unidirectional and bidirectional streams we're prepared to accept (to trigger a new QUIC frame to extend them) | |
gboolean | max_streams_bidi_updated |
GQueue * | incoming_data |
Queued streams to process. | |
GQueue * | outgoing_data |
Queued data to send. | |
GQueue * | outgoing_datagram |
volatile gint | wakeup |
Trigger to wake the loop for this connection as part of the imquic_connection_source management. | |
imquic_connection_rtt | rtt |
Different RTTs for this connection. | |
GList * | recvd [4] |
List of received packet numbers, for each encryption level. | |
uint64_t | largest [4] |
Largest received packet numbers, for each encryption level. | |
size_t | ack_eliciting_in_flight [4] |
Number of ACK eliciting packets in flight, for each encryption level. | |
int64_t | last_ack_eliciting_time [4] |
Monotonic time of when we sent the last ACK eliciting packet, for each encryption level. | |
int64_t | largest_time [4] |
Monotonic time of when we received the largest packet numbers, per each encryption level (for ACK delay purposes) | |
int64_t | loss_time [4] |
Monotonic time of when the next packet can be considered, lost, per each encryption level. | |
imquic_listmap * | sent_pkts [4] |
Sent packets, per each encryption level. | |
uint64_t | largest_acked [4] |
Largest acked packet numbers, for each encryption level. | |
gboolean | send_ack [5] |
Whether we have ACKs to send for a specific encryption level. | |
imquic_protection | keys [4] |
Keys (protection, encryption) for each encryption level. | |
gboolean | current_phase |
Current value of the key phase bit. | |
SSL * | ssl |
Encryption instance. | |
imquic_buffer * | crypto_in [4] |
Buffers for incoming and outgoing CRYPTO exchanges, at each encryption level. | |
imquic_buffer * | crypto_out [4] |
gboolean | send_crypto |
Whether we have CRYPTO frames to send. | |
gboolean | alpn_negotiated |
Whether an ALPN has been negotiated. | |
gboolean | connected |
Whether this connection has been established. | |
imquic_network_endpoint * | socket |
Networking instance for this connection. | |
imquic_network_address | peer |
Network address of the peer. | |
imquic_http3_connection * | http3 |
WebTransport context, if any. | |
imquic_source * | ld_timer |
Loss detection timer. | |
int64_t | last_activity |
Monotonic time of when we last got activity. | |
imquic_source * | idle_timer |
Idle timer. | |
uint8_t | pto_count |
PTO count. | |
imquic_source * | loop_source |
Loop source. | |
imquic_mutex | mutex |
Mutex. | |
volatile gint | destroyed |
Whether this instance has been destroyed (reference counting) | |
imquic_refcount | ref |
Reference counter. | |
QUIC Connection.
size_t imquic_connection::ack_eliciting_in_flight[4] |
Number of ACK eliciting packets in flight, for each encryption level.
imquic_data imquic_connection::alpn |
ALPN.
gboolean imquic_connection::alpn_negotiated |
Whether an ALPN has been negotiated.
gboolean imquic_connection::connected |
Whether this connection has been established.
GList* imquic_connection::connection_ids |
List of Connection IDs our peer has used.
imquic_buffer* imquic_connection::crypto_in[4] |
Buffers for incoming and outgoing CRYPTO
exchanges, at each encryption level.
imquic_buffer * imquic_connection::crypto_out[4] |
uint64_t imquic_connection::current_max_streams_bidi |
uint64_t imquic_connection::current_max_streams_uni |
Current cap for the maximum number of unidirectional and bidirectional streams we're prepared to accept.
gboolean imquic_connection::current_phase |
Current value of the key phase bit.
volatile gint imquic_connection::destroyed |
Whether this instance has been destroyed (reference counting)
gboolean imquic_connection::have_params |
Whether we already received the peer QUIC transport parameters.
imquic_http3_connection* imquic_connection::http3 |
WebTransport context, if any.
imquic_source* imquic_connection::idle_timer |
Idle timer.
GQueue* imquic_connection::incoming_data |
Queued streams to process.
imquic_connection_id imquic_connection::initial_cid |
Initial Connection ID.
gboolean imquic_connection::is_server |
Whether this is a server or a client connection (inherited from the endpoint)
gboolean imquic_connection::just_started |
Whether this connection has just started (e.g., to decide whether we need to derive initial secrets)
imquic_protection imquic_connection::keys[4] |
Keys (protection, encryption) for each encryption level.
uint64_t imquic_connection::largest[4] |
Largest received packet numbers, for each encryption level.
uint64_t imquic_connection::largest_acked[4] |
Largest acked packet numbers, for each encryption level.
int64_t imquic_connection::largest_time[4] |
Monotonic time of when we received the largest packet numbers, per each encryption level (for ACK delay purposes)
int64_t imquic_connection::last_ack_eliciting_time[4] |
Monotonic time of when we sent the last ACK eliciting packet, for each encryption level.
int64_t imquic_connection::last_activity |
Monotonic time of when we last got activity.
imquic_source* imquic_connection::ld_timer |
Loss detection timer.
enum ssl_encryption_level_t imquic_connection::level |
Current encryption level.
imquic_connection_id imquic_connection::local_cid |
Local and remote Connection ID.
imquic_connection_parameters imquic_connection::local_params |
Transport parameters (local and remote)
imquic_source* imquic_connection::loop_source |
Loop source.
int64_t imquic_connection::loss_time[4] |
Monotonic time of when the next packet can be considered, lost, per each encryption level.
gboolean imquic_connection::max_streams_bidi_updated |
gboolean imquic_connection::max_streams_uni_updated |
Whether our QUIC stack just updated the cap for the maximum number of unidirectional and bidirectional streams we're prepared to accept (to trigger a new QUIC frame to extend them)
imquic_mutex imquic_connection::mutex |
Mutex.
char* imquic_connection::name |
Name of this connection (for logging purposes)
imquic_connection_id imquic_connection::new_remote_cid |
New remote Connection ID.
GQueue* imquic_connection::outgoing_data |
Queued data to send.
GQueue * imquic_connection::outgoing_datagram |
imquic_network_address imquic_connection::peer |
Network address of the peer.
uint64_t imquic_connection::pkn[4] |
Current outgoing packet number for each encryption level.
uint8_t imquic_connection::pto_count |
PTO count.
GList* imquic_connection::recvd[4] |
List of received packet numbers, for each encryption level.
imquic_refcount imquic_connection::ref |
Reference counter.
imquic_connection_id imquic_connection::remote_cid |
imquic_connection_parameters imquic_connection::remote_params |
imquic_data_fixed imquic_connection::retry_token |
Retry token, if any.
imquic_connection_rtt imquic_connection::rtt |
Different RTTs for this connection.
gboolean imquic_connection::send_ack[5] |
Whether we have ACKs to send for a specific encryption level.
gboolean imquic_connection::send_crypto |
Whether we have CRYPTO
frames to send.
imquic_listmap* imquic_connection::sent_pkts[4] |
Sent packets, per each encryption level.
imquic_network_endpoint* imquic_connection::socket |
Networking instance for this connection.
SSL* imquic_connection::ssl |
Encryption instance.
uint64_t imquic_connection::stream_next_bidi |
uint64_t imquic_connection::stream_next_uni |
Next unidirectional and bidirectional stream we can create (as actual ID, not QUIC one)
GHashTable* imquic_connection::streams |
Map of streams we're handling, and map of streams that are now done.
GHashTable * imquic_connection::streams_done |
volatile gint imquic_connection::wakeup |
Trigger to wake the loop for this connection as part of the imquic_connection_source management.