Loading...
Searching...
No Matches
internal/moq.h
Go to the documentation of this file.
1
17
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 "buffer.h"
30#include "qlog.h"
31
32#define IMQUIC_MOQ 7171953
33
35void imquic_moq_init(void);
37void imquic_moq_deinit(void);
38
47 IMQUIC_MOQ_PUBLISH_NAMESPACE_DONE = 0x9, /* Deprecated in v17 */
48 IMQUIC_MOQ_UNSUBSCRIBE = 0xa, /* Deprecated in v17 */
50 IMQUIC_MOQ_PUBLISH_NAMESPACE_CANCEL = 0xc, /* Deprecated in v17 */
53 IMQUIC_MOQ_SUBSCRIBE_NAMESPACE = 0x50, /* Added in v18 */
54 IMQUIC_MOQ_SUBSCRIBE_NAMESPACE_v17 = 0x11, /* Deprecated in v18 */
55 IMQUIC_MOQ_SUBSCRIBE_TRACKS = 0x51, /* Added in v18 */
59 IMQUIC_MOQ_MAX_REQUEST_ID = 0x15, /* Deprecated in v17 */
60 IMQUIC_MOQ_REQUESTS_BLOCKED = 0x1A, /* Deprecated in v17 */
62 IMQUIC_MOQ_FETCH_CANCEL = 0x17, /* Deprecated in v17 */
65 IMQUIC_MOQ_CLIENT_SETUP = 0x20, /* Deprecated in v17 */
66 IMQUIC_MOQ_SERVER_SETUP = 0x21, /* Deprecated in v17 */
68 IMQUIC_MOQ_PUBLISH_OK = 0x1E, /* Deprecated in v18 */
69 IMQUIC_MOQ_PUBLISH_STATE_NOTIFY = 0x22, /* Added in v20 */
70 IMQUIC_MOQ_PSEUDO_REQUEST = 0x0, /* Pseudo request, only needed for FILL_PARAMETERS */
77
101 gboolean payload, gboolean prop, gboolean eog, gboolean oid, gboolean priority);
113 gboolean *payload, gboolean *prop, gboolean *eog, gboolean *oid, gboolean *priority, gboolean *violation);
119
152 gboolean subgroup, gboolean sgid0, gboolean prop, gboolean eog, gboolean priority, gboolean first_object);
164 gboolean *subgroup, gboolean *sgid0, gboolean *prop, gboolean *eog, gboolean *priority, gboolean *first_object, gboolean *violation);
176
202 imquic_moq_fetch_subgroup_type subgroup, gboolean oid, gboolean group, gboolean priority, gboolean prop,
203 gboolean datagram, gboolean end_ne_range, gboolean end_uk_range, gboolean end_to_range);
218 imquic_moq_fetch_subgroup_type *subgroup, gboolean *oid, gboolean *group, gboolean *priority, gboolean *prop,
219 gboolean *datagram, gboolean *end_ne_range, gboolean *end_uk_range, gboolean *end_to_range, gboolean *violation);
220
236
266
308
320
386
401
472
497imquic_moq_subscription *imquic_moq_subscription_create(uint64_t request_id, uint64_t track_alias);
501
505
517int imquic_moq_parse_message(imquic_moq_context *moq, uint64_t stream_id, uint8_t *bytes, size_t blen, gboolean complete, gboolean datagram);
525size_t imquic_moq_parse_client_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
533size_t imquic_moq_parse_server_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
540size_t imquic_moq_parse_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
548size_t imquic_moq_parse_max_request_id(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
556size_t imquic_moq_parse_requests_blocked(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
564size_t imquic_moq_parse_request_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
572size_t imquic_moq_parse_request_error(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
580size_t imquic_moq_parse_publish_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
588size_t imquic_moq_parse_publish_namespace_done(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
596size_t imquic_moq_parse_publish_namespace_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
604size_t imquic_moq_parse_publish(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
613size_t imquic_moq_parse_publish_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
621size_t imquic_moq_parse_subscribe(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
629size_t imquic_moq_parse_request_update(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
637size_t imquic_moq_parse_subscribe_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
645size_t imquic_moq_parse_unsubscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
653size_t imquic_moq_parse_publish_state_notify(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
661size_t imquic_moq_parse_publish_done(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
669size_t imquic_moq_parse_subscribe_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
677size_t imquic_moq_parse_subscribe_tracks(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
685size_t imquic_moq_parse_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
693size_t imquic_moq_parse_namespace_done(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
701size_t imquic_moq_parse_publish_skipped(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
709size_t imquic_moq_parse_fetch(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
717size_t imquic_moq_parse_fetch_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
725size_t imquic_moq_parse_fetch_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
733size_t imquic_moq_parse_track_status(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
741size_t imquic_moq_parse_object_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_datagram_message_type dtype, uint8_t *error);
749size_t imquic_moq_parse_object_datagram_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_datagram_message_type dtype, uint8_t *error);
758size_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);
767int imquic_moq_parse_subgroup_header_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete, uint8_t *error);
775size_t imquic_moq_parse_fetch_header(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
784int imquic_moq_parse_fetch_header_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete, uint8_t *error);
791size_t imquic_moq_parse_padding_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error);
798int imquic_moq_parse_padding_stream(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete, uint8_t *error);
806size_t imquic_moq_parse_goaway(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error);
808
812
819size_t imquic_moq_add_client_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
820 imquic_moq_setup_options *options);
828size_t imquic_moq_add_server_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
829 imquic_moq_setup_options *options);
836size_t imquic_moq_add_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
837 imquic_moq_setup_options *options);
845size_t imquic_moq_add_max_request_id(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t max_request_id);
853size_t imquic_moq_add_requests_blocked(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t max_request_id);
864 uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_request_parameters *parameters, GList *track_properties);
877 uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t error, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
888 uint8_t *bytes, size_t blen, uint64_t request_id,
889 imquic_moq_namespace *track_namespace, imquic_moq_request_parameters *parameters);
897size_t imquic_moq_add_publish_namespace_done(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id);
907size_t imquic_moq_add_publish_namespace_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id,
908 imquic_moq_request_error_code error, const char *reason);
922 uint8_t *bytes, size_t blen, uint64_t request_id,
923 imquic_moq_namespace *track_namespace, imquic_moq_track *track_name, uint64_t track_alias,
924 imquic_moq_request_parameters *parameters, GList *track_properties);
935 uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_request_parameters *parameters);
947 uint8_t *bytes, size_t blen, uint64_t request_id,
948 imquic_moq_namespace *track_namespace, imquic_moq_track *track_name, imquic_moq_request_parameters *parameters);
959 uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t sub_request_id, imquic_moq_request_parameters *parameters);
971 uint8_t *bytes, size_t blen, uint64_t request_id,
972 uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties);
980size_t imquic_moq_add_unsubscribe(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id);
990 uint8_t *bytes, size_t blen, imquic_moq_request_parameters *parameters);
1002 uint8_t *bytes, size_t blen, uint64_t request_id,
1003 imquic_moq_pub_done_code status, uint64_t streams_count, const char *reason);
1015 uint8_t *bytes, size_t blen, uint64_t request_id,
1016 imquic_moq_namespace *track_namespace, imquic_moq_subscribe_namespace_options subscribe_options, imquic_moq_request_parameters *parameters);
1027 uint8_t *bytes, size_t blen, uint64_t request_id,
1028 imquic_moq_namespace *track_namespace, imquic_moq_request_parameters *parameters);
1037 uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace_suffix);
1046 uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace_suffix);
1056 uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace_suffix, imquic_moq_track *track);
1072 uint8_t *bytes, size_t blen, imquic_moq_fetch_type type,
1073 uint64_t request_id, uint64_t joining_request_id, uint64_t preceding_group_offset,
1074 imquic_moq_namespace *track_namespace, imquic_moq_track *track_name,
1083size_t imquic_moq_add_fetch_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id);
1096 uint8_t *bytes, size_t blen, uint64_t request_id,
1097 uint8_t end_of_track, imquic_moq_location *end_location, imquic_moq_request_parameters *parameters, GList *track_properties);
1109 uint8_t *bytes, size_t blen, uint64_t request_id,
1110 imquic_moq_namespace *track_namespace, imquic_moq_track *track_name, imquic_moq_request_parameters *parameters);
1121 uint8_t *bytes, size_t blen, uint64_t request_id, const char *new_session_uri, uint64_t timeout);
1141size_t imquic_moq_add_object_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t track_alias,
1142 uint64_t group_id, uint64_t object_id, uint64_t object_status, gboolean priority_set, uint8_t priority,
1143 uint8_t *payload_prefix, size_t pplen, uint8_t *payload, size_t plen, uint8_t *properties, size_t prlen);
1158size_t imquic_moq_add_object_datagram_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1159 uint64_t track_alias, uint64_t group_id, uint64_t object_id, gboolean priority_set, uint8_t priority,
1160 uint64_t object_status, uint8_t *properties, size_t prlen);
1176size_t imquic_moq_add_subgroup_header(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen,
1177 uint64_t request_id, uint64_t track_alias, uint64_t group_id, uint64_t subgroup_id, gboolean priority_set, uint8_t priority);
1194 uint8_t *bytes, size_t blen, uint64_t object_id, uint64_t object_status,
1195 uint8_t *payload_prefix, size_t pplen, uint8_t *payload, size_t plen, uint8_t *properties, size_t prlen);
1205size_t imquic_moq_add_fetch_header(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id);
1224size_t imquic_moq_add_fetch_header_object(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1225 uint64_t flags, uint64_t group_id, uint64_t subgroup_id, uint64_t object_id, gboolean priority_set, uint8_t priority,
1226 uint8_t *payload_prefix, size_t pplen, uint8_t *payload, size_t plen, uint8_t *properties, size_t prlen);
1235size_t imquic_moq_add_padding(imquic_moq_context *moq, uint8_t *bytes, size_t blen, size_t padding, gboolean datagram);
1244size_t imquic_moq_add_properties(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1245 uint8_t *properties, size_t prlen, gboolean prefix);
1247
1251
1259size_t imquic_moq_setup_option_add_int(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1260 uint64_t opt, uint64_t prev, uint64_t number);
1270size_t imquic_moq_setup_option_add_data(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1271 uint64_t opt, uint64_t prev, uint8_t *buf, size_t buflen);
1281size_t imquic_moq_parse_setup_option(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1282 imquic_moq_setup_options *params, uint64_t *param_type, uint8_t *error);
1291 imquic_moq_setup_options *options,
1292 uint8_t *bytes, size_t blen, uint8_t *params_num);
1294
1298
1306size_t imquic_moq_parameter_add_varint(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1307 uint64_t param, uint64_t prev, uint64_t number);
1316size_t imquic_moq_parameter_add_uint8(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1317 uint64_t param, uint64_t prev, uint8_t number);
1326size_t imquic_moq_parameter_add_location(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1327 uint64_t param, uint64_t prev, imquic_moq_location *location);
1336size_t imquic_moq_parameter_add_location_filter(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1337 uint64_t param, uint64_t prev, imquic_moq_location_filter *location_filter);
1347size_t imquic_moq_parameter_add_data(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1348 uint64_t param, uint64_t prev, uint8_t *buf, size_t buflen);
1357size_t imquic_moq_parse_request_parameter(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1358 imquic_moq_request_parameters *params, uint64_t *param_type, uint8_t *error);
1369 uint8_t *bytes, size_t blen, uint8_t *params_num);
1379size_t imquic_moq_parse_request_parameters(imquic_moq_context *moq, uint8_t *bytes, size_t blen,
1380 imquic_moq_request_parameters *params, uint64_t *params_num, uint8_t *error);
1382
1384typedef struct imquic_moq_callbacks {
1386 void (* new_connection)(imquic_connection *conn, void *user_data);
1391 uint64_t (* incoming_moq_connection)(imquic_connection *conn, uint8_t *auth, size_t authlen);
1397 void (* incoming_publish_namespace_cancel)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason);
1399 void (* publish_namespace_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters);
1401 void (* publish_namespace_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1402 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1405 void (* publish_namespace_done)(imquic_connection *conn, uint64_t request_id);
1407 void (* incoming_publish)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn,
1408 uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties);
1410 void (* publish_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters);
1412 void (* publish_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1413 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1415 void (* incoming_subscribe)(imquic_connection *conn, uint64_t request_id,
1418 void (* subscribe_accepted)(imquic_connection *conn, uint64_t request_id, uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties);
1420 void (* subscribe_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1421 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1423 void (* request_updated)(imquic_connection *conn, uint64_t request_id, uint64_t sub_request_id, imquic_moq_request_parameters *parameters);
1425 void (* request_update_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters);
1427 void (* request_update_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1428 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1430 void (* publish_state_notify)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters);
1432 void (* publish_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_pub_done_code status_code, uint64_t streams_count, const char *reason);
1434 void (* incoming_unsubscribe)(imquic_connection *conn, uint64_t request_id);
1437 void (* requests_blocked)(imquic_connection *conn, uint64_t max_request_id);
1439 void (* incoming_subscribe_namespace)(imquic_connection *conn, uint64_t request_id,
1442 void (* subscribe_namespace_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters);
1444 void (* subscribe_namespace_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1445 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1447 void (* incoming_unsubscribe_namespace)(imquic_connection *conn, uint64_t request_id);
1449 void (* incoming_subscribe_tracks)(imquic_connection *conn, uint64_t request_id,
1452 void (* subscribe_tracks_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters);
1454 void (* subscribe_tracks_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1455 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1457 void (* incoming_unsubscribe_tracks)(imquic_connection *conn, uint64_t request_id);
1459 void (* incoming_namespace)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns);
1461 void (* incoming_namespace_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns);
1465 void (* incoming_fetch)(imquic_connection *conn, uint64_t request_id,
1467 void (* incoming_joining_fetch)(imquic_connection *conn, uint64_t request_id, uint64_t joining_request_id,
1468 gboolean absolute, uint64_t joining_start, imquic_moq_request_parameters *parameters);
1470 void (* incoming_fetch_cancel)(imquic_connection *conn, uint64_t request_id);
1472 void (* fetch_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_location *largest, imquic_moq_request_parameters *parameters, GList *track_properties);
1474 void (* fetch_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1475 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1477 void (* incoming_track_status)(imquic_connection *conn, uint64_t request_id,
1480 void (* track_status_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters, GList *track_properties);
1482 void (* track_status_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1483 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1487 void (* incoming_goaway)(imquic_connection *conn, const char *uri, uint64_t timeout);
1489 void (* incoming_request_goaway)(imquic_connection *conn, uint64_t request_id, const char *uri, uint64_t timeout);
1491 void (* connection_gone)(imquic_connection *conn, uint64_t error_code, const char *reason);
1493
1497
1501void imquic_moq_new_connection(imquic_connection *conn, void *user_data);
1508void imquic_moq_stream_incoming(imquic_connection *conn, uint64_t stream_id,
1509 uint8_t *bytes, uint64_t length, gboolean complete);
1514void imquic_moq_datagram_incoming(imquic_connection *conn, uint8_t *bytes, uint64_t length);
1519void imquic_moq_reset_stream_incoming(imquic_connection *conn, uint64_t stream_id, uint64_t error_code);
1524void imquic_moq_stop_sending_incoming(imquic_connection *conn, uint64_t stream_id, uint64_t error_code);
1529void imquic_moq_connection_gone(imquic_connection *conn, uint64_t error_code, const char *reason);
1531
1535
1539json_t *imquic_qlog_moq_message_prepare(const char *type);
1545void imquic_qlog_moq_message_add_namespace(json_t *message, imquic_moq_namespace *track_namespace, const char *name);
1550void imquic_qlog_moq_message_add_track(json_t *message, imquic_moq_track *track_name);
1556void imquic_qlog_moq_message_add_setup_options(json_t *message, imquic_moq_setup_options *options, const char *name);
1564 imquic_moq_request_parameters *parameters, const char *name);
1569void imquic_qlog_moq_message_add_properties(json_t *message, GList *properties, const char *name);
1576void imquic_moq_qlog_control_message_created(imquic_qlog *qlog, uint64_t stream_id, uint8_t *bytes, size_t length, json_t *message);
1583void imquic_moq_qlog_control_message_parsed(imquic_qlog *qlog, uint64_t stream_id, uint8_t *bytes, size_t length, json_t *message);
1589void imquic_moq_qlog_stream_type_set(imquic_qlog *qlog, gboolean local, uint64_t stream_id, const char *type);
1597void imquic_moq_qlog_stream_closed(imquic_qlog *qlog, gboolean local, uint64_t stream_id, const char *cause, uint64_t error_code);
1619void imquic_moq_qlog_subgroup_header_created(imquic_qlog *qlog, imquic_moq_stream *stream, uint8_t *bytes, size_t length);
1625void imquic_moq_qlog_subgroup_header_parsed(imquic_qlog *qlog, imquic_moq_stream *stream, uint8_t *bytes, size_t length);
1630void imquic_moq_qlog_subgroup_object_created(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object);
1635void imquic_moq_qlog_subgroup_object_parsed(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object);
1641void imquic_moq_qlog_fetch_header_created(imquic_qlog *qlog, imquic_moq_stream *stream, uint8_t *bytes, size_t length);
1647void imquic_moq_qlog_fetch_header_parsed(imquic_qlog *qlog, imquic_moq_stream *stream, uint8_t *bytes, size_t length);
1652void imquic_moq_qlog_fetch_object_created(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object);
1657void imquic_moq_qlog_fetch_object_parsed(imquic_qlog *qlog, uint64_t stream_id, imquic_moq_object *object);
1659
1660#endif
Buffer abstraction (headers).
imquic MoQ public interface (headers)
imquic_moq_object_status
MoQ Object status.
Definition imquic/moq.h:636
imquic_moq_request_error_code
Request error codes.
Definition imquic/moq.h:978
imquic_moq_version
Versions that can be negotiated.
Definition imquic/moq.h:303
imquic_moq_subscribe_namespace_options
Subscribe options for namespaces.
Definition imquic/moq.h:513
imquic_moq_pub_done_code
Publish done codes.
Definition imquic/moq.h:1009
imquic_moq_delivery
Ways of sending objects.
Definition imquic/moq.h:622
imquic public interface (headers)
size_t imquic_moq_add_request_update(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t sub_request_id, imquic_moq_request_parameters *parameters)
Helper method to add a REQUEST_UPDATE message to a buffer.
Definition moq.c:5431
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:9892
size_t imquic_moq_setup_options_serialize(imquic_moq_context *moq, imquic_moq_setup_options *options, uint8_t *bytes, size_t blen, uint8_t *params_num)
Helper to serialize a imquic_moq_setup_options set to a buffer.
Definition moq.c:1432
json_t * imquic_qlog_moq_message_prepare(const char *type)
Helper to create a new QLOG MoQT message.
Definition moq.c:9505
void imquic_moq_qlog_stream_closed(imquic_qlog *qlog, gboolean local, uint64_t stream_id, const char *cause, uint64_t error_code)
Add a stream_closed event.
Definition moq.c:9825
size_t imquic_moq_parse_publish_namespace_done(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PUBLISH_NAMESPACE_DONE message.
Definition moq.c:3127
void imquic_moq_qlog_control_message_created(imquic_qlog *qlog, uint64_t stream_id, uint8_t *bytes, size_t length, json_t *message)
Add a control_message_created event.
Definition moq.c:9780
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:2034
imquic_moq_request_parameter_type
MoQ request parameter types.
Definition internal/moq.h:238
@ IMQUIC_MOQ_REQUEST_PARAM_EXPIRES
Definition internal/moq.h:244
@ IMQUIC_MOQ_REQUEST_PARAM_FILL_TIMEOUT
Definition internal/moq.h:246
@ IMQUIC_MOQ_REQUEST_PARAM_PRIORITY_FILTER
Definition internal/moq.h:254
@ IMQUIC_MOQ_REQUEST_PARAM_GROUP_ORDER
Definition internal/moq.h:250
@ IMQUIC_MOQ_REQUEST_PARAM_OBJECT_DELIVERY_TIMEOUT
Definition internal/moq.h:239
@ IMQUIC_MOQ_REQUEST_PARAM_TRACK_NAMESPACE_PREFIX
Definition internal/moq.h:258
@ IMQUIC_MOQ_REQUEST_PARAM_OBJECT_FILTER
Definition internal/moq.h:253
@ IMQUIC_MOQ_REQUEST_PARAM_OBJECT_PROPERTY_FILTER
Definition internal/moq.h:255
@ IMQUIC_MOQ_REQUEST_PARAM_SUBGROUP_DELIVERY_TIMEOUT
Definition internal/moq.h:243
@ IMQUIC_MOQ_REQUEST_PARAM_LOCATION_FILTER
Definition internal/moq.h:249
@ IMQUIC_MOQ_REQUEST_PARAM_RENDEZVOUS_TIMEOUT
Definition internal/moq.h:242
@ IMQUIC_MOQ_REQUEST_PARAM_LARGEST_OBJECT
Definition internal/moq.h:245
@ IMQUIC_MOQ_REQUEST_PARAM_NEW_GROUP_REQUEST
Definition internal/moq.h:257
@ IMQUIC_MOQ_REQUEST_PARAM_FILL_PARAMETERS
Definition internal/moq.h:251
@ IMQUIC_MOQ_REQUEST_PARAM_SUBSCRIBER_PRIORITY
Definition internal/moq.h:248
@ IMQUIC_MOQ_REQUEST_PARAM_FORWARD
Definition internal/moq.h:247
@ IMQUIC_MOQ_REQUEST_PARAM_SUBGROUP_FILTER
Definition internal/moq.h:252
@ IMQUIC_MOQ_REQUEST_PARAM_AUTHORIZATION_TOKEN
Definition internal/moq.h:241
@ IMQUIC_MOQ_REQUEST_PARAM_TRACK_PROPERTY_FILTER
Definition internal/moq.h:256
@ IMQUIC_MOQ_REQUEST_PARAM_DELIVERY_TIMEOUT
Definition internal/moq.h:240
@ IMQUIC_MOQ_REQUEST_PARAM_INCLUDE_PROPERTIES
Definition internal/moq.h:259
void imquic_moq_qlog_subgroup_header_parsed(imquic_qlog *qlog, imquic_moq_stream *stream, uint8_t *bytes, size_t length)
Add a subgroup_header_parsed event.
Definition moq.c:9929
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:5115
size_t imquic_moq_parse_subscribe_tracks(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_TRACKS message.
Definition moq.c:3831
size_t imquic_moq_add_namespace_done(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace_suffix)
Helper method to add a NAMESPACE_DONE message to a buffer.
Definition moq.c:5658
size_t imquic_moq_add_publish_done(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_pub_done_code status, uint64_t streams_count, const char *reason)
Helper method to add a PUBLISH_DONE message to a buffer.
Definition moq.c:5539
size_t imquic_moq_parse_object_datagram_status(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_datagram_message_type dtype, uint8_t *error)
Helper to parse an OBJECT_DATAGRAM_STATUS message.
Definition moq.c:4467
size_t imquic_moq_parse_subscribe_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_NAMESPACE message.
Definition moq.c:3746
imquic_media_stream_request_state
MoQ stream request state.
Definition internal/moq.h:389
@ IMQUIC_MOQ_REQUEST_STATE_NEW
Definition internal/moq.h:390
@ IMQUIC_MOQ_REQUEST_STATE_SENT
Definition internal/moq.h:391
@ IMQUIC_MOQ_REQUEST_STATE_OK
Definition internal/moq.h:392
@ IMQUIC_MOQ_REQUEST_STATE_DONE
Definition internal/moq.h:395
@ IMQUIC_MOQ_REQUEST_STATE_UPDATE_SENT
Definition internal/moq.h:394
@ IMQUIC_MOQ_REQUEST_STATE_ERROR
Definition internal/moq.h:393
size_t imquic_moq_add_properties(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *properties, size_t prlen, gboolean prefix)
Helper method to add properties to a buffer.
Definition moq.c:6108
void imquic_moq_connection_gone(imquic_connection *conn, uint64_t error_code, const char *reason)
Callback the core invokes when an existing MoQ connection is not available anymore.
Definition moq.c:504
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:5135
uint8_t imquic_moq_data_message_type_from_subgroup_header(imquic_moq_version version, gboolean subgroup, gboolean sgid0, gboolean prop, gboolean eog, gboolean priority, gboolean first_object)
Helper function to return the type to use for SUBRGOUP_HEADER out of the individual properties.
Definition moq.c:858
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:9968
size_t imquic_moq_parse_publish_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PUBLISH_NAMESPACE message.
Definition moq.c:3057
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:1836
void imquic_moq_subscription_destroy(imquic_moq_subscription *moq_sub)
Destroy an existing MoQ subscription.
Definition moq.c:1846
gboolean imquic_moq_is_fetch_serialization_flags_valid(imquic_moq_version version, uint64_t flags)
Helper function to check if serialization flags used for FETCH are valid.
Definition moq.c:924
size_t imquic_moq_parameter_add_uint8(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t param, uint64_t prev, uint8_t number)
Helper to add a MoQ parameter with a numeric value to a buffer as a byte.
Definition moq.c:6312
void imquic_qlog_moq_message_add_properties(json_t *message, GList *properties, const char *name)
Helper to add a stringified array of propertie headers to a message.
Definition moq.c:9759
size_t imquic_moq_add_subscribe(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_track *track_name, imquic_moq_request_parameters *parameters)
Helper to add a SUBSCRIBE message to a buffer.
Definition moq.c:5395
size_t imquic_moq_add_goaway(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, const char *new_session_uri, uint64_t timeout)
Helper method to add a GOAWAY message to a buffer.
Definition moq.c:5869
void imquic_moq_stream_destroy(imquic_moq_stream *moq_stream)
Destroy an existing MoQ stream.
Definition moq.c:1872
size_t imquic_moq_add_request_error(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t error, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Helper method to add a REQUEST_ERROR message to a buffer.
Definition moq.c:5190
size_t imquic_moq_parse_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SETUP message.
Definition moq.c:2687
uint8_t imquic_moq_datagram_message_type_return(imquic_moq_version version, gboolean payload, gboolean prop, gboolean eog, gboolean oid, gboolean priority)
Helper function to return the imquic_moq_datagram_message_type value for OBJECT_DATAGRAM or OBJECT_DA...
Definition moq.c:797
void imquic_moq_qlog_fetch_header_parsed(imquic_qlog *qlog, imquic_moq_stream *stream, uint8_t *bytes, size_t length)
Add a fetch_header_parsed event.
Definition moq.c:10002
size_t imquic_moq_setup_option_add_data(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t opt, uint64_t prev, uint8_t *buf, size_t buflen)
Helper to add a MoQ setup option with generic data to a buffer.
Definition moq.c:6153
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:2768
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:4727
size_t imquic_moq_parse_padding_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PADDING_DATAGRAM message.
Definition moq.c:4927
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:4552
size_t imquic_moq_add_publish_skipped(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace_suffix, imquic_moq_track *track)
Helper method to add a PUBLISH_SKIPPED message to a buffer.
Definition moq.c:5679
uint64_t imquic_moq_generate_fetch_serialization_flags(imquic_moq_version version, imquic_moq_fetch_subgroup_type subgroup, gboolean oid, gboolean group, gboolean priority, gboolean prop, gboolean datagram, gboolean end_ne_range, gboolean end_uk_range, gboolean end_to_range)
Helper function to return the serialization flags to use for FETCH out of the individual properties.
Definition moq.c:930
imquic_moq_datagram_message_type
MoQ datagram messages.
Definition internal/moq.h:79
@ IMQUIC_MOQ_OBJECT_DATAGRAM
Definition internal/moq.h:80
@ IMQUIC_MOQ_OBJECT_DATAGRAM_RANGE_MAX
Definition internal/moq.h:83
@ IMQUIC_MOQ_PADDING_DATAGRAM
Definition internal/moq.h:84
@ IMQUIC_MOQ_OBJECT_DATAGRAM_RANGE_MIN
Definition internal/moq.h:82
@ IMQUIC_MOQ_OBJECT_DATAGRAM_STATUS
Definition internal/moq.h:81
size_t imquic_moq_add_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_setup_options *options)
Helper method to add a SETUP message to a buffer.
Definition moq.c:5095
gboolean imquic_moq_is_datagram_message_type_valid(imquic_moq_version version, uint8_t type)
Helper function to check if a type used for OBJECT_DATAGRAM or OBJECT_DATAGRAM_STATUS is valid.
Definition moq.c:793
const char * imquic_moq_message_type_str(imquic_moq_message_type type, imquic_moq_version version)
Helper function to serialize to string the name of a imquic_moq_message_type value.
Definition moq.c:710
void imquic_moq_qlog_control_message_parsed(imquic_qlog *qlog, uint64_t stream_id, uint8_t *bytes, size_t length, json_t *message)
Add a control_message_parsed event.
Definition moq.c:9797
size_t imquic_moq_add_subscribe_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_subscribe_namespace_options subscribe_options, imquic_moq_request_parameters *parameters)
Helper to add a SUBSCRIBE_NAMESPACE message to a buffer.
Definition moq.c:5575
size_t imquic_moq_add_track_status(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_track *track_name, imquic_moq_request_parameters *parameters)
Helper to add a TRACK_STATUS message to a buffer.
Definition moq.c:5837
void imquic_moq_stop_sending_incoming(imquic_connection *conn, uint64_t stream_id, uint64_t error_code)
Callback the core invokes when there's an incoming STOP_SENDING.
Definition moq.c:474
imquic_moq_message_type
MoQ messages.
Definition internal/moq.h:40
@ IMQUIC_MOQ_CLIENT_SETUP
Definition internal/moq.h:65
@ IMQUIC_MOQ_FETCH
Definition internal/moq.h:61
@ IMQUIC_MOQ_REQUEST_ERROR
Definition internal/moq.h:42
@ IMQUIC_MOQ_SETUP
Definition internal/moq.h:64
@ IMQUIC_MOQ_MAX_REQUEST_ID
Definition internal/moq.h:59
@ IMQUIC_MOQ_FETCH_CANCEL
Definition internal/moq.h:62
@ IMQUIC_MOQ_REQUEST_UPDATE
Definition internal/moq.h:43
@ IMQUIC_MOQ_SUBSCRIBE_NAMESPACE
Definition internal/moq.h:53
@ IMQUIC_MOQ_PSEUDO_REQUEST
Definition internal/moq.h:70
@ IMQUIC_MOQ_SUBSCRIBE
Definition internal/moq.h:44
@ IMQUIC_MOQ_SUBSCRIBE_TRACKS
Definition internal/moq.h:55
@ IMQUIC_MOQ_FETCH_OK
Definition internal/moq.h:63
@ IMQUIC_MOQ_PUBLISH_STATE_NOTIFY
Definition internal/moq.h:69
@ IMQUIC_MOQ_UNSUBSCRIBE
Definition internal/moq.h:48
@ IMQUIC_MOQ_REQUEST_OK
Definition internal/moq.h:41
@ IMQUIC_MOQ_PUBLISH_NAMESPACE
Definition internal/moq.h:46
@ IMQUIC_MOQ_GOAWAY
Definition internal/moq.h:52
@ IMQUIC_MOQ_PUBLISH_DONE
Definition internal/moq.h:49
@ IMQUIC_MOQ_NAMESPACE_DONE
Definition internal/moq.h:57
@ IMQUIC_MOQ_PUBLISH_OK
Definition internal/moq.h:68
@ IMQUIC_MOQ_SERVER_SETUP
Definition internal/moq.h:66
@ IMQUIC_MOQ_PUBLISH_SKIPPED
Definition internal/moq.h:58
@ IMQUIC_MOQ_SUBSCRIBE_NAMESPACE_v17
Definition internal/moq.h:54
@ IMQUIC_MOQ_PUBLISH
Definition internal/moq.h:67
@ IMQUIC_MOQ_PUBLISH_NAMESPACE_CANCEL
Definition internal/moq.h:50
@ IMQUIC_MOQ_PUBLISH_NAMESPACE_DONE
Definition internal/moq.h:47
@ IMQUIC_MOQ_SUBSCRIBE_OK
Definition internal/moq.h:45
@ IMQUIC_MOQ_NAMESPACE
Definition internal/moq.h:56
@ IMQUIC_MOQ_REQUESTS_BLOCKED
Definition internal/moq.h:60
@ IMQUIC_MOQ_TRACK_STATUS
Definition internal/moq.h:51
const char * imquic_moq_datagram_message_type_str(imquic_moq_datagram_message_type type, imquic_moq_version version)
Helper function to serialize to string the name of a imquic_moq_datagram_message_type value.
Definition moq.c:834
void imquic_moq_qlog_subgroup_header_created(imquic_qlog *qlog, imquic_moq_stream *stream, uint8_t *bytes, size_t length)
Add a subgroup_header_created event.
Definition moq.c:9911
size_t imquic_moq_add_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace_suffix)
Helper method to add a NAMESPACE_DONE message to a buffer.
Definition moq.c:5637
size_t imquic_moq_parse_namespace_done(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a NAMESPACE_DONE message.
Definition moq.c:3946
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:911
size_t imquic_moq_parse_object_datagram(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_datagram_message_type dtype, uint8_t *error)
Helper to parse an OBJECT_DATAGRAM message.
Definition moq.c:4385
size_t imquic_moq_add_fetch_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, uint8_t end_of_track, imquic_moq_location *end_location, imquic_moq_request_parameters *parameters, GList *track_properties)
Helper method to add a FETCH_OK message to a buffer.
Definition moq.c:5797
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, gboolean priority_set, uint8_t priority)
Helper to add a SUBGROUP_HEADER message to a buffer.
Definition moq.c:5980
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:5779
size_t imquic_moq_parse_request_parameter(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_request_parameters *params, uint64_t *param_type, uint8_t *error)
Helper method to parse a single MoQ subscribe parameter.
Definition moq.c:6448
const char * imquic_moq_request_parameter_type_str(imquic_moq_request_parameter_type type, imquic_moq_version version)
Helper function to serialize to string the name of a imquic_moq_request_parameter_type value.
Definition moq.c:1025
size_t imquic_moq_parse_request_parameters(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_request_parameters *params, uint64_t *params_num, uint8_t *error)
Helper method to parse a sbuffer to a imquic_moq_request_parameters.
Definition moq.c:6806
size_t imquic_moq_parse_request_error(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a REQUEST_ERROR message.
Definition moq.c:2908
size_t imquic_moq_add_publish_namespace_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_request_error_code error, const char *reason)
Helper method to add a PUBLISH_NAMESPACE_CANCEL message to a buffer.
Definition moq.c:5296
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:10036
size_t imquic_moq_add_padding(imquic_moq_context *moq, uint8_t *bytes, size_t blen, size_t padding, gboolean datagram)
Helper to add padding data to a buffer, formatted as expected for PADDING_STREAM or PADDING_DATAGRAM.
Definition moq.c:6093
int imquic_moq_parse_padding_stream(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete, uint8_t *error)
Helper to parse a PADDING_STREAM message.
Definition moq.c:4951
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:9814
void imquic_moq_deinit(void)
Uninitialize the native MoQ stack.
Definition moq.c:66
size_t imquic_moq_add_publish_namespace_done(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t request_id)
Helper method to add a PUBLISH_NAMESPACE_DONE message to a buffer.
Definition moq.c:5278
gboolean imquic_moq_is_data_message_type_valid(imquic_moq_version version, imquic_moq_data_message_type type)
Helper function to check if a type used for SUBRGOUP_HEADER is valid.
Definition moq.c:844
size_t imquic_moq_parse_fetch(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a FETCH message.
Definition moq.c:4015
void imquic_moq_init(void)
Initialize the native MoQ stack at startup.
Definition moq.c:61
const char * imquic_moq_setup_option_type_str(imquic_moq_setup_option_type type)
Helper function to serialize to string the name of a imquic_moq_setup_option_type value.
Definition moq.c:1002
imquic_moq_fetch_subgroup_type
MoQ FETCH subgroup flags.
Definition internal/moq.h:178
@ IMQUIC_MOQ_FETCH_SUBGROUP_ZERO
Definition internal/moq.h:179
@ IMQUIC_MOQ_FETCH_SUBGROUP_PREVIOUS
Definition internal/moq.h:180
@ IMQUIC_MOQ_FETCH_SUBGROUP_ID
Definition internal/moq.h:182
@ IMQUIC_MOQ_FETCH_SUBGROUP_PLUS_ONE
Definition internal/moq.h:181
void imquic_moq_datagram_message_type_parse(imquic_moq_version version, uint8_t type, gboolean *payload, gboolean *prop, gboolean *eog, gboolean *oid, gboolean *priority, gboolean *violation)
Helper function to parse a imquic_moq_datagram_message_type value for OBJECT_DATAGRAM or OBJECT_DATAG...
Definition moq.c:813
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:1183
size_t imquic_moq_parse_setup_option(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_setup_options *params, uint64_t *param_type, uint8_t *error)
Helper method to parse a MoQ setup parameter.
Definition moq.c:6180
size_t imquic_moq_setup_option_add_int(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t opt, uint64_t prev, uint64_t number)
Helper to add a MoQ setup option with a numeric value to a buffer.
Definition moq.c:6130
size_t imquic_moq_add_publish_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_request_parameters *parameters)
Helper method to add a PUBLISH_NAMESPACE message to a buffer.
Definition moq.c:5246
imquic_moq_data_message_type
MoQ STREAM data messages.
Definition internal/moq.h:121
@ IMQUIC_MOQ_SUBGROUP_HEADER_RANGE2_MIN
Definition internal/moq.h:126
@ IMQUIC_MOQ_SUBGROUP_HEADER_RANGE4_MAX
Definition internal/moq.h:131
@ IMQUIC_MOQ_SUBGROUP_HEADER_RANGE3_MIN
Definition internal/moq.h:128
@ IMQUIC_MOQ_FETCH_HEADER
Definition internal/moq.h:133
@ IMQUIC_MOQ_SUBGROUP_HEADER_RANGE1_MIN
Definition internal/moq.h:124
@ IMQUIC_MOQ_SUBGROUP_HEADER_RANGE1_MAX
Definition internal/moq.h:125
@ IMQUIC_MOQ_PADDING_STREAM
Definition internal/moq.h:135
@ IMQUIC_MOQ_SUBGROUP_HEADER_RANGE2_MAX
Definition internal/moq.h:127
@ IMQUIC_MOQ_SUBGROUP_HEADER_RANGE3_MAX
Definition internal/moq.h:129
@ IMQUIC_MOQ_SUBGROUP_HEADER
Definition internal/moq.h:123
@ IMQUIC_MOQ_SUBGROUP_HEADER_RANGE4_MIN
Definition internal/moq.h:130
size_t imquic_moq_add_server_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_setup_options *options)
Helper method to add a SERVER_SETUP message to a buffer.
Definition moq.c:5074
int imquic_moq_parse_fetch_header_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete, uint8_t *error)
Helper to parse a FETCH_HEADER object.
Definition moq.c:4778
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:9947
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:3593
size_t imquic_moq_parse_publish_namespace_cancel(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PUBLISH_NAMESPACE_CANCEL message.
Definition moq.c:3150
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:192
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:10015
imquic_moq_stream * imquic_moq_stream_create(void)
Create a new MoQ stream.
Definition moq.c:1865
size_t imquic_moq_parse_request_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a REQUEST_OK message.
Definition moq.c:2794
size_t imquic_moq_parameter_add_location_filter(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t param, uint64_t prev, imquic_moq_location_filter *location_filter)
Helper to add a MoQ parameter with a location filter to a buffer.
Definition moq.c:6354
void imquic_moq_stream_incoming(imquic_connection *conn, uint64_t stream_id, uint8_t *bytes, uint64_t length, gboolean complete)
Callback the core invokes when there's new incoming data on a STREAM.
Definition moq.c:327
size_t imquic_moq_parse_publish_state_notify(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PUBLISH_STATE_NOTIFY message.
Definition moq.c:3635
size_t imquic_moq_parse_subscribe_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE_OK message.
Definition moq.c:3526
size_t imquic_moq_parse_server_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SERVER_SETUP message.
Definition moq.c:2622
void imquic_moq_qlog_object_datagram_created(imquic_qlog *qlog, imquic_moq_object *object)
Add a object_datagram_created event.
Definition moq.c:9838
size_t imquic_moq_parse_publish(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PUBLISH message.
Definition moq.c:3197
imquic_moq_fetch_type
MoQ FETCH types.
Definition internal/moq.h:311
@ IMQUIC_MOQ_FETCH_STANDALONE
Definition internal/moq.h:312
@ IMQUIC_MOQ_FETCH_JOINING_ABSOLUTE
Definition internal/moq.h:314
@ IMQUIC_MOQ_FETCH_JOINING_RELATIVE
Definition internal/moq.h:313
size_t imquic_moq_add_request_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_request_parameters *parameters, GList *track_properties)
Helper method to add a REQUEST_OK message to a buffer.
Definition moq.c:5155
void imquic_qlog_moq_message_add_track(json_t *message, imquic_moq_track *track_name)
Helper to add a stringified track name to a message.
Definition moq.c:9530
size_t imquic_moq_request_parameters_serialize(imquic_moq_context *moq, imquic_moq_message_type request, imquic_moq_request_parameters *parameters, uint8_t *bytes, size_t blen, uint8_t *params_num)
Helper to serialize a imquic_moq_request_parameters set to a buffer.
Definition moq.c:1537
size_t imquic_moq_parse_namespace(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a NAMESPACE message.
Definition moq.c:3913
size_t imquic_moq_add_publish(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_track *track_name, uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties)
Helper to add a PUBLISH message to a buffer.
Definition moq.c:5325
size_t imquic_moq_parse_publish_skipped(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PUBLISH_SKIPPED message.
Definition moq.c:3979
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.
Definition moq.c:6036
size_t imquic_moq_parse_client_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a CLIENT_SETUP message.
Definition moq.c:2521
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:4188
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, gboolean priority_set, uint8_t priority, uint8_t *payload_prefix, size_t pplen, uint8_t *payload, size_t plen, uint8_t *properties, size_t prlen)
Helper to add an OBJECT_DATAGRAM message to a buffer.
Definition moq.c:5908
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:2742
void imquic_qlog_moq_message_add_request_parameters(json_t *message, imquic_moq_version version, imquic_moq_request_parameters *parameters, const char *name)
Helper to add a stringified array of subscribe parameters to a message.
Definition moq.c:9589
void imquic_qlog_moq_message_add_setup_options(json_t *message, imquic_moq_setup_options *options, const char *name)
Helper to add a stringified array of setup parameters to a message.
Definition moq.c:9540
void imquic_moq_reset_stream_incoming(imquic_connection *conn, uint64_t stream_id, uint64_t error_code)
Callback the core invokes when there's an incoming RESET_STREAM.
Definition moq.c:444
size_t imquic_moq_add_publish_state_notify(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, imquic_moq_request_parameters *parameters)
Helper method to add a PUBLISH_STATE_NOTIFY message to a buffer.
Definition moq.c:5517
size_t imquic_moq_add_subscribe_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties)
Helper method to add a SUBSCRIBE_OK message to a buffer.
Definition moq.c:5464
size_t imquic_moq_parse_publish_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PUBLISH_OK message.
Definition moq.c:3290
size_t imquic_moq_parse_goaway(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a GOAWAY message.
Definition moq.c:4980
size_t imquic_moq_add_fetch_header_object(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t flags, uint64_t group_id, uint64_t subgroup_id, uint64_t object_id, gboolean priority_set, uint8_t priority, uint8_t *payload_prefix, size_t pplen, uint8_t *payload, size_t plen, uint8_t *properties, size_t prlen)
Helper to add an object to a buffer, formatted as expected for FETCH_HEADER objects (so not all IDs).
Definition moq.c:6047
size_t imquic_moq_add_subscribe_tracks(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_namespace *track_namespace, imquic_moq_request_parameters *parameters)
Helper to add a SUBSCRIBE_TRACKS message to a buffer.
Definition moq.c:5610
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, gboolean priority_set, uint8_t priority, uint64_t object_status, uint8_t *properties, size_t prlen)
Helper to add an OBJECT_DATAGRAM_STATUS message to a buffer.
Definition moq.c:5948
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:901
size_t imquic_moq_add_publish_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint64_t request_id, imquic_moq_request_parameters *parameters)
Helper method to add a PUBLISH_OK message to a buffer.
Definition moq.c:5368
size_t imquic_moq_parse_publish_done(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a PUBLISH_DONE message.
Definition moq.c:3673
size_t imquic_moq_parse_track_status(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a TRACK_STATUS message.
Definition moq.c:4305
size_t imquic_moq_parameter_add_location(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t param, uint64_t prev, imquic_moq_location *location)
Helper to add a MoQ parameter with a location to a buffer.
Definition moq.c:6332
int imquic_moq_parse_subgroup_header_object(imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete, uint8_t *error)
Helper to parse a SUBGROUP_HEADER object.
Definition moq.c:4624
size_t imquic_moq_parse_fetch_ok(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a FETCH_OK message.
Definition moq.c:4224
const char * imquic_media_stream_request_state_str(imquic_media_stream_request_state state)
Helper function to serialize to string the name of a imquic_media_stream_request_state value.
Definition moq.c:774
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:385
size_t imquic_moq_add_fetch(imquic_moq_context *moq, imquic_moq_stream *moq_stream, 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_track *track_name, imquic_moq_location_range *range, imquic_moq_request_parameters *parameters)
Helper to add a FETCH message to a buffer.
Definition moq.c:5702
size_t imquic_moq_parameter_add_varint(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t param, uint64_t prev, uint64_t number)
Helper to add a MoQ parameter with a numeric value to a buffer as a varint.
Definition moq.c:6288
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_prefix, size_t pplen, uint8_t *payload, size_t plen, uint8_t *properties, size_t prlen)
Helper to add an object to a buffer, formatted as expected for SUBGROUP_HEADER objects (so not all ID...
Definition moq.c:6002
imquic_moq_setup_option_type
MoQ setup option type.
Definition internal/moq.h:222
@ IMQUIC_MOQ_SETUP_OPTION_MOQT_IMPLEMENTATION
Definition internal/moq.h:229
@ IMQUIC_MOQ_SETUP_OPTION_PATH
Definition internal/moq.h:223
@ IMQUIC_MOQ_SETUP_OPTION_MAX_REQUEST_UPDATES
Definition internal/moq.h:230
@ IMQUIC_MOQ_SETUP_OPTION_AUTHORITY
Definition internal/moq.h:227
@ IMQUIC_MOQ_SETUP_OPTION_MAX_AUTH_TOKEN_CACHE_SIZE
Definition internal/moq.h:226
@ IMQUIC_MOQ_SETUP_OPTION_MAX_FILTER_RANGES
Definition internal/moq.h:228
@ IMQUIC_MOQ_SETUP_OPTION_MAX_REQUEST_ID
Definition internal/moq.h:224
@ IMQUIC_MOQ_SETUP_OPTION_AUTHORIZATION_TOKEN
Definition internal/moq.h:225
size_t imquic_moq_parse_request_update(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a REQUEST_UPDATE message.
Definition moq.c:3434
void imquic_moq_qlog_fetch_header_created(imquic_qlog *qlog, imquic_moq_stream *stream, uint8_t *bytes, size_t length)
Add a fetch_header_created event.
Definition moq.c:9989
void imquic_moq_data_message_type_to_subgroup_header(imquic_moq_version version, uint8_t type, gboolean *subgroup, gboolean *sgid0, gboolean *prop, gboolean *eog, gboolean *priority, gboolean *first_object, gboolean *violation)
Helper function to parse a type value for SUBRGOUP_HEADER to the individual properties.
Definition moq.c:878
void imquic_moq_qlog_object_datagram_parsed(imquic_qlog *qlog, imquic_moq_object *object)
Add a object_datagram_parsed event.
Definition moq.c:9856
size_t imquic_moq_add_client_setup(imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_setup_options *options)
Helper method to add a CLIENT_SETUP message to a buffer.
Definition moq.c:5053
void imquic_qlog_moq_message_add_namespace(json_t *message, imquic_moq_namespace *track_namespace, const char *name)
Helper to add a stringified namespace tuple array to a message.
Definition moq.c:9513
size_t imquic_moq_parse_subscribe(imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
Helper to parse a SUBSCRIBE message.
Definition moq.c:3337
void imquic_moq_parse_fetch_serialization_flags(imquic_moq_version version, uint64_t flags, imquic_moq_fetch_subgroup_type *subgroup, gboolean *oid, gboolean *group, gboolean *priority, gboolean *prop, gboolean *datagram, gboolean *end_ne_range, gboolean *end_uk_range, gboolean *end_to_range, gboolean *violation)
Helper function to parse serialozation flags for FETCH to the individual properties.
Definition moq.c:958
size_t imquic_moq_parameter_add_data(imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t param, uint64_t prev, uint8_t *buf, size_t buflen)
Helper to add a MoQ parameter with generic data to a buffer.
Definition moq.c:6421
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:9873
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:5499
GMutex imquic_mutex
imquic mutex implementation
Definition mutex.h:18
QLOG support (headers).
Internal buffer.
Definition buffer.h:18
QUIC Connection.
Definition connection.h:38
MoQ public callbacks.
Definition internal/moq.h:1384
void(* subscribe_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Callback function to be notified about incoming SUBSCRIBE_ERROR messages.
Definition internal/moq.h:1420
void(* incoming_object)(imquic_connection *conn, imquic_moq_object *object)
Callback function to be notified about incoming MoQ objects.
Definition internal/moq.h:1485
void(* connection_gone)(imquic_connection *conn, uint64_t error_code, const char *reason)
Callback function to be notified about MoQ connections being closed.
Definition internal/moq.h:1491
void(* incoming_namespace)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns)
Callback function to be notified about incoming NAMESPACE messages.
Definition internal/moq.h:1459
void(* publish_namespace_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Callback function to be notified about incoming PUBLISH_NAMESPACE_ERROR messages.
Definition internal/moq.h:1401
void(* new_connection)(imquic_connection *conn, void *user_data)
Callback function to be notified about new QUIC connections, before MoQ has been involved.
Definition internal/moq.h:1386
void(* subscribe_namespace_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming SUBSCRIBE_NAMESPACE_ACCEPTED messages.
Definition internal/moq.h:1442
void(* incoming_goaway)(imquic_connection *conn, const char *uri, uint64_t timeout)
Callback function to be notified about incoming GOAWAY messages.
Definition internal/moq.h:1487
void(* track_status_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Callback function to be notified about incoming TRACK_STATUS_ERROR messages.
Definition internal/moq.h:1482
void(* track_status_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters, GList *track_properties)
Callback function to be notified about incoming TRACK_STATUS_ACCEPTED messages.
Definition internal/moq.h:1480
void(* incoming_publish)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn, uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties)
Callback function to be notified about incoming PUBLISH messages.
Definition internal/moq.h:1407
void(* incoming_subscribe_namespace)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_subscribe_namespace_options subscribe_options, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming SUBSCRIBE_NAMESPACE messages.
Definition internal/moq.h:1439
void(* incoming_publish_skipped)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn)
Callback function to be notified about incoming PUBLISH_SKIPPED messages.
Definition internal/moq.h:1463
void(* publish_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming PUBLISH_ACCEPTED messages.
Definition internal/moq.h:1410
void(* incoming_publish_namespace_cancel)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason)
Callback function to be notified about incoming PUBLISH_NAMESPACE_CANCEL messages,...
Definition internal/moq.h:1397
void(* incoming_track_status)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming TRACK_STATUS messages.
Definition internal/moq.h:1477
void(* incoming_unsubscribe_namespace)(imquic_connection *conn, uint64_t request_id)
Callback function to be notified about incoming UNSUBSCRIBE_NAMESPACE messages, or when the bidirecti...
Definition internal/moq.h:1447
void(* subscribe_accepted)(imquic_connection *conn, uint64_t request_id, uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties)
Callback function to be notified about incoming SUBSCRIBE_ACCEPTED messages.
Definition internal/moq.h:1418
void(* incoming_unsubscribe)(imquic_connection *conn, uint64_t request_id)
Callback function to be notified about incoming UNBSUBSCRIBE messages, or when the bidirectional stre...
Definition internal/moq.h:1434
void(* incoming_subscribe_tracks)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming SUBSCRIBE_TRACKS messages.
Definition internal/moq.h:1449
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:1437
void(* request_update_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Callback function to be notified about incoming errors to a previously REQUEST_UPDATE message.
Definition internal/moq.h:1427
void(* fetch_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Callback function to be notified about incoming FETCH_ERROR messages.
Definition internal/moq.h:1474
void(* publish_state_notify)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming PUBLISH_STATE_NOTIFY messages.
Definition internal/moq.h:1430
void(* fetch_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_location *largest, imquic_moq_request_parameters *parameters, GList *track_properties)
Callback function to be notified about incoming FETCH_ACCEPTED messages.
Definition internal/moq.h:1472
void(* subscribe_tracks_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Callback function to be notified when a SUBSCRIBE_TRACKS has been accepted.
Definition internal/moq.h:1452
void(* request_updated)(imquic_connection *conn, uint64_t request_id, uint64_t sub_request_id, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming REQUEST_UPDATE messages.
Definition internal/moq.h:1423
void(* request_update_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Callback function to be notified about an ACK to a previously sent REQUEST_UPDATE message.
Definition internal/moq.h:1425
void(* incoming_publish_namespace)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming PUBLISH_NAMESPACE messages.
Definition internal/moq.h:1395
void(* incoming_subscribe)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming SUBSCRIBE messages.
Definition internal/moq.h:1415
void(* incoming_joining_fetch)(imquic_connection *conn, uint64_t request_id, uint64_t joining_request_id, gboolean absolute, uint64_t joining_start, imquic_moq_request_parameters *parameters)
Definition internal/moq.h:1467
void(* incoming_request_goaway)(imquic_connection *conn, uint64_t request_id, const char *uri, uint64_t timeout)
Callback function to be notified about incoming requests GOAWAY messages.
Definition internal/moq.h:1489
void(* publish_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_pub_done_code status_code, uint64_t streams_count, const char *reason)
Callback function to be notified about incoming PUBLISH_DONE messages.
Definition internal/moq.h:1432
void(* publish_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Callback function to be notified about incoming PUBLISH_ERROR messages.
Definition internal/moq.h:1412
void(* incoming_fetch)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn, imquic_moq_location_range *range, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming FETCH messages.
Definition internal/moq.h:1465
uint64_t(* incoming_moq_connection)(imquic_connection *conn, uint8_t *auth, size_t authlen)
Callback function to be notified about incoming CLIENT_SETUP messages.
Definition internal/moq.h:1391
void(* subscribe_tracks_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Callback function to be notified when a SUBSCRIBE_TRACKS returned an error.
Definition internal/moq.h:1454
void(* incoming_unsubscribe_tracks)(imquic_connection *conn, uint64_t request_id)
Callback function to be notified the SUBSCRIBE_TRACKS bidirectional stream is closed.
Definition internal/moq.h:1457
void(* publish_namespace_done)(imquic_connection *conn, uint64_t request_id)
Callback function to be notified about incoming PUBLISH_NAMESPACE_DONE messages.
Definition internal/moq.h:1405
void(* incoming_namespace_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns)
Callback function to be notified about incoming NAMESPACE_DONE messages.
Definition internal/moq.h:1461
void(* incoming_fetch_cancel)(imquic_connection *conn, uint64_t request_id)
Callback function to be notified about incoming FETCH_CANCEL messages, or when the bidirectional stre...
Definition internal/moq.h:1470
void(* subscribe_namespace_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect)
Callback function to be notified about incoming SUBSCRIBE_NAMESPACE_ERROR messages.
Definition internal/moq.h:1444
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:1393
void(* publish_namespace_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Callback function to be notified about incoming PUBLISH_NAMESPACE_ACCEPTED messages.
Definition internal/moq.h:1399
MoQ context.
Definition internal/moq.h:322
volatile gint destroyed
Whether this instance has been destroyed (reference counting).
Definition internal/moq.h:382
uint64_t remote_control_stream_id
Definition internal/moq.h:344
imquic_moq_version version
Negotiated version.
Definition internal/moq.h:328
uint64_t next_request_id
Definition internal/moq.h:362
uint64_t max_filter_ranges
Maximum Filter ranges we can send and the one we accept.
Definition internal/moq.h:368
gboolean sent_setup
Whether we sent and received a SETUP.
Definition internal/moq.h:346
uint64_t local_max_request_updates
Definition internal/moq.h:370
uint64_t local_max_request_id
Definition internal/moq.h:364
uint64_t control_stream_id
ID(s) of the control stream (legacy bidirectional, or new unidirectional).
Definition internal/moq.h:344
size_t authlen
Size of the auth data to use when connecting (clients only).
Definition internal/moq.h:336
uint64_t max_request_updates
Maximum Request updates we can send and the one we accept.
Definition internal/moq.h:370
imquic_refcount ref
Reference counter.
Definition internal/moq.h:384
char * peer_implementation
MoQ implementation of our peer, if provided.
Definition internal/moq.h:332
GHashTable * fill_fetches_by_id
Subscriptions this connection will send objects to, indexed by request_id.
Definition internal/moq.h:356
gboolean has_control_stream
Whether a MoQ control stream has been established.
Definition internal/moq.h:342
uint64_t max_auth_token_cache_size
Maximum token cache size we can send and the one we accept.
Definition internal/moq.h:366
uint64_t max_request_id
Maximum Request IDs we can send and the one we accept.
Definition internal/moq.h:364
volatile gint check_pending
Check if it's time to handle pending streams.
Definition internal/moq.h:378
GHashTable * subscriptions
Subscriptions this connection will send objects to, indexed by track_alias.
Definition internal/moq.h:352
gboolean do_grease
Whether we should add GREASE to our SETUP options.
Definition internal/moq.h:330
gboolean recvd_setup
Definition internal/moq.h:346
uint64_t expected_request_id
Current Request IDs we expect and we can send.
Definition internal/moq.h:362
GHashTable * streams
QUIC streams handled by the stack.
Definition internal/moq.h:348
GHashTable * requests
Map of Request IDs and what they were for.
Definition internal/moq.h:358
uint8_t * auth
Auth data to use when connecting (clients only).
Definition internal/moq.h:334
GHashTable * streams_by_reqid
Map of request streams, indexed by Request ID.
Definition internal/moq.h:350
volatile gint got_goaway
Whether we have received a GOAWAY.
Definition internal/moq.h:380
gboolean auth_set
Whether the auth data has been set.
Definition internal/moq.h:338
imquic_buffer * buffer
Buffer to process incoming messages.
Definition internal/moq.h:372
gboolean is_server
Whether this is a QUIC server or client.
Definition internal/moq.h:340
imquic_mutex mutex
Mutex.
Definition internal/moq.h:374
uint64_t local_max_auth_token_cache_size
Definition internal/moq.h:366
GHashTable * update_requests
Map of Request IDs to Existing Request IDs, for updates.
Definition internal/moq.h:360
imquic_connection * conn
Associated QUIC connection.
Definition internal/moq.h:324
uint64_t local_max_filter_ranges
Definition internal/moq.h:368
GHashTable * subscriptions_by_id
Subscriptions this connection will send objects to, indexed by request_id.
Definition internal/moq.h:354
volatile gint connected
Whether we have established a connection.
Definition internal/moq.h:376
GList * supported_versions
Peer versions.
Definition internal/moq.h:326
MoQ location filter (new).
Definition imquic/moq.h:502
MoQ location range (from where to where, e.g., for FETCH).
Definition imquic/moq.h:493
MoQ Group/Object couple (for ranges).
Definition imquic/moq.h:487
MoQ Track Namespace.
Definition imquic/moq.h:336
MoQ Object.
Definition imquic/moq.h:735
MoQ Redirect Structure.
Definition imquic/moq.h:438
MoQ request parameters.
Definition imquic/moq.h:534
MoQ setup parameters.
Definition internal/moq.h:268
uint8_t auth_token[256]
Value of the AUTHORIZATION_TOKEN parameter.
Definition internal/moq.h:286
uint64_t max_request_updates
Value of the MAX_REQUEST_UPDATES parameter.
Definition internal/moq.h:304
gboolean moqt_implementation_set
Whether the MOQT_IMPLEMENTATION parameter is set.
Definition internal/moq.h:298
uint64_t max_auth_token_cache_size
Value of the MAX_AUTH_TOKEN_CACHE_SIZE parameter.
Definition internal/moq.h:282
gboolean unknown
Whether there's unknown parameters.
Definition internal/moq.h:306
char authority[256]
Value of the AUTHORITY parameter.
Definition internal/moq.h:292
gboolean max_request_updates_set
Whether the MAX_REQUEST_UPDATES parameter is set.
Definition internal/moq.h:302
gboolean authority_set
Whether the AUTHORITY parameter is set.
Definition internal/moq.h:290
uint64_t max_filter_ranges
Value of the MAX_FILTER_RANGES parameter.
Definition internal/moq.h:296
char path[256]
Value of the PATH parameter.
Definition internal/moq.h:272
size_t auth_token_len
Size of the AUTHORIZATION_TOKEN parameter.
Definition internal/moq.h:288
gboolean max_request_id_set
Whether the MAX_REQUEST_ID parameter is set.
Definition internal/moq.h:275
gboolean auth_token_set
Whether the AUTHORIZATION_TOKEN parameter is set.
Definition internal/moq.h:284
gboolean max_filter_ranges_set
Whether the MAX_FILTER_RANGES parameter is set.
Definition internal/moq.h:294
gboolean path_set
Whether the PATH parameter is set.
Definition internal/moq.h:270
uint64_t max_request_id
Value of the MAX_REQUEST_ID parameter.
Definition internal/moq.h:278
char moqt_implementation[256]
Value of the MOQT_IMPLEMENTATION parameter.
Definition internal/moq.h:300
gboolean max_auth_token_cache_size_set
Whether the MAX_AUTH_TOKEN_CACHE_SIZE parameter is set.
Definition internal/moq.h:280
MoQ stream.
Definition internal/moq.h:405
gboolean priority_set
Whether there is a publisher priority set.
Definition internal/moq.h:440
imquic_buffer * buffer
Buffer to process incoming messages/objects.
Definition internal/moq.h:446
uint64_t subgroup_id
Subgroup ID.
Definition internal/moq.h:429
uint64_t last_object_id
Last Object ID handled.
Definition internal/moq.h:454
uint64_t last_subgroup_id
Last Subgroup ID handled.
Definition internal/moq.h:452
uint8_t priority
Publisher priority.
Definition internal/moq.h:442
gboolean first_of_subgroup
Whether the first object in the stream contains the first object in the subgroup (added in v18).
Definition internal/moq.h:444
imquic_moq_object_status object_status
Object status.
Definition internal/moq.h:433
imquic_moq_message_type request_type
Definition internal/moq.h:409
gboolean request_sender
Definition internal/moq.h:411
gboolean fill_fetch
Whether this is a request stream with fill fetch semantics.
Definition internal/moq.h:436
imquic_refcount ref
Reference counter.
Definition internal/moq.h:464
uint8_t namespace_prefix_size
In case this is for SUBSCRIBE_NAMESPACE, how many tuples are in the namespace prefix.
Definition internal/moq.h:417
imquic_moq_data_message_type type
Delivery mode for this stream, in case it's used for objects.
Definition internal/moq.h:421
imquic_media_stream_request_state request_state
Definition internal/moq.h:413
uint64_t stream_id
QUIC stream ID.
Definition internal/moq.h:407
volatile gint destroyed
Whether this instance has been destroyed (reference counting).
Definition internal/moq.h:462
gboolean closed
Whether we closed this stream.
Definition internal/moq.h:458
uint64_t track_alias
Track alias.
Definition internal/moq.h:425
gboolean got_objects
Whether we got at least an object on this stream.
Definition internal/moq.h:448
uint64_t last_group_id
Last Group ID handled.
Definition internal/moq.h:450
GHashTable * namespaces
Map of namespaces we've notified about.
Definition internal/moq.h:419
imquic_mutex mutex
Mutex.
Definition internal/moq.h:460
uint8_t last_priority
Last priority handled.
Definition internal/moq.h:456
uint64_t update_request_id
Definition internal/moq.h:423
imquic_moq_namespace * namespace_prefix
In case this is for SUBSCRIBE_NAMESPACE, the namespace prefix.
Definition internal/moq.h:415
uint64_t group_id
Group ID.
Definition internal/moq.h:427
uint64_t object_id
Object ID.
Definition internal/moq.h:431
gboolean ascending
If this is a FETCH stream, whether it's in ascending or descending order.
Definition internal/moq.h:438
imquic_moq_namespace * last_tuple
Definition internal/moq.h:415
uint64_t request_id
ID of the request/subscription, and of the update if one was involved.
Definition internal/moq.h:423
MoQ subscription, whether this is a publisher or a subscriber.
Definition internal/moq.h:474
size_t streams_count
Count of how many streams were used for this subscription.
Definition internal/moq.h:491
gboolean ascending
If this is a FETCH stream, whether it's in ascending or descending order.
Definition internal/moq.h:485
uint64_t request_id
ID of the subscription.
Definition internal/moq.h:476
uint64_t track_alias
Track alias.
Definition internal/moq.h:478
imquic_moq_stream * stream
Stream for this subscription, in case it's a single one.
Definition internal/moq.h:487
gboolean fill_fetch
Whether this is a subscription with fill fetch semantics.
Definition internal/moq.h:483
gboolean fetch
Whether this is a FETCH.
Definition internal/moq.h:480
GHashTable * streams_by_subgroup
Streams for this subscription, indexed by subgroup.
Definition internal/moq.h:489
MoQ Track Name.
Definition imquic/moq.h:391
QLOG instance.
Definition qlog.h:26
Definition refcount.h:77
Generic utilities (headers).