Loading...
Searching...
No Matches
connection.h
Go to the documentation of this file.
1
12
13#ifndef IMQUIC_CONNECTION_H
14#define IMQUIC_CONNECTION_H
15
16#include <stdint.h>
17
18#include <glib.h>
19#include <picoquic_utils.h>
20
21#include "stream.h"
22#include "buffer.h"
23#include "network.h"
24#include "http3.h"
25#include "error.h"
26#include "qlog.h"
27#include "utils.h"
28#include "refcount.h"
29
35const char *imquic_connection_id_str(picoquic_connection_id_t *cid, char *buffer, size_t blen);
36
89
98
102
107int imquic_connection_new_stream_id(imquic_connection *conn, gboolean bidirectional, uint64_t *stream_id);
116int imquic_connection_send_on_datagram(imquic_connection *conn, uint8_t *bytes, uint64_t length);
128int imquic_connection_send_on_stream(imquic_connection *conn, uint64_t stream_id,
129 uint8_t *bytes, uint64_t length, gboolean complete);
134void imquic_connection_notify_datagram_incoming(imquic_connection *conn, uint8_t *data, uint64_t length);
140void imquic_connection_notify_stream_incoming(imquic_connection *conn, imquic_stream *stream, uint8_t *data, uint64_t length);
148void imquic_connection_reset_stream(imquic_connection *conn, uint64_t stream_id, uint64_t error_code);
153void imquic_connection_close(imquic_connection *conn, uint64_t error_code, const char *reason);
155
159
167
170 /* Type of event we're queueing */
172 /* Stream ID, where applicable */
173 uint64_t stream_id;
174 /* Data buffer, where applicable */
176 /* FIN, where applicable */
177 gboolean fin;
178 /* Error code, where applicable */
179 uint64_t error_code;
180 /* Reason string, where applicable */
181 char *reason;
191
192#endif
Buffer abstraction (headers)
imquic_connection_event_type
QUIC event.
Definition connection.h:160
@ IMQUIC_CONNECTION_EVENT_DATAGRAM
Definition connection.h:163
@ IMQUIC_CONNECTION_EVENT_CLOSE_CONN
Definition connection.h:165
@ IMQUIC_CONNECTION_EVENT_RESET_STREAM
Definition connection.h:164
@ IMQUIC_CONNECTION_EVENT_STREAM
Definition connection.h:162
@ IMQUIC_CONNECTION_EVENT_UNKNOWN
Definition connection.h:161
void imquic_connection_destroy(imquic_connection *conn)
Helper method to destroy an existing imquic_connection instance.
Definition connection.c:104
int imquic_connection_send_on_datagram(imquic_connection *conn, uint8_t *bytes, uint64_t length)
Helper method to send data on a QUIC DATAGRAM.
Definition connection.c:150
void imquic_connection_notify_stream_incoming(imquic_connection *conn, imquic_stream *stream, uint8_t *data, uint64_t length)
Helper to notify incoming STREAM data to the application.
Definition connection.c:216
imquic_connection * imquic_connection_create(imquic_network_endpoint *socket, picoquic_cnx_t *piconn)
Helper method to create a new imquic_connection instance owned by a specific imquic_network_endpoint ...
Definition connection.c:54
void imquic_connection_event_destroy(imquic_connection_event *event)
Helper method to destroy a imquic_connection_event instance.
Definition connection.c:296
void imquic_connection_reset_stream(imquic_connection *conn, uint64_t stream_id, uint64_t error_code)
Helper to reset a stream, sending a RESET_STREAM.
Definition connection.c:237
int imquic_connection_send_on_stream(imquic_connection *conn, uint64_t stream_id, uint8_t *bytes, uint64_t length, gboolean complete)
Helper method to send data on a QUIC STREAM.
Definition connection.c:173
imquic_connection_event * imquic_connection_event_create(imquic_connection_event_type type)
Helper method to create a imquic_connection_event instance.
Definition connection.c:289
void imquic_connection_notify_gone(imquic_connection *conn)
Helper to notify about the connection being gone.
Definition connection.c:226
const char * imquic_connection_id_str(picoquic_connection_id_t *cid, char *buffer, size_t blen)
Helper method to stringify a connection ID.
Definition connection.c:19
int imquic_connection_new_stream_id(imquic_connection *conn, gboolean bidirectional, uint64_t *stream_id)
Helper to generate a new stream ID for this connection.
Definition connection.c:117
void imquic_connection_notify_datagram_incoming(imquic_connection *conn, uint8_t *data, uint64_t length)
Helper to notify incoming DATAGRAM data to the application.
Definition connection.c:206
void imquic_connection_close(imquic_connection *conn, uint64_t error_code, const char *reason)
Helpers to close connections.
Definition connection.c:271
QUIC errors definitions (headers)
HTTP/3 stack (WebTransport only) (headers)
GMutex imquic_mutex
imquic mutex implementation
Definition mutex.h:18
Networking utilities (headers)
QLOG support (headers)
Reference counter mechanism.
QUIC STREAM abstraction (headers)
Internal buffer.
Definition buffer.h:18
QUIC event.
Definition connection.h:169
char * reason
Definition connection.h:181
imquic_connection_event_type type
Definition connection.h:171
gboolean fin
Definition connection.h:177
uint64_t error_code
Definition connection.h:179
imquic_buffer * data
Definition connection.h:175
uint64_t stream_id
Definition connection.h:173
QUIC Connection.
Definition connection.h:38
gboolean connected
Whether this connection has been established.
Definition connection.h:65
gboolean alpn_negotiated
Whether an ALPN has been negotiated.
Definition connection.h:63
picoquic_cnx_t * piconn
Picoquic connection instance.
Definition connection.h:42
imquic_source * loop_source
Loop source.
Definition connection.h:73
volatile gint closed
Definition connection.h:83
imquic_network_endpoint * socket
Networking instance for this connection.
Definition connection.h:67
char * chosen_wt_protocol
Negotiated WebTransport protocol.
Definition connection.h:55
imquic_network_address peer
Network address of the peer.
Definition connection.h:69
imquic_http3_connection * http3
WebTransport context, if any.
Definition connection.h:71
uint64_t stream_next_bidi
Definition connection.h:57
char initial_cid_str[41]
Initial Connection ID as a string.
Definition connection.h:51
imquic_qlog * qlog
QLOG instance, if any.
Definition connection.h:78
gboolean established
Definition connection.h:65
imquic_refcount ref
Reference counter.
Definition connection.h:87
gboolean have_params
Whether we already received the peer QUIC transport parameters.
Definition connection.h:48
GHashTable * streams
Map of streams we're handling.
Definition connection.h:59
volatile gint closing
Whether this connection is being closed or has been closed.
Definition connection.h:83
gboolean is_server
Whether this is a server or a client connection (inherited from the endpoint)
Definition connection.h:44
volatile gint destroyed
Whether this instance has been destroyed (reference counting)
Definition connection.h:85
uint64_t stream_next_uni
Next unidirectional and bidirectional stream we can create (as actual ID, not QUIC one)
Definition connection.h:57
char * name
Name of this connection (for logging purposes)
Definition connection.h:40
char * chosen_alpn
Negotiated ALPN.
Definition connection.h:53
gboolean just_started
Whether this connection has just started (e.g., to decide whether we need to derive initial secrets)
Definition connection.h:46
volatile gint notified_close
Definition connection.h:83
imquic_mutex mutex
Mutex.
Definition connection.h:81
uint32_t dgram_id_in
Incoming and outgoing datagram IDs.
Definition connection.h:75
uint32_t dgram_id_out
Definition connection.h:75
GAsyncQueue * queued_events
Queue of events in the loop and outgoing packets to send.
Definition connection.h:61
HTTP/3 connection abstraction.
Definition http3.h:140
Abstraction of a network address.
Definition network.h:35
Abstraction of a network endpoint (client or server)
Definition network.h:54
QLOG instance.
Definition qlog.h:36
Definition refcount.h:77
Event source base.
Definition loop.h:34
QUIC stream.
Definition stream.h:40
Generic utilities (headers)