Loading...
Searching...
No Matches
Data Fields
imquic_connection Struct Reference

QUIC Connection. More...

#include <connection.h>

Collaboration diagram for imquic_connection:
Collaboration graph
[legend]

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_listmapsent_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_buffercrypto_in [4]
 Buffers for incoming and outgoing CRYPTO exchanges, at each encryption level.
 
imquic_buffercrypto_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_endpointsocket
 Networking instance for this connection.
 
imquic_network_address peer
 Network address of the peer.
 
imquic_http3_connectionhttp3
 WebTransport context, if any.
 
imquic_sourceld_timer
 Loss detection timer.
 
int64_t last_activity
 Monotonic time of when we last got activity.
 
imquic_sourceidle_timer
 Idle timer.
 
uint8_t pto_count
 PTO count.
 
imquic_sourceloop_source
 Loop source.
 
imquic_mutex mutex
 Mutex.
 
volatile gint destroyed
 Whether this instance has been destroyed (reference counting)
 
imquic_refcount ref
 Reference counter.
 

Detailed Description

QUIC Connection.

Field Documentation

◆ ack_eliciting_in_flight

size_t imquic_connection::ack_eliciting_in_flight[4]

Number of ACK eliciting packets in flight, for each encryption level.

◆ alpn

imquic_data imquic_connection::alpn

ALPN.

◆ alpn_negotiated

gboolean imquic_connection::alpn_negotiated

Whether an ALPN has been negotiated.

◆ connected

gboolean imquic_connection::connected

Whether this connection has been established.

◆ connection_ids

GList* imquic_connection::connection_ids

List of Connection IDs our peer has used.

◆ crypto_in

imquic_buffer* imquic_connection::crypto_in[4]

Buffers for incoming and outgoing CRYPTO exchanges, at each encryption level.

◆ crypto_out

imquic_buffer * imquic_connection::crypto_out[4]

◆ current_max_streams_bidi

uint64_t imquic_connection::current_max_streams_bidi

◆ current_max_streams_uni

uint64_t imquic_connection::current_max_streams_uni

Current cap for the maximum number of unidirectional and bidirectional streams we're prepared to accept.

◆ current_phase

gboolean imquic_connection::current_phase

Current value of the key phase bit.

◆ destroyed

volatile gint imquic_connection::destroyed

Whether this instance has been destroyed (reference counting)

◆ have_params

gboolean imquic_connection::have_params

Whether we already received the peer QUIC transport parameters.

◆ http3

imquic_http3_connection* imquic_connection::http3

WebTransport context, if any.

◆ idle_timer

imquic_source* imquic_connection::idle_timer

Idle timer.

◆ incoming_data

GQueue* imquic_connection::incoming_data

Queued streams to process.

◆ initial_cid

imquic_connection_id imquic_connection::initial_cid

Initial Connection ID.

◆ is_server

gboolean imquic_connection::is_server

Whether this is a server or a client connection (inherited from the endpoint)

◆ just_started

gboolean imquic_connection::just_started

Whether this connection has just started (e.g., to decide whether we need to derive initial secrets)

◆ keys

imquic_protection imquic_connection::keys[4]

Keys (protection, encryption) for each encryption level.

◆ largest

uint64_t imquic_connection::largest[4]

Largest received packet numbers, for each encryption level.

◆ largest_acked

uint64_t imquic_connection::largest_acked[4]

Largest acked packet numbers, for each encryption level.

◆ largest_time

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)

◆ last_ack_eliciting_time

int64_t imquic_connection::last_ack_eliciting_time[4]

Monotonic time of when we sent the last ACK eliciting packet, for each encryption level.

◆ last_activity

int64_t imquic_connection::last_activity

Monotonic time of when we last got activity.

◆ ld_timer

imquic_source* imquic_connection::ld_timer

Loss detection timer.

◆ level

enum ssl_encryption_level_t imquic_connection::level

Current encryption level.

◆ local_cid

imquic_connection_id imquic_connection::local_cid

Local and remote Connection ID.

◆ local_params

imquic_connection_parameters imquic_connection::local_params

Transport parameters (local and remote)

◆ loop_source

imquic_source* imquic_connection::loop_source

Loop source.

◆ loss_time

int64_t imquic_connection::loss_time[4]

Monotonic time of when the next packet can be considered, lost, per each encryption level.

◆ max_streams_bidi_updated

gboolean imquic_connection::max_streams_bidi_updated

◆ max_streams_uni_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)

◆ mutex

imquic_mutex imquic_connection::mutex

Mutex.

◆ name

char* imquic_connection::name

Name of this connection (for logging purposes)

◆ new_remote_cid

imquic_connection_id imquic_connection::new_remote_cid

New remote Connection ID.

◆ outgoing_data

GQueue* imquic_connection::outgoing_data

Queued data to send.

◆ outgoing_datagram

GQueue * imquic_connection::outgoing_datagram

◆ peer

imquic_network_address imquic_connection::peer

Network address of the peer.

◆ pkn

uint64_t imquic_connection::pkn[4]

Current outgoing packet number for each encryption level.

◆ pto_count

uint8_t imquic_connection::pto_count

PTO count.

◆ recvd

GList* imquic_connection::recvd[4]

List of received packet numbers, for each encryption level.

◆ ref

imquic_refcount imquic_connection::ref

Reference counter.

◆ remote_cid

imquic_connection_id imquic_connection::remote_cid

◆ remote_params

imquic_connection_parameters imquic_connection::remote_params

◆ retry_token

imquic_data_fixed imquic_connection::retry_token

Retry token, if any.

◆ rtt

imquic_connection_rtt imquic_connection::rtt

Different RTTs for this connection.

◆ send_ack

gboolean imquic_connection::send_ack[5]

Whether we have ACKs to send for a specific encryption level.

◆ send_crypto

gboolean imquic_connection::send_crypto

Whether we have CRYPTO frames to send.

◆ sent_pkts

imquic_listmap* imquic_connection::sent_pkts[4]

Sent packets, per each encryption level.

◆ socket

imquic_network_endpoint* imquic_connection::socket

Networking instance for this connection.

◆ ssl

SSL* imquic_connection::ssl

Encryption instance.

◆ stream_next_bidi

uint64_t imquic_connection::stream_next_bidi

◆ stream_next_uni

uint64_t imquic_connection::stream_next_uni

Next unidirectional and bidirectional stream we can create (as actual ID, not QUIC one)

◆ streams

GHashTable* imquic_connection::streams

Map of streams we're handling, and map of streams that are now done.

◆ streams_done

GHashTable * imquic_connection::streams_done

◆ wakeup

volatile gint imquic_connection::wakeup

Trigger to wake the loop for this connection as part of the imquic_connection_source management.


The documentation for this struct was generated from the following file: