Loading...
Searching...
No Matches
internal/roq.h
Go to the documentation of this file.
1
18#ifndef IMQUIC_ROQ_INTERNAL_H
19#define IMQUIC_ROQ_INTERNAL_H
20
21#include <glib.h>
22
23#include "../imquic/imquic.h"
24#include "qlog.h"
25#include "mutex.h"
26#include "refcount.h"
27
28#define IMQUIC_ROQ 7499633
29
31void imquic_roq_init(void);
33void imquic_roq_deinit(void);
34
46
48typedef struct imquic_roq_stream {
50 uint64_t stream_id;
52 uint64_t flow_id;
54 uint64_t offset;
56 volatile gint destroyed;
60
62typedef struct imquic_roq_callbacks {
64 void (* new_connection)(imquic_connection *conn, void *user_data);
66 void (* rtp_incoming)(imquic_connection *conn, uint64_t flow_id, uint8_t *bytes, size_t blen);
70
74
78void imquic_roq_new_connection(imquic_connection *conn, void *user_data);
86void imquic_roq_stream_incoming(imquic_connection *conn, uint64_t stream_id,
87 uint8_t *bytes, uint64_t offset, uint64_t length, gboolean complete);
92void imquic_roq_datagram_incoming(imquic_connection *conn, uint8_t *bytes, uint64_t length);
97
98#ifdef HAVE_QLOG
102
106void imquic_roq_qlog_add_rtp_packet(json_t *data, uint64_t flow_id, uint64_t length);
111void imquic_roq_qlog_stream_opened(imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id);
117void imquic_roq_qlog_stream_packet_created(imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id, uint64_t length);
123void imquic_roq_qlog_stream_packet_parsed(imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id, uint64_t length);
128void imquic_roq_qlog_datagram_packet_created(imquic_qlog *qlog, uint64_t flow_id, uint64_t length);
133void imquic_roq_qlog_datagram_packet_parsed(imquic_qlog *qlog, uint64_t flow_id, uint64_t length);
135#endif
136
137#endif
imquic public interface (headers)
void imquic_roq_qlog_stream_opened(imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id)
Add a stream_opened event.
Definition roq.c:311
void imquic_roq_qlog_datagram_packet_created(imquic_qlog *qlog, uint64_t flow_id, uint64_t length)
Add a datagram_packet_created event.
Definition roq.c:341
void imquic_roq_qlog_add_rtp_packet(json_t *data, uint64_t flow_id, uint64_t length)
Helper to add fields for RtpPacket to an event.
Definition roq.c:304
void imquic_roq_datagram_incoming(imquic_connection *conn, uint8_t *bytes, uint64_t length)
Callback the core invokes when there's new incoming data on a DATAGRAM.
Definition roq.c:198
struct imquic_roq_callbacks imquic_roq_callbacks
RoQ public callbacks.
void imquic_roq_init(void)
Initialize the native RoQ stack at startup.
Definition roq.c:50
void imquic_roq_qlog_datagram_packet_parsed(imquic_qlog *qlog, uint64_t flow_id, uint64_t length)
Add a datagram_packet_parsed event.
Definition roq.c:350
struct imquic_roq_stream imquic_roq_stream
RoQ stream (when using the same stream for multiple packets)
void imquic_roq_deinit(void)
Uninitialize the native RoQ stack.
Definition roq.c:54
void imquic_roq_qlog_stream_packet_parsed(imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id, uint64_t length)
Add a stream_packet_parsed event.
Definition roq.c:331
struct imquic_roq_endpoint imquic_roq_endpoint
RoQ endpoint instance.
void imquic_roq_connection_gone(imquic_connection *conn)
Callback the core invokes when an existing RoQ connection is not available anymore.
Definition roq.c:213
void imquic_roq_stream_incoming(imquic_connection *conn, uint64_t stream_id, uint8_t *bytes, uint64_t offset, uint64_t length, gboolean complete)
Callback the core invokes when there's new incoming data on a STREAM.
Definition roq.c:157
void imquic_roq_new_connection(imquic_connection *conn, void *user_data)
Callback the core invokes when a new QUIC connection using RoQ is available.
Definition roq.c:137
void imquic_roq_qlog_stream_packet_created(imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id, uint64_t length)
Add a stream_packet_created event.
Definition roq.c:321
Semaphores, Mutexes and Conditions.
GMutex imquic_mutex
imquic mutex implementation
Definition mutex.h:18
QLOG support (headers)
Reference counter mechanism.
QUIC Connection.
Definition connection.h:114
QLOG instance.
Definition qlog.h:50
Definition refcount.h:77
RoQ public callbacks.
Definition internal/roq.h:62
void(* connection_gone)(imquic_connection *conn)
Callback function to be notified about RoQ connections being closed.
Definition internal/roq.h:68
void(* rtp_incoming)(imquic_connection *conn, uint64_t flow_id, uint8_t *bytes, size_t blen)
Callback function to be notified about incoming RTP packets.
Definition internal/roq.h:66
void(* new_connection)(imquic_connection *conn, void *user_data)
Callback function to be notified about new RoQ connections.
Definition internal/roq.h:64
RoQ endpoint instance.
Definition internal/roq.h:36
imquic_connection * conn
Associated QUIC connection.
Definition internal/roq.h:38
GHashTable * packets
Current packet buffer, indexed by stream ID.
Definition internal/roq.h:42
GHashTable * stream_flows_out
Definition internal/roq.h:40
GHashTable * stream_flows_in
Stream flows, indexed by stream ID.
Definition internal/roq.h:40
imquic_mutex mutex
Mutex.
Definition internal/roq.h:44
RoQ stream (when using the same stream for multiple packets)
Definition internal/roq.h:48
uint64_t stream_id
QUIC Stream ID.
Definition internal/roq.h:50
uint64_t offset
Offset in the QUIC STREAM where to write the next packet.
Definition internal/roq.h:54
volatile gint destroyed
Whether this instance has been destroyed (reference counting)
Definition internal/roq.h:56
uint64_t flow_id
RoQ Flow ID.
Definition internal/roq.h:52
imquic_refcount ref
Reference counter.
Definition internal/roq.h:58