Loading...
Searching...
No Matches
internal/moq.h
Go to the documentation of this file.
1
18#ifndef IMQUIC_MOQ_INTERNAL_H
19#define IMQUIC_MOQ_INTERNAL_H
20
21#include <stddef.h>
22#include <stdint.h>
23
24#include <glib.h>
25
26#include "../imquic/imquic.h"
27#include "../imquic/moq.h"
28#include "utils.h"
29#include "qlog.h"
30#include "refcount.h"
31
32#define IMQUIC_MOQ 7171953
33
35void imquic_moq_init(void);
37void imquic_moq_deinit(void);
38
74
102
114
127
130 IMQUIC_MOQ_ROLE_ENDPOINT = 0x00, /* Not a real role: since -08, there are no more roles */
139
161
181
193
204
206typedef struct imquic_moq_buffer {
208 uint8_t *bytes;
210 uint64_t length;
212 uint64_t size;
219gboolean imquic_moq_buffer_resize(imquic_moq_buffer *buffer, uint64_t new_size);
226void imquic_moq_buffer_append(imquic_moq_buffer *buffer, uint8_t *bytes, uint64_t length);
231void imquic_moq_buffer_shift(imquic_moq_buffer *buffer, uint64_t length);
235
281
314
334imquic_moq_subscription *imquic_moq_subscription_create(uint64_t request_id, uint64_t track_alias);
338
342
354int imquic_moq_parse_message(imquic_moq_context *moq, uint64_t stream_id, uint8_t *bytes, size_t blen, gboolean complete, gboolean datagram);
362size_t imquic_moq_parse_client_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, gboolean legacy, uint8_t *error);
370size_t imquic_moq_parse_server_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, gboolean legacy, uint8_t *error);
377size_t imquic_moq_parse_max_request_id(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
384size_t imquic_moq_parse_requests_blocked(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
391size_t imquic_moq_parse_announce(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
398size_t imquic_moq_parse_announce_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
405size_t imquic_moq_parse_announce_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
412size_t imquic_moq_parse_unannounce(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
419size_t imquic_moq_parse_announce_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
426size_t imquic_moq_parse_subscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
433size_t imquic_moq_parse_subscribe_update(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
440size_t imquic_moq_parse_subscribe_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
447size_t imquic_moq_parse_subscribe_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
454size_t imquic_moq_parse_unsubscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
461size_t imquic_moq_parse_subscribe_done(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
468size_t imquic_moq_parse_subscribe_announces(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
475size_t imquic_moq_parse_subscribe_announces_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
482size_t imquic_moq_parse_subscribe_announces_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
489size_t imquic_moq_parse_unsubscribe_announces(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
496size_t imquic_moq_parse_fetch(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
503size_t imquic_moq_parse_fetch_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
510size_t imquic_moq_parse_fetch_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
517size_t imquic_moq_parse_fetch_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
524size_t imquic_moq_parse_track_status_request(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
531size_t imquic_moq_parse_track_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
539size_t imquic_moq_parse_object_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_data_message_type dtype, uint8_t *error);
547size_t imquic_moq_parse_object_datagram_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_data_message_type dtype, uint8_t *error);
555size_t imquic_moq_parse_stream_header_track(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
572size_t imquic_moq_parse_subgroup_header(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, imquic_moq_data_message_type dtype, uint8_t *error);
588size_t imquic_moq_parse_fetch_header(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
596int imquic_moq_parse_fetch_header_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete);
603size_t imquic_moq_parse_goaway(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
605
609
623 uint8_t *bytes, size_t blen, size_t poffset, size_t plen, size_t *start);
631size_t imquic_moq_add_client_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
632 GList *supported_versions, imquic_moq_setup_parameters *parameters);
640size_t imquic_moq_add_server_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
641 uint32_t version, imquic_moq_setup_parameters *parameters);
648size_t imquic_moq_add_max_request_id(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t max_request_id);
655size_t imquic_moq_add_requests_blocked(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t max_request_id);
664size_t imquic_moq_add_announce(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
665 uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_subscribe_parameters *parameters);
673size_t imquic_moq_add_announce_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
674 uint64_t request_id, imquic_moq_namespace *track_namespace);
684size_t imquic_moq_add_announce_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
685 uint64_t request_id, imquic_moq_namespace *track_namespace,
686 imquic_moq_announce_error_code error, const char *reason);
693size_t imquic_moq_add_unannounce(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace);
702size_t imquic_moq_add_announce_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace,
703 imquic_moq_announce_error_code error, const char *reason);
722size_t imquic_moq_add_subscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t track_alias,
723 imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, uint8_t priority, uint8_t group_order, gboolean forward,
724 imquic_moq_filter_type filter, uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, imquic_moq_subscribe_parameters *parameters);
738size_t imquic_moq_add_subscribe_update(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id,
739 uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, uint8_t priority,
740 gboolean forward, imquic_moq_subscribe_parameters *parameters);
753size_t imquic_moq_add_subscribe_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id,
754 uint64_t expires, imquic_moq_group_order group_order, gboolean content_exists, uint64_t largest_group_id, uint64_t largest_object_id,
765size_t imquic_moq_add_subscribe_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id,
766 imquic_moq_sub_error_code error, const char *reason, uint64_t track_alias);
773size_t imquic_moq_add_unsubscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id);
786size_t imquic_moq_add_subscribe_done(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id,
787 imquic_moq_sub_done_code status, uint64_t streams_count, const char *reason, gboolean content_exists, uint64_t final_group, uint64_t final_object);
796size_t imquic_moq_add_subscribe_announces(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
797 uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_subscribe_parameters *parameters);
805size_t imquic_moq_add_subscribe_announces_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
806 uint64_t request_id, imquic_moq_namespace *track_namespace);
816size_t imquic_moq_add_subscribe_announces_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
817 uint64_t request_id, imquic_moq_namespace *track_namespace,
818 imquic_moq_subannc_error_code error, const char *reason);
825size_t imquic_moq_add_unsubscribe_announces(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace);
844size_t imquic_moq_add_fetch(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_fetch_type type,
845 uint64_t request_id, uint64_t joining_request_id, uint64_t preceding_group_offset,
846 imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, uint8_t priority, imquic_moq_group_order group_order,
847 uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, imquic_moq_subscribe_parameters *parameters);
854size_t imquic_moq_add_fetch_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id);
866size_t imquic_moq_add_fetch_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id,
867 uint8_t group_order, uint8_t end_of_track, uint64_t largest_group_id, uint64_t largest_object_id,
877size_t imquic_moq_add_fetch_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id,
878 imquic_moq_fetch_error_code error, const char *reason);
888size_t imquic_moq_add_track_status_request(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
889 uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, imquic_moq_subscribe_parameters *parameters);
902size_t imquic_moq_add_track_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
903 uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name,
904 uint64_t status_code, uint64_t last_group_id, uint64_t last_object_id, imquic_moq_subscribe_parameters *parameters);
922size_t imquic_moq_add_object_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t track_alias,
923 uint64_t group_id, uint64_t object_id, uint64_t object_status, uint8_t priority,
924 uint8_t *payload, size_t plen, size_t extensions_count, uint8_t *extensions, size_t elen);
938size_t imquic_moq_add_object_datagram_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
939 uint64_t track_alias, uint64_t group_id, uint64_t object_id, uint8_t priority,
940 uint64_t object_status, uint8_t *extensions, size_t elen);
952size_t imquic_moq_add_stream_header_track(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
953 uint64_t request_id, uint64_t track_alias, uint8_t priority);
965size_t imquic_moq_add_stream_header_track_object(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
966 uint64_t group_id, uint64_t object_id, uint64_t object_status, uint8_t *payload, size_t plen);
981size_t imquic_moq_add_subgroup_header(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen,
982 uint64_t request_id, uint64_t track_alias, uint64_t group_id, uint64_t subgroup_id, uint8_t priority);
998 uint8_t *bytes, size_t blen, uint64_t object_id, uint64_t object_status, uint8_t *payload, size_t plen,
999 size_t extensions_count, uint8_t *extensions, size_t elen);
1009size_t imquic_moq_add_fetch_header(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id);
1026size_t imquic_moq_add_fetch_header_object(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1027 uint64_t group_id, uint64_t subgroup_id, uint64_t object_id, uint8_t priority,
1028 uint64_t object_status, uint8_t *payload, size_t plen,
1029 size_t extensions_count, uint8_t *extensions, size_t elen);
1036size_t imquic_moq_add_goaway(imquic_moq_context *moq, uint8_t *bytes, size_t blen, const char *new_session_uri);
1047size_t imquic_moq_add_object_extensions(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1048 size_t extensions_count, uint8_t *extensions, size_t elen);
1050
1054
1062size_t imquic_moq_parse_setup_parameter(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1063 imquic_moq_setup_parameters *params, uint8_t *error);
1072size_t imquic_moq_parse_subscribe_parameter(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1073 imquic_moq_subscribe_parameters *params, uint8_t *error);
1081size_t imquic_moq_parameter_add_int(imquic_moq_context *moq, uint8_t *bytes, size_t blen, int param, uint64_t number);
1090size_t imquic_moq_parameter_add_data(imquic_moq_context *moq, uint8_t *bytes, size_t blen, int param, uint8_t *buf, size_t buflen);
1099 imquic_moq_setup_parameters *parameters,
1100 uint8_t *bytes, size_t blen, uint8_t *params_num);
1101
1111 uint8_t *bytes, size_t blen, uint8_t *params_num);
1113
1115typedef struct imquic_moq_callbacks {
1117 void (* new_connection)(imquic_connection *conn, void *user_data);
1121 void (* incoming_announce)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns);
1125 void (* announce_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns);
1127 void (* announce_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_announce_error_code error_code, const char *reason);
1131 void (* incoming_subscribe)(imquic_connection *conn, uint64_t request_id, uint64_t track_alias, imquic_moq_namespace *tns, imquic_moq_name *tn,
1132 uint8_t priority, gboolean descending, gboolean forward, imquic_moq_filter_type filter_type, imquic_moq_location *start_location, imquic_moq_location *end_location, uint8_t *auth, size_t authlen);
1134 void (* subscribe_accepted)(imquic_connection *conn, uint64_t request_id, uint64_t expires, gboolean descending, imquic_moq_location *largest);
1136 void (* subscribe_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_sub_error_code error_code, const char *reason, uint64_t track_alias);
1138 void (* subscribe_updated)(imquic_connection *conn, uint64_t request_id, imquic_moq_location *start_location, uint64_t end_group, uint8_t priority, gboolean forward);
1140 void (* subscribe_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_sub_done_code status_code, uint64_t streams_count, const char *reason);
1142 void (* incoming_unsubscribe)(imquic_connection *conn, uint64_t request_id);
1144 void (* requests_blocked)(imquic_connection *conn, uint64_t max_request_id);
1146 void (* incoming_subscribe_announces)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, uint8_t *auth, size_t authlen);
1148 void (* subscribe_announces_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns);
1150 void (* subscribe_announces_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_subannc_error_code error_code, const char *reason);
1154 void (* incoming_standalone_fetch)(imquic_connection *conn, uint64_t request_id,
1155 imquic_moq_namespace *tns, imquic_moq_name *tn, gboolean descending, imquic_moq_fetch_range *range, uint8_t *auth, size_t authlen);
1156 void (* incoming_joining_fetch)(imquic_connection *conn, uint64_t request_id, uint64_t joining_request_id,
1157 gboolean absolute, uint64_t joining_start, gboolean descending, uint8_t *auth, size_t authlen);
1159 void (* incoming_fetch_cancel)(imquic_connection *conn, uint64_t request_id);
1161 void (* fetch_accepted)(imquic_connection *conn, uint64_t request_id, gboolean descending, imquic_moq_location *largest);
1163 void (* fetch_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_fetch_error_code error_code, const char *reason);
1171 void (* incoming_goaway)(imquic_connection *conn, const char *uri);
1175
1179
1183void imquic_moq_new_connection(imquic_connection *conn, void *user_data);
1191void imquic_moq_stream_incoming(imquic_connection *conn, uint64_t stream_id,
1192 uint8_t *bytes, uint64_t offset, uint64_t length, gboolean complete);
1197void imquic_moq_datagram_incoming(imquic_connection *conn, uint8_t *bytes, uint64_t length);
1202
1203#ifdef HAVE_QLOG
1207
1211json_t *imquic_qlog_moq_message_prepare(const char *type);
1216void imquic_qlog_moq_message_add_namespace(json_t *message, imquic_moq_namespace *track_namespace);
1221void imquic_qlog_moq_message_add_track(json_t *message, imquic_moq_name *track_name);
1227void imquic_qlog_moq_message_add_setup_parameters(json_t *message, imquic_moq_setup_parameters *parameters, const char *name);
1233void imquic_qlog_moq_message_add_subscribe_parameters(json_t *message, imquic_moq_subscribe_parameters *parameters, const char *name);
1239void imquic_moq_qlog_control_message_created(imquic_qlog *qlog, uint64_t stream_id, size_t length, json_t *message);
1245void imquic_moq_qlog_control_message_parsed(imquic_qlog *qlog, uint64_t stream_id, size_t length, json_t *message);
1251void imquic_moq_qlog_stream_type_set(imquic_qlog *qlog, gboolean local, uint64_t stream_id, const char *type);
1280void imquic_moq_qlog_subgroup_object_created(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object);
1285void imquic_moq_qlog_subgroup_object_parsed(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object);
1298void imquic_moq_qlog_fetch_object_created(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object);
1303void imquic_moq_qlog_fetch_object_parsed(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object);
1305#endif
1306
1307#endif
imquic MoQ public interface (headers)
imquic_moq_object_status
MoQ Object status.
Definition imquic/moq.h:428
imquic_moq_filter_type
MoQ filter type, for subscriptions.
Definition imquic/moq.h:386
imquic_moq_announce_error_code
Announce error codes.
Definition imquic/moq.h:591
imquic_moq_subannc_error_code
Subscribe announces error codes.
Definition imquic/moq.h:625
imquic_moq_version
Versions that can be negotiated.
Definition imquic/moq.h:973
imquic_moq_fetch_error_code
Fetch error codes.
Definition imquic/moq.h:641
imquic_moq_track_status_code
Track status codes.
Definition imquic/moq.h:675
imquic_moq_sub_error_code
Subscribe error codes.
Definition imquic/moq.h:607
imquic_moq_sub_done_code
Subscribe done codes.
Definition imquic/moq.h:660
imquic_moq_delivery
Ways of sending objects.
Definition imquic/moq.h:412
imquic public interface (headers)
size_t imquic_moq_parse_subscribe_parameter(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_subscribe_parameters *params, uint8_t *error)
Helper method to parse a MoQ subscribe parameter.
Definition moq.c:5406
void imquic_moq_qlog_object_datagram_status_parsed(imquic_qlog *qlog, imquic_moq_object *object)
Add a object_datagram_status_parsed event.
Definition moq.c:6978
size_t imquic_moq_add_subscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t track_alias, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, uint8_t priority, uint8_t group_order, gboolean forward, imquic_moq_filter_type filter, uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, imquic_moq_subscribe_parameters *parameters)
Helper to add a SUBSCRIBE message to a buffer.
Definition moq.c:4216
json_t * imquic_qlog_moq_message_prepare(const char *type)
Helper to create a new QLOG MoQT message.
Definition moq.c:6789
int imquic_moq_parse_message(imquic_moq_context *moq, uint64_t stream_id, uint8_t *bytes, size_t blen, gboolean complete, gboolean datagram)
Parse an incoming MoQ message.
Definition moq.c:771
size_t imquic_moq_parse_subscribe_announces_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_ANNOUNCES_OK message.
Definition moq.c:2280
size_t imquic_moq_add_subscribe_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_sub_error_code error, const char *reason, uint64_t track_alias)
Helper method to add a SUBSCRIBE_ERRROR message to a buffer.
Definition moq.c:4387
size_t imquic_moq_add_max_request_id(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t max_request_id)
Helper method to add a MAX_REQUEST_ID message to a buffer.
Definition moq.c:3911
size_t imquic_moq_add_server_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint32_t version, imquic_moq_setup_parameters *parameters)
Helper method to add a SERVER_SETUP message to a buffer.
Definition moq.c:3889
void imquic_moq_qlog_fetch_header_parsed(imquic_qlog *qlog, imquic_moq_stream *stream)
Add a fetch_header_parsed event.
Definition moq.c:7066
gboolean imquic_moq_buffer_resize(imquic_moq_buffer *buffer, uint64_t new_size)
Resize an existing buffer.
Definition moq.c:694
size_t imquic_moq_add_object_datagram_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t track_alias, uint64_t group_id, uint64_t object_id, uint8_t priority, uint64_t object_status, uint8_t *extensions, size_t elen)
Helper to add an OBJECT_DATAGRAM_STATUS message to a buffer.
Definition moq.c:5058
size_t imquic_moq_add_subscribe_announces(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_subscribe_parameters *parameters)
Helper to add a SUBSCRIBE_ANNOUNCES message to a buffer.
Definition moq.c:4473
size_t imquic_moq_parse_announce_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse an ANNOUNCE_ERROR message.
Definition moq.c:1482
size_t imquic_moq_subscribe_parameters_serialize(imquic_moq_context *moq, imquic_moq_subscribe_parameters *parameters, uint8_t *bytes, size_t blen, uint8_t *params_num)
Helper to serialize a imquic_moq_subscribe_parameters set to a buffer.
Definition moq.c:656
void imquic_moq_qlog_control_message_parsed(imquic_qlog *qlog, uint64_t stream_id, size_t length, json_t *message)
Add a control_message_parsed event.
Definition moq.c:6906
size_t imquic_moq_add_requests_blocked(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t max_request_id)
Helper method to add a REQUESTS_BLOCKED message to a buffer.
Definition moq.c:3928
void imquic_moq_qlog_subgroup_object_parsed(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object)
Add a subgroup_object_parsed event.
Definition moq.c:7038
size_t imquic_moq_add_announce_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_announce_error_code error, const char *reason)
Helper method to add an ANNOUNCE_ERROR message to a buffer.
Definition moq.c:4055
size_t imquic_moq_parse_track_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a TRACK_STATUS message.
Definition moq.c:2974
void imquic_qlog_moq_message_add_setup_parameters(json_t *message, imquic_moq_setup_parameters *parameters, const char *name)
Helper to add a stringified array of setup parameters to a message.
Definition moq.c:6824
size_t imquic_moq_parse_subscribe_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_OK message.
Definition moq.c:1937
imquic_moq_subscription * imquic_moq_subscription_create(uint64_t request_id, uint64_t track_alias)
Helper to create a new subscription instance.
Definition moq.c:736
size_t imquic_moq_add_fetch_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_fetch_error_code error, const char *reason)
Helper method to add a FETCH_ERRROR message to a buffer.
Definition moq.c:4849
void imquic_moq_subscription_destroy(imquic_moq_subscription *moq_sub)
Destroy an existing MoQ subscription.
Definition moq.c:746
void imquic_moq_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 moq.c:141
size_t imquic_moq_parameter_add_data(imquic_moq_context *moq, uint8_t *bytes, size_t blen, int param, uint8_t *buf, size_t buflen)
Helper to add a MoQ (setup or subscribe) parameter with generic data to a buffer.
Definition moq.c:5322
imquic_moq_setup_parameter_type
MoQ setup parameter types.
Definition internal/moq.h:104
@ IMQUIC_MOQ_PARAM_MAX_REQUEST_ID
Definition internal/moq.h:107
@ IMQUIC_MOQ_PARAM_PATH
Definition internal/moq.h:106
@ IMQUIC_MOQ_PARAM_MAX_AUTH_TOKEN_CACHE_SIZE
Definition internal/moq.h:108
@ IMQUIC_MOQ_PARAM_ROLE
Definition internal/moq.h:105
struct imquic_moq_subscription imquic_moq_subscription
MoQ subscription, whether this is a publisher or a subscriber.
size_t imquic_moq_parse_announce_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse an ANNOUNCE_CANCEL message.
Definition moq.c:1617
void imquic_moq_stream_destroy(imquic_moq_stream *moq_stream)
Destroy an existing MoQ stream.
Definition moq.c:755
size_t imquic_moq_parse_setup_parameter(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_setup_parameters *params, uint8_t *error)
Helper method to parse a MoQ setup parameter.
Definition moq.c:5342
size_t imquic_moq_parse_requests_blocked(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a REQUESTS_BLOCKED message.
Definition moq.c:1310
size_t imquic_moq_parse_fetch_header(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a FETCH_HEADER message.
Definition moq.c:3610
void imquic_moq_buffer_destroy(imquic_moq_buffer *buffer)
Destroy an existing buffer.
Definition moq.c:729
size_t imquic_moq_parse_subgroup_header(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, imquic_moq_data_message_type dtype, uint8_t *error)
Helper to parse a SUBGROUP_HEADER message.
Definition moq.c:3415
size_t imquic_moq_add_unsubscribe_announces(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace)
Helper method to add an UNSUBSCRIBE_ANNOUNCES message to a buffer.
Definition moq.c:4621
void imquic_moq_qlog_subgroup_header_parsed(imquic_qlog *qlog, imquic_moq_stream *stream)
Add a subgroup_header_parsed event.
Definition moq.c:7007
size_t imquic_moq_parse_server_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, gboolean legacy, uint8_t *error)
Helper to parse a SERVER_SETUP message.
Definition moq.c:1204
int imquic_moq_parse_stream_header_track_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete)
Helper to parse a STREAM_HEADER_TRACK object.
Definition moq.c:3345
const char * imquic_moq_group_order_str(imquic_moq_group_order type)
Helper function to serialize to string the name of a imquic_moq_group_order value.
Definition moq.c:572
size_t imquic_moq_add_fetch_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint8_t group_order, uint8_t end_of_track, uint64_t largest_group_id, uint64_t largest_object_id, imquic_moq_subscribe_parameters *parameters)
Helper method to add a FETCH_OK message to a buffer.
Definition moq.c:4811
size_t imquic_moq_add_subscribe_update(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, uint8_t priority, gboolean forward, imquic_moq_subscribe_parameters *parameters)
Helper method to add a SUBSCRIBE_UPDATE message to a buffer.
Definition moq.c:4306
struct imquic_moq_callbacks imquic_moq_callbacks
MoQ public callbacks.
imquic_moq_message_type
MoQ messages.
Definition internal/moq.h:40
@ IMQUIC_MOQ_SUBSCRIBE_ERROR
Definition internal/moq.h:44
@ IMQUIC_MOQ_UNSUBSCRIBE_ANNOUNCES
Definition internal/moq.h:58
@ IMQUIC_MOQ_CLIENT_SETUP
Definition internal/moq.h:65
@ IMQUIC_MOQ_FETCH
Definition internal/moq.h:61
@ IMQUIC_MOQ_MAX_REQUEST_ID
Definition internal/moq.h:59
@ IMQUIC_MOQ_SUBSCRIBE_ANNOUNCES
Definition internal/moq.h:55
@ IMQUIC_MOQ_FETCH_CANCEL
Definition internal/moq.h:62
@ IMQUIC_MOQ_SUBSCRIBE
Definition internal/moq.h:42
@ IMQUIC_MOQ_SUBSCRIBE_ANNOUNCES_ERROR
Definition internal/moq.h:57
@ IMQUIC_MOQ_FETCH_OK
Definition internal/moq.h:63
@ IMQUIC_MOQ_TRACK_STATUS_REQUEST
Definition internal/moq.h:52
@ IMQUIC_MOQ_SERVER_SETUP_LEGACY
Definition internal/moq.h:68
@ IMQUIC_MOQ_UNSUBSCRIBE
Definition internal/moq.h:49
@ IMQUIC_MOQ_FETCH_ERROR
Definition internal/moq.h:64
@ IMQUIC_MOQ_ANNOUNCE_ERROR
Definition internal/moq.h:47
@ IMQUIC_MOQ_SUBSCRIBE_UPDATE
Definition internal/moq.h:41
@ IMQUIC_MOQ_UNANNOUNCE
Definition internal/moq.h:48
@ IMQUIC_MOQ_CLIENT_SETUP_LEGACY
Definition internal/moq.h:67
@ IMQUIC_MOQ_GOAWAY
Definition internal/moq.h:54
@ IMQUIC_MOQ_SERVER_SETUP
Definition internal/moq.h:66
@ IMQUIC_MOQ_SUBSCRIBE_ANNOUNCES_OK
Definition internal/moq.h:56
@ IMQUIC_MOQ_ANNOUNCE_OK
Definition internal/moq.h:46
@ IMQUIC_MOQ_ANNOUNCE
Definition internal/moq.h:45
@ IMQUIC_MOQ_SUBSCRIBE_DONE
Definition internal/moq.h:50
@ IMQUIC_MOQ_SUBSCRIBE_OK
Definition internal/moq.h:43
@ IMQUIC_MOQ_ANNOUNCE_CANCEL
Definition internal/moq.h:51
@ IMQUIC_MOQ_REQUESTS_BLOCKED
Definition internal/moq.h:60
@ IMQUIC_MOQ_TRACK_STATUS
Definition internal/moq.h:53
struct imquic_moq_setup_parameters imquic_moq_setup_parameters
MoQ setup parameters.
size_t imquic_moq_parse_subscribe_announces_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_ANNOUNCES_ERROR message.
Definition moq.c:2343
imquic_moq_delivery imquic_moq_data_message_type_to_delivery(imquic_moq_data_message_type type, imquic_moq_version version)
Helper function to return the imquic_moq_delivery mode associated to a imquic_moq_data_message_type t...
Definition moq.c:491
size_t imquic_moq_add_control_message(imquic_moq_context *moq, imquic_moq_message_type type, uint8_t *bytes, size_t blen, size_t poffset, size_t plen, size_t *start)
Helper method to put a message header and a payload together.
Definition moq.c:3819
size_t imquic_moq_add_fetch_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id)
Helper method to add an FETCH_CANCEL message to a buffer.
Definition moq.c:4788
imquic_moq_group_order
Group ordering for FETCH.
Definition internal/moq.h:184
@ IMQUIC_MOQ_ORDERING_DESCENDING
Definition internal/moq.h:187
@ IMQUIC_MOQ_ORDERING_ASCENDING
Definition internal/moq.h:186
@ IMQUIC_MOQ_ORDERING_ORIGINAL
Definition internal/moq.h:185
size_t imquic_moq_add_object_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t track_alias, uint64_t group_id, uint64_t object_id, uint64_t object_status, uint8_t priority, uint8_t *payload, size_t plen, size_t extensions_count, uint8_t *extensions, size_t elen)
Helper to add an OBJECT_DATAGRAM message to a buffer.
Definition moq.c:5028
size_t imquic_moq_parse_fetch(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a FETCH message.
Definition moq.c:2474
struct imquic_moq_buffer imquic_moq_buffer
MoQ buffer.
void imquic_moq_buffer_shift(imquic_moq_buffer *buffer, uint64_t length)
Move the data in the buffer back of a specific number of bytes.
Definition moq.c:718
void imquic_moq_qlog_fetch_object_parsed(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object)
Add a fetch_object_parsed event.
Definition moq.c:7093
size_t imquic_moq_add_subgroup_header(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t track_alias, uint64_t group_id, uint64_t subgroup_id, uint8_t priority)
Helper to add a SUBGROUP_HEADER message to a buffer (only after v06)
Definition moq.c:5136
size_t imquic_moq_add_stream_header_track_object(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t group_id, uint64_t object_id, uint64_t object_status, uint8_t *payload, size_t plen)
Helper to add an object to a buffer, formatted as expected for STREAM_HEADER_TRACK objects (so not al...
Definition moq.c:5108
void imquic_moq_qlog_stream_type_set(imquic_qlog *qlog, gboolean local, uint64_t stream_id, const char *type)
Add a stream_type_set event.
Definition moq.c:6921
void imquic_moq_deinit(void)
Uninitialize the native MoQ stack.
Definition moq.c:42
const char * imquic_moq_role_type_str(imquic_moq_role_type type)
Helper function to serialize to string the name of a imquic_moq_role_type value.
Definition moq.c:542
size_t imquic_moq_add_object_extensions(imquic_moq_context *moq, uint8_t *bytes, size_t blen, size_t extensions_count, uint8_t *extensions, size_t elen)
Helper method to add object extensions to a buffer.
Definition moq.c:5264
size_t imquic_moq_parse_client_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, gboolean legacy, uint8_t *error)
Helper to parse a CLIENT_SETUP message.
Definition moq.c:1074
const char * imquic_moq_message_type_str(imquic_moq_message_type type)
Helper function to serialize to string the name of a imquic_moq_message_type value.
Definition moq.c:407
size_t imquic_moq_parse_announce_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse an ANNOUNCE_OK message.
Definition moq.c:1417
struct imquic_moq_subscribe_parameters imquic_moq_subscribe_parameters
MoQ subscribe parameters.
size_t imquic_moq_add_fetch(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_fetch_type type, uint64_t request_id, uint64_t joining_request_id, uint64_t preceding_group_offset, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, uint8_t priority, imquic_moq_group_order group_order, uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, imquic_moq_subscribe_parameters *parameters)
Helper to add a FETCH message to a buffer.
Definition moq.c:4659
void imquic_moq_init(void)
Initialize the native MoQ stack at startup.
Definition moq.c:38
size_t imquic_moq_add_announce_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace, imquic_moq_announce_error_code error, const char *reason)
Helper method to add aN ANNOUNCE_CANCEL message to a buffer.
Definition moq.c:4161
const char * imquic_moq_fetch_type_str(imquic_moq_fetch_type type)
Helper function to serialize to string the name of a imquic_moq_fetch_type value.
Definition moq.c:585
size_t imquic_moq_parse_goaway(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a GOAWAY message.
Definition moq.c:3778
imquic_moq_data_message_type
MoQ data messages.
Definition internal/moq.h:76
@ IMQUIC_MOQ_SUBGROUP_HEADER_LEGACY
Definition internal/moq.h:82
@ IMQUIC_MOQ_FETCH_HEADER
Definition internal/moq.h:89
@ IMQUIC_MOQ_OBJECT_DATAGRAM
Definition internal/moq.h:77
@ IMQUIC_MOQ_SUBGROUP_HEADER_NOSGID
Definition internal/moq.h:86
@ IMQUIC_MOQ_SUBGROUP_HEADER_NOSGID_NOEXT
Definition internal/moq.h:85
@ IMQUIC_MOQ_SUBGROUP_HEADER_NOSGID0
Definition internal/moq.h:84
@ IMQUIC_MOQ_OBJECT_DATAGRAM_STATUS
Definition internal/moq.h:79
@ IMQUIC_MOQ_SUBGROUP_HEADER_NOSGID0_NOEXT
Definition internal/moq.h:83
@ IMQUIC_MOQ_STREAM_HEADER_TRACK
Definition internal/moq.h:81
@ IMQUIC_MOQ_SUBGROUP_HEADER
Definition internal/moq.h:88
@ IMQUIC_MOQ_OBJECT_DATAGRAM_STATUS_NOEXT
Definition internal/moq.h:80
@ IMQUIC_MOQ_OBJECT_DATAGRAM_NOEXT
Definition internal/moq.h:78
@ IMQUIC_MOQ_SUBGROUP_HEADER_NOEXT
Definition internal/moq.h:87
void imquic_moq_qlog_subgroup_object_created(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object)
Add a subgroup_object_created event.
Definition moq.c:7020
size_t imquic_moq_parse_unsubscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse an UNSUBSCRIBE message.
Definition moq.c:2083
size_t imquic_moq_setup_parameters_serialize(imquic_moq_context *moq, imquic_moq_setup_parameters *parameters, uint8_t *bytes, size_t blen, uint8_t *params_num)
Helper to serialize a imquic_moq_setup_parameters set to a buffer.
Definition moq.c:614
size_t imquic_moq_parse_subscribe_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_ERROR message.
Definition moq.c:2024
void imquic_moq_new_connection(imquic_connection *conn, void *user_data)
Callback the core invokes when a new QUIC connection using MoQ is available.
Definition moq.c:51
size_t imquic_moq_add_announce(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_subscribe_parameters *parameters)
Helper method to add an ANNOUNCE message to a buffer.
Definition moq.c:3951
void imquic_moq_qlog_fetch_object_created(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object)
Add a fetch_object_created event.
Definition moq.c:7076
size_t imquic_moq_parse_announce(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse an ANNOUNCE message.
Definition moq.c:1339
imquic_moq_role_type
MoQ roles.
Definition internal/moq.h:129
@ IMQUIC_MOQ_ROLE_PUBSUB
Definition internal/moq.h:133
@ IMQUIC_MOQ_ROLE_PUBLISHER
Definition internal/moq.h:131
@ IMQUIC_MOQ_ROLE_ENDPOINT
Definition internal/moq.h:130
@ IMQUIC_MOQ_ROLE_SUBSCRIBER
Definition internal/moq.h:132
size_t imquic_moq_parse_subscribe_done(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_DONE message.
Definition moq.c:2118
void imquic_moq_qlog_object_datagram_created(imquic_qlog *qlog, imquic_moq_object *object)
Add a object_datagram_created event.
Definition moq.c:6932
size_t imquic_moq_add_subscribe_announces_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace)
Helper method to add a SUBSCRIBE_ANNOUNCES_OK message to a buffer.
Definition moq.c:4520
void imquic_qlog_moq_message_add_track(json_t *message, imquic_moq_name *track_name)
Helper to add a stringified track name to a message.
Definition moq.c:6814
imquic_moq_fetch_type
MoQ FETCH types.
Definition internal/moq.h:195
@ IMQUIC_MOQ_FETCH_STANDALONE
Definition internal/moq.h:196
@ IMQUIC_MOQ_FETCH_JOINING_ABSOLUTE
Definition internal/moq.h:198
@ IMQUIC_MOQ_FETCH_JOINING_RELATIVE
Definition internal/moq.h:197
size_t imquic_moq_add_goaway(imquic_moq_context *moq, uint8_t *bytes, size_t blen, const char *new_session_uri)
Helper method to add a GOAWAY message to a buffer.
Definition moq.c:5237
size_t imquic_moq_parse_unsubscribe_announces(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse an UNSUBSCRIBE_ANNOUNCES message.
Definition moq.c:2426
int imquic_moq_parse_subgroup_header_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete)
Helper to parse a SUBGROUP_HEADER object.
Definition moq.c:3476
size_t imquic_moq_add_fetch_header(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id)
Helper to add a FETCH_HEADER message to a buffer (only after v07)
Definition moq.c:5185
size_t imquic_moq_add_subgroup_header_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t object_id, uint64_t object_status, uint8_t *payload, size_t plen, size_t extensions_count, uint8_t *extensions, size_t elen)
Helper to add an object to a buffer, formatted as expected for SUBGROUP_HEADER objects (so not all ID...
Definition moq.c:5159
size_t imquic_moq_parse_fetch_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a FETCH_ERROR message.
Definition moq.c:2821
size_t imquic_moq_add_track_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, uint64_t status_code, uint64_t last_group_id, uint64_t last_object_id, imquic_moq_subscribe_parameters *parameters)
Helper to add a TRACK_STATUS message to a buffer.
Definition moq.c:4950
size_t imquic_moq_parse_stream_header_track(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a STREAM_HEADER_TRACK message.
Definition moq.c:3309
void imquic_qlog_moq_message_add_subscribe_parameters(json_t *message, imquic_moq_subscribe_parameters *parameters, const char *name)
Helper to add a stringified array of subscribe parameters to a message.
Definition moq.c:6860
void imquic_qlog_moq_message_add_namespace(json_t *message, imquic_moq_namespace *track_namespace)
Helper to add a stringified namespace tuple array to a message.
Definition moq.c:6797
size_t imquic_moq_parse_track_status_request(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a TRACK_STATUS_REQUEST message.
Definition moq.c:2875
size_t imquic_moq_parse_fetch_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a FETCH_CANCEL message.
Definition moq.c:2711
size_t imquic_moq_parse_max_request_id(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a MAX_REQUEST_ID message.
Definition moq.c:1283
void imquic_moq_connection_gone(imquic_connection *conn)
Callback the core invokes when an existing MoQ connection is not available anymore.
Definition moq.c:184
size_t imquic_moq_parse_subscribe_announces(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_ANNOUNCES message.
Definition moq.c:2202
size_t imquic_moq_add_subscribe_done(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_sub_done_code status, uint64_t streams_count, const char *reason, gboolean content_exists, uint64_t final_group, uint64_t final_object)
Helper method to add a SUBSCRIBE_DONE message to a buffer.
Definition moq.c:4434
struct imquic_moq_context imquic_moq_context
MoQ context.
size_t imquic_moq_parse_object_datagram_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_data_message_type dtype, uint8_t *error)
Helper to parse an OBJECT_DATAGRAM_STATUS message.
Definition moq.c:3229
void imquic_moq_qlog_subgroup_header_created(imquic_qlog *qlog, imquic_moq_stream *stream)
Add a subgroup_header_created event.
Definition moq.c:6994
size_t imquic_moq_add_client_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, GList *supported_versions, imquic_moq_setup_parameters *parameters)
Helper method to add a CLIENT_SETUP message to a buffer.
Definition moq.c:3853
size_t imquic_moq_add_track_status_request(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, imquic_moq_subscribe_parameters *parameters)
Helper to add a TRACK_STATUS_REQUEST message to a buffer.
Definition moq.c:4883
size_t imquic_moq_add_subscribe_announces_error(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_subannc_error_code error, const char *reason)
Helper method to add a SUBSCRIBE_ANNOUNCES_ERRROR message to a buffer.
Definition moq.c:4565
size_t imquic_moq_add_announce_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace)
Helper method to add an ANNOUNCE_OK message to a buffer.
Definition moq.c:4004
size_t imquic_moq_parse_unannounce(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse an UNANNOUNCE message.
Definition moq.c:1567
const char * imquic_moq_data_message_type_str(imquic_moq_data_message_type type, imquic_moq_version version)
Helper function to serialize to string the name of a imquic_moq_data_message_type value.
Definition moq.c:466
size_t imquic_moq_add_unannounce(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace)
Helper method to add an UNANNOUNCE message to a buffer.
Definition moq.c:4117
size_t imquic_moq_parse_subscribe_update(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_UPDATE message.
Definition moq.c:1852
size_t imquic_moq_parse_object_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_data_message_type dtype, uint8_t *error)
Helper to parse an OBJECT_DATAGRAM message.
Definition moq.c:3090
size_t imquic_moq_add_stream_header_track(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t track_alias, uint8_t priority)
Helper to add a STREAM_HEADER_TRACK message to a buffer (only before v06)
Definition moq.c:5087
void imquic_moq_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 moq.c:172
size_t imquic_moq_add_subscribe_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t expires, imquic_moq_group_order group_order, gboolean content_exists, uint64_t largest_group_id, uint64_t largest_object_id, imquic_moq_subscribe_parameters *parameters)
Helper method to add a SUBSCRIBE_OK message to a buffer.
Definition moq.c:4348
void imquic_moq_qlog_fetch_header_created(imquic_qlog *qlog, imquic_moq_stream *stream)
Add a fetch_header_created event.
Definition moq.c:7056
void imquic_moq_qlog_control_message_created(imquic_qlog *qlog, uint64_t stream_id, size_t length, json_t *message)
Add a control_message_created event.
Definition moq.c:6891
imquic_moq_subscribe_parameter_type
MoQ subscribe parameter types.
Definition internal/moq.h:116
@ IMQUIC_MOQ_PARAM_DELIVERY_TIMEOUT_LEGACY
Definition internal/moq.h:120
@ IMQUIC_MOQ_PARAM_DELIVERY_TIMEOUT
Definition internal/moq.h:119
@ IMQUIC_MOQ_PARAM_AUTHORIZATION_INFO
Definition internal/moq.h:118
@ IMQUIC_MOQ_PARAM_MAX_CACHE_DURATION
Definition internal/moq.h:121
@ IMQUIC_MOQ_PARAM_AUTHORIZATION_TOKEN
Definition internal/moq.h:117
size_t imquic_moq_add_fetch_header_object(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t group_id, uint64_t subgroup_id, uint64_t object_id, uint8_t priority, uint64_t object_status, uint8_t *payload, size_t plen, size_t extensions_count, uint8_t *extensions, size_t elen)
Helper to add an object to a buffer, formatted as expected for FETCH_HEADER objects (so not all IDs) ...
Definition moq.c:5202
const char * imquic_moq_setup_parameter_type_str(imquic_moq_setup_parameter_type type)
Helper function to serialize to string the name of a imquic_moq_setup_parameter_type value.
Definition moq.c:513
int imquic_moq_parse_fetch_header_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete)
Helper to parse a FETCH_HEADER object.
Definition moq.c:3641
const char * imquic_moq_subscribe_parameter_type_str(imquic_moq_subscribe_parameter_type type)
Helper function to serialize to string the name of a imquic_moq_subscribe_parameter_type value.
Definition moq.c:528
void imquic_moq_qlog_object_datagram_parsed(imquic_qlog *qlog, imquic_moq_object *object)
Add a object_datagram_parsed event.
Definition moq.c:6947
size_t imquic_moq_parameter_add_int(imquic_moq_context *moq, uint8_t *bytes, size_t blen, int param, uint64_t number)
Helper to add a MoQ (setup or subscribe) parameter with a numeric value to a buffer.
Definition moq.c:5291
size_t imquic_moq_parse_fetch_ok(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a FETCH_OK message.
Definition moq.c:2751
size_t imquic_moq_parse_subscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE message.
Definition moq.c:1688
void imquic_moq_buffer_append(imquic_moq_buffer *buffer, uint8_t *bytes, uint64_t length)
Append data at the end of the buffer.
Definition moq.c:705
void imquic_moq_qlog_object_datagram_status_created(imquic_qlog *qlog, imquic_moq_object *object)
Add a object_datagram_status_created event.
Definition moq.c:6962
struct imquic_moq_stream imquic_moq_stream
MoQ stream.
size_t imquic_moq_add_unsubscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id)
Helper method to add an UNSUBSCRIBE message to a buffer.
Definition moq.c:4417
GMutex imquic_mutex
imquic mutex implementation
Definition mutex.h:18
QLOG support (headers)
Reference counter mechanism.
QUIC Connection.
Definition connection.h:114
MoQ buffer.
Definition internal/moq.h:206
uint64_t length
Size of the data currently in the buffer.
Definition internal/moq.h:210
uint8_t * bytes
Buffer containing the data.
Definition internal/moq.h:208
uint64_t size
Overall size of the buffer.
Definition internal/moq.h:212
MoQ public callbacks.
Definition internal/moq.h:1115
void(* incoming_object)(imquic_connection *conn, imquic_moq_object *object)
Callback function to be notified about incoming MoQ objects.
Definition internal/moq.h:1169
void(* announce_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_announce_error_code error_code, const char *reason)
Callback function to be notified about incoming ANNOUNCE_ERROR messages.
Definition internal/moq.h:1127
void(* incoming_announce_cancel)(imquic_connection *conn, imquic_moq_namespace *tns, imquic_moq_announce_error_code error_code, const char *reason)
Callback function to be notified about incoming ANNOUNCE_CANCEL messages.
Definition internal/moq.h:1123
void(* incoming_unannounce)(imquic_connection *conn, imquic_moq_namespace *tns)
Callback function to be notified about incoming UNANNOUNCE messages.
Definition internal/moq.h:1129
void(* new_connection)(imquic_connection *conn, void *user_data)
Callback function to be notified about new moQ connections.
Definition internal/moq.h:1117
void(* incoming_goaway)(imquic_connection *conn, const char *uri)
Callback function to be notified about incoming GOAWAY messages.
Definition internal/moq.h:1171
void(* incoming_track_status_request)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_name *tn)
Callback function to be notified about incoming TRACK_STATUS_REQUEST messages.
Definition internal/moq.h:1165
void(* fetch_accepted)(imquic_connection *conn, uint64_t request_id, gboolean descending, imquic_moq_location *largest)
Callback function to be notified about incoming FETCH_ACCEPTED messages.
Definition internal/moq.h:1161
void(* incoming_unsubscribe_announces)(imquic_connection *conn, imquic_moq_namespace *tns)
Callback function to be notified about incoming UNSUBSCRIBE_ANNOUNCES messages.
Definition internal/moq.h:1152
void(* incoming_track_status)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_name *tn, imquic_moq_track_status_code status_code, imquic_moq_location *largest)
Callback function to be notified about incoming TRACK_STATUS messages.
Definition internal/moq.h:1167
void(* incoming_unsubscribe)(imquic_connection *conn, uint64_t request_id)
Callback function to be notified about incoming UNBSUBSCRIBE messages.
Definition internal/moq.h:1142
void(* subscribe_announces_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns)
Callback function to be notified about incoming SUBSCRIBE_ANNOUNCES_ACCEPTED messages.
Definition internal/moq.h:1148
void(* requests_blocked)(imquic_connection *conn, uint64_t max_request_id)
Callback function to be notified about incoming REQUESTS_BLOCKED messages.
Definition internal/moq.h:1144
void(* incoming_subscribe)(imquic_connection *conn, uint64_t request_id, uint64_t track_alias, imquic_moq_namespace *tns, imquic_moq_name *tn, uint8_t priority, gboolean descending, gboolean forward, imquic_moq_filter_type filter_type, imquic_moq_location *start_location, imquic_moq_location *end_location, uint8_t *auth, size_t authlen)
Callback function to be notified about incoming SUBSCRIBE messages.
Definition internal/moq.h:1131
void(* subscribe_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_sub_done_code status_code, uint64_t streams_count, const char *reason)
Callback function to be notified about incoming SUBSCRIBE_DONE messages.
Definition internal/moq.h:1140
void(* incoming_joining_fetch)(imquic_connection *conn, uint64_t request_id, uint64_t joining_request_id, gboolean absolute, uint64_t joining_start, gboolean descending, uint8_t *auth, size_t authlen)
Definition internal/moq.h:1156
void(* subscribe_announces_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_subannc_error_code error_code, const char *reason)
Callback function to be notified about incoming SUBSCRIBE_ANNOUNCES_ERROR messages.
Definition internal/moq.h:1150
void(* subscribe_accepted)(imquic_connection *conn, uint64_t request_id, uint64_t expires, gboolean descending, imquic_moq_location *largest)
Callback function to be notified about incoming SUBSCRIBE_ACCEPTED messages.
Definition internal/moq.h:1134
void(* incoming_standalone_fetch)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_name *tn, gboolean descending, imquic_moq_fetch_range *range, uint8_t *auth, size_t authlen)
Callback function to be notified about incoming FETCH messages.
Definition internal/moq.h:1154
void(* subscribe_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_sub_error_code error_code, const char *reason, uint64_t track_alias)
Callback function to be notified about incoming SUBSCRIBE_ERROR messages.
Definition internal/moq.h:1136
void(* fetch_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_fetch_error_code error_code, const char *reason)
Callback function to be notified about incoming FETCH_ERROR messages.
Definition internal/moq.h:1163
void(* incoming_subscribe_announces)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, uint8_t *auth, size_t authlen)
Callback function to be notified about incoming SUBSCRIBE_ANNOUNCES messages.
Definition internal/moq.h:1146
void(* subscribe_updated)(imquic_connection *conn, uint64_t request_id, imquic_moq_location *start_location, uint64_t end_group, uint8_t priority, gboolean forward)
Callback function to be notified about incoming SUBSCRIBE_UPDATE messages.
Definition internal/moq.h:1138
void(* announce_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns)
Callback function to be notified about incoming ANNOUNCE_ACCEPTED messages.
Definition internal/moq.h:1125
void(* incoming_announce)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns)
Callback function to be notified about incoming ANNOUNCE messages.
Definition internal/moq.h:1121
void(* incoming_fetch_cancel)(imquic_connection *conn, uint64_t request_id)
Callback function to be notified about incoming FETCH_CANCEL messages.
Definition internal/moq.h:1159
void(* connection_gone)(imquic_connection *conn)
Callback function to be notified about MoQ connections being closed.
Definition internal/moq.h:1173
void(* moq_ready)(imquic_connection *conn)
Callback function to be notified when a MoQ connection is ready (setup performed on both ends)
Definition internal/moq.h:1119
MoQ context.
Definition internal/moq.h:237
volatile gint destroyed
Whether this instance has been destroyed (reference counting)
Definition internal/moq.h:277
imquic_moq_version version
Negotiated version.
Definition internal/moq.h:243
uint64_t next_request_id
Definition internal/moq.h:265
uint64_t control_stream_offset
Current offset of the control stream on the way out.
Definition internal/moq.h:257
uint64_t local_max_request_id
Definition internal/moq.h:267
gboolean version_set
Whether a version has been set.
Definition internal/moq.h:245
uint64_t control_stream_id
ID of the control stream.
Definition internal/moq.h:255
imquic_refcount ref
Reference counter.
Definition internal/moq.h:279
gboolean has_control_stream
Whether a MoQ control stream has been established.
Definition internal/moq.h:253
uint64_t max_auth_token_cache_size
Maximum Request IDs we can send and the one we accept.
Definition internal/moq.h:269
uint64_t max_request_id
Maximum Request IDs we can send and the one we accept.
Definition internal/moq.h:267
imquic_moq_role_type type
Role of this endpoint.
Definition internal/moq.h:247
GHashTable * subscriptions
Subscriptions this connection will send objects to, indexed by track_alias.
Definition internal/moq.h:261
uint64_t expected_request_id
Current Request IDs we expect and we can send.
Definition internal/moq.h:265
GHashTable * streams
QUIC streams handled by the stack.
Definition internal/moq.h:259
gboolean role_set
Whether a role has been set.
Definition internal/moq.h:249
gboolean is_server
Whether this is a QUIC server or client.
Definition internal/moq.h:251
imquic_mutex mutex
Mutex.
Definition internal/moq.h:273
uint64_t local_max_auth_token_cache_size
Definition internal/moq.h:269
imquic_connection * conn
Associated QUIC connection.
Definition internal/moq.h:239
GHashTable * subscriptions_by_id
Subscriptions this connection will send objects to, indexed by request_id.
Definition internal/moq.h:263
volatile gint connected
Whether we have established a connection.
Definition internal/moq.h:275
imquic_moq_buffer * buffer
Buffer to process incoming messages.
Definition internal/moq.h:271
GList * supported_versions
Peer versions.
Definition internal/moq.h:241
MoQ FETCH range (from where to where)
Definition imquic/moq.h:404
MoQ Group/Object couple (for ranges)
Definition imquic/moq.h:398
MoQ Track Name.
Definition imquic/moq.h:372
MoQ Track Namespace.
Definition imquic/moq.h:352
MoQ Object.
Definition imquic/moq.h:479
MoQ setup parameters.
Definition internal/moq.h:141
char path[256]
Value of the PATH parameter.
Definition internal/moq.h:149
gboolean max_request_id_set
Whether the MAX_REQUEST_ID parameter is set.
Definition internal/moq.h:151
imquic_moq_role_type role
Value of the ROLE parameter.
Definition internal/moq.h:145
gboolean max_auth_token_cache_size_set
Whether the MAX_AUTH_TOKEN_CACHE_SIZE parameter is set.
Definition internal/moq.h:155
gboolean role_set
Whether the ROLE parameter is set.
Definition internal/moq.h:143
uint64_t max_auth_token_cache_size
Value of the MAX_AUTH_TOKEN_CACHE_SIZE parameter.
Definition internal/moq.h:157
gboolean unknown
Whether there's unknown parameters.
Definition internal/moq.h:159
gboolean path_set
Whether the PATH parameter is set.
Definition internal/moq.h:147
uint64_t max_request_id
Value of the MAX_REQUEST_ID parameter.
Definition internal/moq.h:153
MoQ stream.
Definition internal/moq.h:283
uint64_t stream_offset
Current stream offset.
Definition internal/moq.h:303
uint64_t subgroup_id
Subgroup ID.
Definition internal/moq.h:295
uint8_t priority
Publisher priority.
Definition internal/moq.h:301
imquic_moq_object_status object_status
Object status.
Definition internal/moq.h:299
imquic_moq_data_message_type type
Delivery mode for this stream.
Definition internal/moq.h:285
imquic_moq_buffer * buffer
Buffer to process incoming messages/objects.
Definition internal/moq.h:305
uint64_t stream_id
QUIC stream ID.
Definition internal/moq.h:287
gboolean closed
Whether we closed this stream.
Definition internal/moq.h:309
uint64_t track_alias
Track alias.
Definition internal/moq.h:291
gboolean got_objects
Whether we got at least an object on this stream.
Definition internal/moq.h:307
uint64_t group_id
Group ID.
Definition internal/moq.h:293
uint64_t object_id
Object ID.
Definition internal/moq.h:297
uint64_t request_id
ID of the subscription.
Definition internal/moq.h:289
MoQ subscribe parameters.
Definition internal/moq.h:163
gboolean max_cache_duration_set
Whether the MAX_CACHE_DURATION parameter is set.
Definition internal/moq.h:175
uint64_t delivery_timeout
Value of the DELIVERY_TIMEOUT parameter.
Definition internal/moq.h:173
uint8_t auth_info[256]
Value of the AUTHORIZATION_INFO parameter.
Definition internal/moq.h:167
gboolean unknown
Whether there's unknown parameters.
Definition internal/moq.h:179
uint64_t max_cache_duration
Value of the MAX_CACHE_DURATION parameter.
Definition internal/moq.h:177
gboolean delivery_timeout_set
Whether the DELIVERY_TIMEOUT parameter is set.
Definition internal/moq.h:171
size_t auth_info_len
Size of the AUTHORIZATION_INFO parameter.
Definition internal/moq.h:169
gboolean auth_info_set
Whether the AUTHORIZATION_INFO parameter is set.
Definition internal/moq.h:165
MoQ subscription, whether this is a publisher or a subscriber.
Definition internal/moq.h:316
size_t streams_count
Count of how many streams were used for this subscription.
Definition internal/moq.h:328
uint64_t request_id
ID of the subscription.
Definition internal/moq.h:318
uint64_t track_alias
Track alias.
Definition internal/moq.h:320
imquic_moq_stream * stream
Stream for this subscription, in case it's a single one.
Definition internal/moq.h:324
gboolean fetch
Whether this is a FETCH.
Definition internal/moq.h:322
GHashTable * streams_by_subgroup
Streams for this subscription, indexed by subgroup.
Definition internal/moq.h:326
QLOG instance.
Definition qlog.h:50
Definition refcount.h:77
Generic utilities (headers)