Loading...
Searching...
No Matches
moq.h
Go to the documentation of this file.
1
291
292#ifndef IMQUIC_MOQ_H
293#define IMQUIC_MOQ_H
294
295#include "imquic.h"
296
297#include <jansson.h>
298
302
303typedef enum imquic_moq_version {
304 /* Base */
306 /* Draft version -16 */
309 /* Draft version -17 */
311 /* Draft version -18 */
313 /* Draft version -19 */
315 /* Draft version -20 */
317 /* Draft version -21 */
319 /* Draft version -22 */
322 /* Any version starting from v15: for client, it means offer all supported versions;
323 * for servers, it means accept the first supported offered version */
329const char *imquic_moq_version_str(imquic_moq_version version);
334
353const char *imquic_moq_namespace_str(imquic_moq_namespace *tns, char *buffer, size_t blen, gboolean tuple);
360imquic_moq_namespace *imquic_moq_namespace_from_str(const char *ns, uint8_t *tns_num);
383gboolean imquic_moq_namespace_is_valid(imquic_moq_namespace *tns, gboolean fail_if_empty, uint64_t *tns_num);
389
391typedef struct imquic_moq_track {
393 uint8_t *buffer;
395 size_t length;
403imquic_moq_track *imquic_moq_track_create(uint8_t *buffer, size_t blen);
404/* Helper to stringify a track name
405 * @param[in] tn The track name to stringify
406 * @param[out] buffer The buffer to write the string to
407 * @param[in] blen The size of the output buffer
408 * @returns A pointer to the output buffer, if successful, or NULL otherwise */
409const char *imquic_moq_track_str(imquic_moq_track *tn, char *buffer, size_t blen);
435
438typedef struct imquic_moq_redirect {
439 /* Connect URI */
441 /* Track Namespace */
443 /* Track Name */
446
457
470
485
491
499
510
522
525
620
634
648
653typedef struct imquic_moq_property {
655 uint32_t id;
658 union {
659 uint64_t number;
660 struct imquic_moq_property_data {
661 uint64_t length;
662 uint8_t *buffer;
666
715
722GList *imquic_moq_parse_properties(imquic_moq_version version, uint8_t *properties, size_t plen);
729size_t imquic_moq_build_properties(imquic_moq_version version, GList *properties, uint8_t *bytes, size_t blen);
730
780
784
796
818 uint8_t set_id, imquic_moq_property_type property, uint64_t start, uint64_t end);
822
827 GHashTable *filters_map;
830};
831
854gboolean imquic_moq_filters_match_track(imquic_moq_filters *filters, GList *properties);
859
863
872uint64_t imquic_read_moqint(imquic_moq_version version, uint8_t *bytes, size_t blen, uint8_t *length);
882uint8_t imquic_write_moqint(imquic_moq_version version, uint64_t number, uint8_t *bytes, size_t blen);
884
888
903
931int imquic_moq_parse_auth_token(imquic_moq_version version, uint8_t *bytes, size_t blen, imquic_moq_auth_token *token);
938size_t imquic_moq_build_auth_token(imquic_moq_version version, imquic_moq_auth_token *token, uint8_t *bytes, size_t blen);
940
944
976
1007
1025
1044
1048
1079imquic_server *imquic_create_moq_server(const char *name, ...);
1114imquic_client *imquic_create_moq_client(const char *name, ...);
1115
1127 void (* new_moq_connection)(imquic_connection *conn, void *user_data));
1137 uint64_t (* incoming_moq_connection)(imquic_connection *conn, uint8_t *auth, size_t authlen));
1144 void (* moq_ready)(imquic_connection *conn));
1150 void (* incoming_publish_namespace)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_request_parameters *parameters));
1160 void (* incoming_publish_namespace_cancel)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason));
1166 void (* publish_namespace_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters));
1172 void (* publish_namespace_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1173 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect));
1183 void (* publish_namespace_done)(imquic_connection *conn, uint64_t request_id));
1189 void (* incoming_publish)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn,
1190 uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties));
1196 void (* publish_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters));
1202 void (* publish_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1203 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect));
1209 void (* incoming_subscribe)(imquic_connection *conn, uint64_t request_id,
1216 void (* subscribe_accepted)(imquic_connection *conn, uint64_t request_id, uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties));
1222 void (* subscribe_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1223 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect));
1229 void (* request_updated)(imquic_connection *conn, uint64_t request_id, uint64_t sub_request_id, imquic_moq_request_parameters *parameters));
1235 void (* request_update_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters));
1241 void (* request_update_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1242 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect));
1248 void (* publish_state_notify)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters));
1254 void (* publish_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_pub_done_code status_code, uint64_t streams_count, const char *reason));
1263 void (* incoming_unsubscribe)(imquic_connection *conn, uint64_t request_id));
1270 void (* requests_blocked)(imquic_connection *conn, uint64_t max_request_id));
1276 void (* incoming_subscribe_namespace)(imquic_connection *conn, uint64_t request_id,
1283 void (* subscribe_namespace_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters));
1289 void (* subscribe_namespace_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1290 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect));
1299 void (* incoming_unsubscribe_namespace)(imquic_connection *conn, uint64_t request_id));
1305 void (* incoming_subscribe_tracks)(imquic_connection *conn, uint64_t request_id,
1312 void (* subscribe_tracks_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters));
1318 void (* subscribe_tracks_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1319 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect));
1328 void (* incoming_unsubscribe_tracks)(imquic_connection *conn, uint64_t request_id));
1334 void (* incoming_namespace)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns));
1340 void (* incoming_namespace_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns));
1346 void (* incoming_publish_skipped)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn));
1354 void (* incoming_fetch)(imquic_connection *conn, uint64_t request_id,
1362 void (* incoming_joining_fetch)(imquic_connection *conn, uint64_t request_id, uint64_t joining_request_id,
1363 gboolean absolute, uint64_t joining_start, imquic_moq_request_parameters *parameters));
1372 void (* incoming_fetch_cancel)(imquic_connection *conn, uint64_t request_id));
1378 void (* fetch_accepted)(imquic_connection *conn, uint64_t request_id,
1379 imquic_moq_location *largest, imquic_moq_request_parameters *parameters, GList *track_properties));
1385 void (* fetch_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1386 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect));
1392 void (* incoming_track_status)(imquic_connection *conn, uint64_t request_id,
1399 void (* track_status_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters, GList *track_properties));
1405 void (* track_status_error)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code,
1406 const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect));
1412 void (* incoming_object)(imquic_connection *conn, imquic_moq_object *object));
1418 void (* incoming_goaway)(imquic_connection *conn, const char *uri, uint64_t timeout));
1424 void (* incoming_request_goaway)(imquic_connection *conn, uint64_t request_id, const char *uri, uint64_t timeout));
1431 void (* moq_connection_gone)(imquic_connection *conn, uint64_t error_code, const char *reason));
1433
1445int imquic_moq_set_connection_auth(imquic_connection *conn, uint8_t *auth, size_t authlen);
1446
1456int imquic_moq_set_max_request_id(imquic_connection *conn, uint64_t max_request_id);
1457
1462
1468int imquic_moq_set_max_filter_ranges(imquic_connection *conn, uint64_t max_filter_ranges);
1469
1475
1483
1487/* Namespaces and subscriptions */
1502 imquic_moq_request_parameters *parameters);
1512 imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1528 uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn,
1529 uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties);
1544int imquic_moq_reject_publish(imquic_connection *conn, uint64_t request_id,
1545 imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1553int imquic_moq_subscribe(imquic_connection *conn, uint64_t request_id,
1562int imquic_moq_accept_subscribe(imquic_connection *conn, uint64_t request_id,
1563 uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties);
1572int imquic_moq_reject_subscribe(imquic_connection *conn, uint64_t request_id,
1573 imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1580int imquic_moq_update_request(imquic_connection *conn, uint64_t request_id,
1581 uint64_t sub_request_id, imquic_moq_request_parameters *parameters);
1588 imquic_moq_request_parameters *parameters);
1598 imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1606 imquic_moq_request_parameters *parameters);
1614int imquic_moq_publish_done(imquic_connection *conn, uint64_t request_id,
1615 imquic_moq_pub_done_code status_code, const char *reason);
1620int imquic_moq_unsubscribe(imquic_connection *conn, uint64_t request_id);
1636 imquic_moq_request_parameters *parameters);
1646 imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1660int imquic_moq_subscribe_tracks(imquic_connection *conn, uint64_t request_id,
1668 imquic_moq_request_parameters *parameters);
1678 imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1685int imquic_moq_unsubscribe_tracks(imquic_connection *conn, uint64_t request_id);
1728 uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn,
1741 uint64_t request_id, uint64_t joining_request_id,
1742 gboolean absolute, uint64_t joining_start, imquic_moq_request_parameters *parameters);
1750int imquic_moq_accept_fetch(imquic_connection *conn, uint64_t request_id,
1751 imquic_moq_location *largest, imquic_moq_request_parameters *parameters, GList *track_properties);
1760int imquic_moq_reject_fetch(imquic_connection *conn, uint64_t request_id,
1761 imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1767int imquic_moq_cancel_fetch(imquic_connection *conn, uint64_t request_id);
1775int imquic_moq_track_status(imquic_connection *conn, uint64_t request_id,
1784 imquic_moq_request_parameters *parameters, GList *track_properties);
1794 imquic_moq_request_error_code error_code, const char *reason, uint64_t retry_interval, imquic_moq_redirect *redirect);
1816int imquic_moq_send_padding(imquic_connection *conn, size_t padding, gboolean datagram);
1826int imquic_moq_goaway(imquic_connection *conn, const char *uri, uint64_t timeout);
1833int imquic_moq_request_goaway(imquic_connection *conn, uint64_t request_id, const char *uri, uint64_t timeout);
1835
1839
1848
1880
1884imquic_moq_catalog *imquic_moq_catalog_create(const char *version);
1893int imquic_moq_catalog_update(imquic_moq_catalog *catalog, const char *json);
1901 const char *track_name, const char *packaging, gboolean is_live);
1913 const char *track_namespace, const char *track_name);
1922/* Destroy an existing imquic_moq_catalog_track instance
1923 * @param track The imquic_moq_catalog_track instance to destroy */
1925/* Destroy an existing imquic_moq_catalog instance
1926 * @param catalog The imquic_moq_catalog instance to destroy */
1928
1930
1931#endif
imquic public interface (headers)
struct imquic_network_endpoint imquic_client
Definition imquic.h:183
struct imquic_network_endpoint imquic_endpoint
Definition imquic.h:184
struct imquic_network_endpoint imquic_server
Definition imquic.h:182
struct imquic_connection imquic_connection
Definition imquic.h:181
imquic_moq_filter_range * imquic_moq_filter_range_create(imquic_moq_filter_type type, uint8_t set_id, imquic_moq_property_type property, uint64_t start, uint64_t end)
Helper to create a filter range instance.
int imquic_moq_publish_namespace(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_request_parameters *parameters)
Function to send a PUBLISH_NAMESPACE request.
void imquic_moq_request_parameters_init_defaults(imquic_moq_request_parameters *parameters)
Helper method to initialize some defaults values (where applicable) for the supported parameters.
void imquic_set_incoming_subscribe_namespace_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when there's an incoming SUBSCRIBE_NAMESPACE request.
Definition imquic-moq.c:802
void imquic_set_publish_accepted_cb(imquic_endpoint *endpoint, void(*publish_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when a PUBLISH we previously sent was accepted.
Definition imquic-moq.c:666
const char * imquic_moq_object_status_str(imquic_moq_object_status status)
Helper function to serialize to string the name of a imquic_moq_object_status property.
Definition imquic-moq.c:1126
void imquic_set_publish_error_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when a PUBLISH we previously sent was rejected with an...
Definition imquic-moq.c:677
void imquic_set_request_updated_cb(imquic_endpoint *endpoint, void(*request_updated)(imquic_connection *conn, uint64_t request_id, uint64_t sub_request_id, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when an update is received for a request (e....
Definition imquic-moq.c:724
void imquic_set_subscribe_namespace_error_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when an SUBSCRIBE_NAMESPACE we previously sent was rej...
Definition imquic-moq.c:825
void imquic_set_incoming_publish_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when there's an incoming PUBLISH request.
Definition imquic-moq.c:654
void imquic_set_incoming_moq_connection_cb(imquic_endpoint *endpoint, uint64_t(*incoming_moq_connection)(imquic_connection *conn, uint8_t *auth, size_t authlen))
Configure the callback function to be notified, as a server, when a CLIENT_SETUP is received....
Definition imquic-moq.c:572
const char * imquic_moq_request_error_code_str(imquic_moq_request_error_code code)
Helper function to serialize to string the name of a imquic_moq_request_error_code value.
int imquic_moq_request_goaway(imquic_connection *conn, uint64_t request_id, const char *uri, uint64_t timeout)
Function to send a GOAWAY for an existing request.
imquic_moq_object_status
MoQ Object status.
Definition moq.h:636
@ IMQUIC_MOQ_END_OF_TRACK
End of track.
Definition moq.h:642
@ IMQUIC_MOQ_END_OF_GROUP
End of group.
Definition moq.h:640
@ IMQUIC_MOQ_NORMAL_OBJECT
Normal object.
Definition moq.h:638
void imquic_set_subscribe_tracks_accepted_cb(imquic_endpoint *endpoint, void(*subscribe_tracks_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when an SUBSCRIBE_TRACKS we previously sent was accept...
Definition imquic-moq.c:860
int imquic_moq_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)
Function to send a SUBSCRIBE_NAMESPACE request.
void imquic_set_incoming_unsubscribe_tracks_cb(imquic_endpoint *endpoint, void(*incoming_unsubscribe_tracks)(imquic_connection *conn, uint64_t request_id))
Configure the callback function to be notified when there's an incoming UNSUBSCRIBE_TRACKS request.
Definition imquic-moq.c:883
const char * imquic_moq_pub_done_code_str(imquic_moq_pub_done_code code)
Helper function to serialize to string the name of a imquic_moq_pub_done_code value.
int imquic_moq_reject_request_update(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)
Function to reject an incoming REQUEST_UPDATE request.
int imquic_moq_reject_track_status(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)
Function to reject an incoming TRACK_STATUS request.
void imquic_set_incoming_request_goaway_cb(imquic_endpoint *endpoint, void(*incoming_request_goaway)(imquic_connection *conn, uint64_t request_id, const char *uri, uint64_t timeout))
Configure the callback function to be notified when there's an incoming GOAWAY request associated wit...
Definition imquic-moq.c:1042
void imquic_set_track_status_accepted_cb(imquic_endpoint *endpoint, void(*track_status_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters, GList *track_properties))
Configure the callback function to be notified when a TRACK_STATUS we previously sent was accepted.
Definition imquic-moq.c:997
int imquic_moq_filters_add(imquic_moq_filters *filters, imquic_moq_filter_range *filter)
Helper to add a new filter range to a collection.
void imquic_set_publish_namespace_error_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when an PUBLISH_NAMESPACE we previously sent was rejec...
Definition imquic-moq.c:631
void imquic_set_requests_blocked_cb(imquic_endpoint *endpoint, void(*requests_blocked)(imquic_connection *conn, uint64_t max_request_id))
Configure the callback function to be notified when there's an incoming REQUESTS_BLOCKED request.
Definition imquic-moq.c:791
void imquic_set_incoming_goaway_cb(imquic_endpoint *endpoint, void(*incoming_goaway)(imquic_connection *conn, const char *uri, uint64_t timeout))
Configure the callback function to be notified when there's an incoming GOAWAY request for the whole ...
Definition imquic-moq.c:1031
const char * imquic_moq_location_filter_type_legacy_str(imquic_moq_location_filter_type_legacy type)
Helper function to serialize to string the name of a imquic_moq_location_filter_type_legacy value.
void imquic_set_incoming_object_cb(imquic_endpoint *endpoint, void(*incoming_object)(imquic_connection *conn, imquic_moq_object *object))
Configure the callback function to be notified when there's an incoming MoQ object,...
Definition imquic-moq.c:1020
imquic_moq_location_filter_type_legacy
MoQ filter type, for subscriptions.
Definition moq.h:460
@ IMQUIC_MOQ_FILTER_NEXT_GROUP_START
Definition moq.h:461
@ IMQUIC_MOQ_FILTER_ABSOLUTE_RANGE
Definition moq.h:464
@ IMQUIC_MOQ_FILTER_LARGEST_OBJECT
Definition moq.h:462
@ IMQUIC_MOQ_FILTER_ABSOLUTE_START
Definition moq.h:463
json_t * imquic_moq_catalog_serialize_obj(imquic_moq_catalog *catalog)
Helper to serialize a imquic_moq_catalog instance to a Jansson JSON object.
Definition imquic-moq.c:1380
imquic_moq_namespace * imquic_moq_namespace_duplicate(imquic_moq_namespace *tns)
Helper to duplicate a namespace.
Definition imquic-moq.c:397
void imquic_set_subscribe_namespace_accepted_cb(imquic_endpoint *endpoint, void(*subscribe_namespace_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when an SUBSCRIBE_NAMESPACE we previously sent was acc...
Definition imquic-moq.c:814
int imquic_moq_accept_subscribe(imquic_connection *conn, uint64_t request_id, uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties)
Function to accept an incoming SUBSCRIBE request.
int imquic_moq_subscribe_tracks(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_request_parameters *parameters)
Function to send a SUBSCRIBE_TRACKS request.
const char * imquic_moq_subscribe_namespace_options_str(imquic_moq_subscribe_namespace_options type)
Helper function to serialize to string the name of a imquic_moq_subscribe_namespace_options value.
int imquic_moq_reject_subscribe_namespace(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)
Function to reject an incoming SUBSCRIBE_NAMESPACE request.
void imquic_set_publish_namespace_done_cb(imquic_endpoint *endpoint, void(*publish_namespace_done)(imquic_connection *conn, uint64_t request_id))
Configure the callback function to be notified when there's an incoming PUBLISH_NAMESPACE_DONE reques...
Definition imquic-moq.c:643
int imquic_moq_publish_done(imquic_connection *conn, uint64_t request_id, imquic_moq_pub_done_code status_code, const char *reason)
Function to send a PUBLISH_DONE request.
imquic_moq_track * imquic_moq_track_from_str(const char *tn)
Helper to parse a serialized string track name to a imquic_moq_track instance.
Definition imquic-moq.c:489
imquic_moq_track * imquic_moq_track_duplicate(imquic_moq_track *tn)
Helper to duplicate a track name.
Definition imquic-moq.c:537
int imquic_moq_reject_fetch(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)
Function to reject an incoming FETCH request.
imquic_moq_filter_type
MoQ filter types.
Definition moq.h:785
@ IMQUIC_MOQ_FILTER_OBJECT_PROPERTY
Definition moq.h:789
@ IMQUIC_MOQ_FILTER_SUBGROUP
Definition moq.h:786
@ IMQUIC_MOQ_FILTER_TRACK_PROPERTY
Definition moq.h:790
@ IMQUIC_MOQ_FILTER_PRIORITY
Definition moq.h:788
@ IMQUIC_MOQ_FILTER_OBJECT
Definition moq.h:787
int imquic_moq_publish_namespace_done(imquic_connection *conn, uint64_t request_id)
Function to send a PUBLISH_NAMESPACE_DONE request.
imquic_moq_namespace * imquic_moq_namespace_from_str(const char *ns, uint8_t *tns_num)
Helper to parse a serialized string namespace to a imquic_moq_namespace tuple.
Definition imquic-moq.c:289
int imquic_moq_unsubscribe_tracks(imquic_connection *conn, uint64_t request_id)
Function to send a UNSUBSCRIBE_TRACKS request.
void imquic_set_incoming_subscribe_cb(imquic_endpoint *endpoint, void(*incoming_subscribe)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when there's an incoming SUBSCRIBE request.
Definition imquic-moq.c:689
int imquic_moq_unsubscribe_namespace(imquic_connection *conn, uint64_t request_id)
Function to send a UNSUBSCRIBE_NAMESPACE request.
int imquic_moq_goaway(imquic_connection *conn, const char *uri, uint64_t timeout)
Function to send a GOAWAY request for the whole connection.
void imquic_set_moq_ready_cb(imquic_endpoint *endpoint, void(*moq_ready)(imquic_connection *conn))
Configure the callback function to be notified when a MoQ connection has been successfully establishe...
Definition imquic-moq.c:587
imquic_moq_filters * imquic_moq_filters_duplicate(imquic_moq_filters *filters)
Helper to duplicate an existing collection of filters.
const char * imquic_moq_delivery_str(imquic_moq_delivery type)
Helper function to serialize to string the name of a imquic_moq_delivery property.
Definition imquic-moq.c:1112
gboolean imquic_moq_namespace_is_valid(imquic_moq_namespace *tns, gboolean fail_if_empty, uint64_t *tns_num)
Helper check if a imquic_moq_namespace instance is valid.
Definition imquic-moq.c:426
uint64_t imquic_moq_get_next_request_id(imquic_connection *conn)
Helper function to get the next Request ID we can use.
void imquic_set_incoming_unsubscribe_namespace_cb(imquic_endpoint *endpoint, void(*incoming_unsubscribe_namespace)(imquic_connection *conn, uint64_t request_id))
Configure the callback function to be notified when there's an incoming UNSUBSCRIBE_NAMESPACE request...
Definition imquic-moq.c:837
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.
int imquic_moq_publish_state_notify(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Function to send a PUBLISH_STATE_NOTIFY request.
const char * imquic_moq_auth_token_alias_type_str(imquic_moq_auth_token_alias_type type)
Helper function to serialize to string the name of a imquic_moq_auth_token_alias_type property.
void imquic_set_incoming_publish_skipped_cb(imquic_endpoint *endpoint, void(*incoming_publish_skipped)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn))
Configure the callback function to be notified when there's an incoming PUBLISH_SKIPPED request.
Definition imquic-moq.c:916
imquic_moq_catalog * imquic_moq_catalog_create(const char *version)
Helper to create a new empty imquic_moq_catalog instance.
Definition imquic-moq.c:1226
imquic_client * imquic_create_moq_client(const char *name,...)
Method to create a new MoQ client, using variable arguments to dictate what the client should do (e....
Definition imquic-moq.c:129
void imquic_set_request_update_error_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when a REQUEST_UPDATE we previously sent was rejected ...
Definition imquic-moq.c:746
void imquic_set_publish_state_notify_cb(imquic_endpoint *endpoint, void(*publish_state_notify)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when a PUBLISH_STATE_NOTIFY is received for one of our...
Definition imquic-moq.c:758
void imquic_set_publish_namespace_accepted_cb(imquic_endpoint *endpoint, void(*publish_namespace_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when an PUBLISH_NAMESPACE we previously sent was accep...
Definition imquic-moq.c:620
void imquic_moq_catalog_track_destroy(imquic_moq_catalog_track *track)
Definition imquic-moq.c:1426
imquic_moq_track * imquic_moq_track_create(uint8_t *buffer, size_t blen)
Helper to quickly create an imquic_moq_track instance out of an existing buffer.
Definition imquic-moq.c:462
int imquic_moq_cancel_fetch(imquic_connection *conn, uint64_t request_id)
Function to send a FETCH_CANCEL request (legacy) or close the stream associated with the FETCH subscr...
imquic_moq_reset_stream_code
RESET_STREAM error codes.
Definition moq.h:1027
@ IMQUIC_MOQ_RESET_MALFORMED_TRACK
Definition moq.h:1037
@ IMQUIC_MOQ_RESET_EXPIRED_AUTH_TOKEN
Definition moq.h:1035
@ IMQUIC_MOQ_RESET_CANCELLED
Definition moq.h:1029
@ IMQUIC_MOQ_RESET_UNKNOWN_OBJECT_STATUS
Definition moq.h:1034
@ IMQUIC_MOQ_RESET_INTERNAL_ERROR
Definition moq.h:1028
@ IMQUIC_MOQ_RESET_GOING_AWAY
Definition moq.h:1032
@ IMQUIC_MOQ_RESET_EXCESSIVE_LOAD
Definition moq.h:1036
@ IMQUIC_MOQ_RESET_SESSION_CLOSED
Definition moq.h:1031
@ IMQUIC_MOQ_RESET_DELIVERY_TIMEOUT
Definition moq.h:1030
@ IMQUIC_MOQ_RESET_TOO_FAR_BEHIND
Definition moq.h:1033
uint64_t imquic_read_moqint(imquic_moq_version version, uint8_t *bytes, size_t blen, uint8_t *length)
Read a variable size integer from a buffer.
void imquic_set_publish_done_cb(imquic_endpoint *endpoint, void(*publish_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_pub_done_code status_code, uint64_t streams_count, const char *reason))
Configure the callback function to be notified when a PUBLISH we received or a SUBSCRIBE we sent is n...
Definition imquic-moq.c:769
imquic_server * imquic_create_moq_server(const char *name,...)
Method to create a new MoQ server, using variable arguments to dictate what the server should do (e....
Definition imquic-moq.c:21
int imquic_moq_parse_auth_token(imquic_moq_version version, uint8_t *bytes, size_t blen, imquic_moq_auth_token *token)
Helper mode to parse an auth token buffer to a imquic_moq_auth_token instance.
size_t imquic_moq_build_properties(imquic_moq_version version, GList *properties, uint8_t *bytes, size_t blen)
Helper mode to craft a properties buffer out of a GList of imquic_moq_property.
imquic_moq_request_error_code
Request error codes.
Definition moq.h:978
@ IMQUIC_MOQ_REQERR_PREFIX_OVERLAP
Definition moq.h:995
@ IMQUIC_MOQ_REQERR_MALFORMED_TRACK
Definition moq.h:990
@ IMQUIC_MOQ_REQERR_GOING_AWAY
Definition moq.h:985
@ IMQUIC_MOQ_REQERR_INTERNAL_ERROR
Definition moq.h:979
@ IMQUIC_MOQ_REQERR_REDIRECT
Definition moq.h:999
@ IMQUIC_MOQ_REQERR_DOES_NOT_EXIST
Definition moq.h:988
@ IMQUIC_MOQ_REQERR_INVALID_RANGE
Definition moq.h:989
@ IMQUIC_MOQ_REQERR_UNINTERESTED
Definition moq.h:993
@ IMQUIC_MOQ_REQERR_DUPLICATE_SUBSCRIPTION
Definition moq.h:991
@ IMQUIC_MOQ_REQERR_TIMEOUT
Definition moq.h:981
@ IMQUIC_MOQ_REQERR_UNSUPPORTED_EXTENSION
Definition moq.h:998
@ IMQUIC_MOQ_REQERR_EXCESSIVE_LOAD
Definition moq.h:986
@ IMQUIC_MOQ_REQERR_INVALID_JOINING_REQUEST_ID
Definition moq.h:997
@ IMQUIC_MOQ_REQERR_MALFORMED_AUTH_TOKEN
Definition moq.h:983
@ IMQUIC_MOQ_REQERR_EXPIRED_AUTH_TOKEN
Definition moq.h:984
@ IMQUIC_MOQ_REQERR_INVALID_FILTER
Definition moq.h:1001
@ IMQUIC_MOQ_REQERR_UNAUTHORIZED
Definition moq.h:980
@ IMQUIC_MOQ_REQERR_CONFLICTING_FILTERS
Definition moq.h:1000
@ IMQUIC_MOQ_REQERR_NOT_SUPPORTED
Definition moq.h:982
@ IMQUIC_MOQ_REQERR_NAMESPACE_TOO_LARGE
Definition moq.h:996
void imquic_set_moq_connection_gone_cb(imquic_endpoint *endpoint, void(*moq_connection_gone)(imquic_connection *conn, uint64_t error_code, const char *reason))
Configure the callback function to be notified when an existing MoQ connection handled by this endpoi...
Definition imquic-moq.c:1053
void imquic_set_incoming_publish_namespace_cb(imquic_endpoint *endpoint, void(*incoming_publish_namespace)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when there's an incoming PUBLISH_NAMESPACE request.
Definition imquic-moq.c:598
int imquic_moq_reject_subscribe_tracks(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)
Function to reject an incoming SUBSCRIBE_TRACKS request.
void imquic_set_incoming_joining_fetch_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when there's an incoming joining FETCH request.
Definition imquic-moq.c:939
imquic_moq_group_order
Group ordering for tracks.
Definition moq.h:448
@ IMQUIC_MOQ_ORDERING_DESCENDING
Definition moq.h:451
@ IMQUIC_MOQ_ORDERING_ASCENDING
Definition moq.h:450
@ IMQUIC_MOQ_ORDERING_ORIGINAL
Definition moq.h:449
const char * imquic_moq_namespace_str(imquic_moq_namespace *tns, char *buffer, size_t blen, gboolean tuple)
Helper to stringify a namespace (optionally the whole tuple).
Definition imquic-moq.c:261
int imquic_moq_unsubscribe(imquic_connection *conn, uint64_t request_id)
Function to send a UNSUBSCRIBE request.
int imquic_moq_notify_namespace_done(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns)
Function to send a NAMESPACE_DONE request.
imquic_moq_catalog_track * imquic_moq_catalog_create_track(const char *track_namespace, const char *track_name, const char *packaging, gboolean is_live)
Helper to create a new empty imquic_moq_catalog_track instance.
Definition imquic-moq.c:1327
int imquic_moq_subscribe(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn, imquic_moq_request_parameters *parameters)
Function to send a SUBSCRIBE request.
imquic_moq_version imquic_moq_get_version(imquic_connection *conn)
Helper function to get the MoQ version associated with a connection.
int imquic_moq_send_object(imquic_connection *conn, imquic_moq_object *object)
Function to send a MoQ object.
uint64_t imquic_moq_get_remote_max_filter_ranges(imquic_connection *conn)
Helper function to get the maximum filter ranges of our remote peer.
int imquic_moq_accept_publish(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Function to accept an incoming PUBLISH request.
int imquic_moq_catalog_update(imquic_moq_catalog *catalog, const char *json)
Helper to update a imquic_moq_catalog instance with a JSON delta.
Definition imquic-moq.c:1317
int imquic_moq_accept_track_status(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters, GList *track_properties)
Function to accept an incoming TRACK_STATUS request.
void imquic_set_fetch_error_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when an FETCH we previously sent was rejected with an ...
Definition imquic-moq.c:973
const char * imquic_moq_track_str(imquic_moq_track *tn, char *buffer, size_t blen)
Definition imquic-moq.c:474
void imquic_moq_catalog_destroy(imquic_moq_catalog *catalog)
Definition imquic-moq.c:1438
void imquic_set_request_update_accepted_cb(imquic_endpoint *endpoint, void(*request_update_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when an OK is received for a REQUEST_UPDATE we previou...
Definition imquic-moq.c:735
imquic_moq_version
Versions that can be negotiated.
Definition moq.h:303
@ IMQUIC_MOQ_VERSION_MIN
Definition moq.h:307
@ IMQUIC_MOQ_VERSION_MAX
Definition moq.h:321
@ IMQUIC_MOQ_VERSION_16
Definition moq.h:308
@ IMQUIC_MOQ_VERSION_21
Definition moq.h:318
@ IMQUIC_MOQ_VERSION_22
Definition moq.h:320
@ IMQUIC_MOQ_VERSION_18
Definition moq.h:312
@ IMQUIC_MOQ_VERSION_20
Definition moq.h:316
@ IMQUIC_MOQ_VERSION_17
Definition moq.h:310
@ IMQUIC_MOQ_VERSION_19
Definition moq.h:314
@ IMQUIC_MOQ_VERSION_BASE
Definition moq.h:305
@ IMQUIC_MOQ_VERSION_ANY
Definition moq.h:324
const char * imquic_moq_version_str(imquic_moq_version version)
Helper function to serialize to string the name of a imquic_moq_version property.
Definition imquic-moq.c:1065
imquic_moq_auth_token_alias_type
MoQ Authorization Token Alias Type.
Definition moq.h:889
@ IMQUIC_MOQ_AUTH_TOKEN_DELETE
DELETE.
Definition moq.h:891
@ IMQUIC_MOQ_AUTH_TOKEN_USE_ALIAS
USE_ALIAS.
Definition moq.h:895
@ IMQUIC_MOQ_AUTH_TOKEN_USE_VALUE
USE_VALUE.
Definition moq.h:897
@ IMQUIC_MOQ_AUTH_TOKEN_REGISTER
REGISTER.
Definition moq.h:893
int imquic_moq_set_max_filter_ranges(imquic_connection *conn, uint64_t max_filter_ranges)
Helper function to set the maximum filter ranges a subscriber can send.
int imquic_moq_accept_publish_namespace(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Function to accept an incoming PUBLISH_NAMESPACE request.
int imquic_moq_notify_publish_skipped(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn)
Function to send a PUBLISH_SKIPPED request.
int imquic_moq_accept_subscribe_namespace(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Function to accept an incoming SUBSCRIBE_NAMESPACE request.
void imquic_set_subscribe_accepted_cb(imquic_endpoint *endpoint, void(*subscribe_accepted)(imquic_connection *conn, uint64_t request_id, uint64_t track_alias, imquic_moq_request_parameters *parameters, GList *track_properties))
Configure the callback function to be notified when a SUBSCRIBE we previously sent was accepted.
Definition imquic-moq.c:701
int imquic_moq_notify_namespace(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns)
Function to send a NAMESPACE request.
gboolean imquic_moq_filters_match_object(imquic_moq_filters *filters, imquic_moq_object *object)
Helper to check if a specific object matches a filters collection.
int imquic_moq_send_padding(imquic_connection *conn, size_t padding, gboolean datagram)
Function to send padding via MoQ.
imquic_moq_property_type
Known MoQ Property types.
Definition moq.h:670
@ IMQUIC_MOQ_LOC_CODEC_STRING
LOC Codec String.
Definition moq.h:704
@ IMQUIC_MOQ_SECOBJ_ENCRYPTED_LIST
Encrypted List (Secure Objects).
Definition moq.h:706
@ IMQUIC_MOQ_PROPERTY_DYNAMIC_GROUPS
Dynamic Groups.
Definition moq.h:684
@ IMQUIC_MOQ_LOC_TIMESCALE
LOC Timescale.
Definition moq.h:694
@ IMQUIC_MOQ_LOC_AUDIO_LEVEL
LOC Audio Level.
Definition moq.h:702
@ IMQUIC_MOQ_SECOBJ_PADDING
Padding (Secure Objects).
Definition moq.h:708
@ IMQUIC_MOQ_PROPERTY_PRIOR_GROUP_ID_GAP
Prior Group ID Gap.
Definition moq.h:686
@ IMQUIC_MOQ_PROPERTY_DELIVERY_TIMEOUT
Delivery Timeout (deprecated in v18).
Definition moq.h:674
@ IMQUIC_MOQ_PROPERTY_MAX_CACHE_DURATION
Max Cache Duration.
Definition moq.h:676
@ IMQUIC_MOQ_LOC_AUDIO_CONFIG
LOC Audio Config.
Definition moq.h:700
@ IMQUIC_MOQ_PROPERTY_IMMUTABLE_PROPERTIES
Immutable Properties.
Definition moq.h:690
@ IMQUIC_MOQ_PROPERTY_OBJECT_DELIVERY_TIMEOUT
Object Delivery Timeout (added in v18).
Definition moq.h:672
@ IMQUIC_MOQ_PROPERTY_SUBGROUP_DELIVERY_TIMEOUT
Subgroup Delivery Timeout (added in v18).
Definition moq.h:678
@ IMQUIC_MOQ_LOC_TIMESTAMP
LOC Timestamp.
Definition moq.h:692
@ IMQUIC_MOQ_PROPERTY_DEFAULT_PUBLISHER_PRIORITY
Default Publisher Priority.
Definition moq.h:680
@ IMQUIC_MOQ_PROPERTY_DEFAULT_GROUP_ORDER
Default Group Order.
Definition moq.h:682
@ IMQUIC_MOQ_PROPERTY_PRIOR_OBJECT_ID_GAP
Prior Object ID Gap.
Definition moq.h:688
@ IMQUIC_MOQ_LOC_VIDEO_CONFIG
LOC Video Config.
Definition moq.h:696
@ IMQUIC_MOQ_LOC_VIDEO_FRAME_MARKING
LOC Video Frame Marking.
Definition moq.h:698
int imquic_moq_set_max_request_id(imquic_connection *conn, uint64_t max_request_id)
Helper function to set the Maximum Request ID a subscriber can send.
int imquic_moq_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)
Function to send a joining FETCH request.
imquic_moq_error_code
Generic error codes.
Definition moq.h:945
@ IMQUIC_MOQ_DUPLICATE_AUTH_TOKEN_ALIAS
Definition moq.h:961
@ IMQUIC_MOQ_CONTROL_MESSAGE_TIMEOUT
Definition moq.h:958
@ IMQUIC_MOQ_EXPIRED_AUTH_TOKEN
Definition moq.h:965
@ IMQUIC_MOQ_INTERNAL_ERROR
Definition moq.h:947
@ IMQUIC_MOQ_KEYVALUE_FORMATTING_ERROR
Definition moq.h:952
@ IMQUIC_MOQ_MALFORMED_AUTHORITY
Definition moq.h:967
@ IMQUIC_MOQ_VERSION_NEGOTIATION_FAILED
Definition moq.h:962
@ IMQUIC_MOQ_INVALID_REQUEST_ID
Definition moq.h:950
@ IMQUIC_MOQ_INVALID_AUTHORITY
Definition moq.h:966
@ IMQUIC_MOQ_INVALID_PATH
Definition moq.h:955
@ IMQUIC_MOQ_DATA_STREAM_TIMEOUT
Definition moq.h:959
@ IMQUIC_MOQ_MALFORMED_AUTH_TOKEN
Definition moq.h:963
@ IMQUIC_MOQ_AUTH_TOKEN_CACHE_OVERFLOW
Definition moq.h:960
@ IMQUIC_MOQ_PROTOCOL_VIOLATION
Definition moq.h:949
@ IMQUIC_MOQ_DUPLICATE_TRACK_ALIAS
Definition moq.h:951
@ IMQUIC_MOQ_UNKNOWN_ERROR
Definition moq.h:970
@ IMQUIC_MOQ_UNAUTHORIZED
Definition moq.h:948
@ IMQUIC_MOQ_MALFORMED_PATH
Definition moq.h:956
@ IMQUIC_MOQ_NO_ERROR
Definition moq.h:946
@ IMQUIC_MOQ_GOAWAY_TIMEOUT
Definition moq.h:957
@ IMQUIC_MOQ_INVALID_REQUIRED_REQUEST_ID
Definition moq.h:953
@ IMQUIC_MOQ_UNKNOWN_AUTH_TOKEN_ALIAS
Definition moq.h:964
@ IMQUIC_MOQ_TOO_MANY_REQUEST_UPDATES
Definition moq.h:968
@ IMQUIC_MOQ_TOO_MANY_REQUESTS
Definition moq.h:954
void imquic_moq_filter_range_destroy(imquic_moq_filter_range *filter)
Helper to free a filter range instance.
int imquic_moq_reject_subscribe(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)
Function to reject an incoming SUBSCRIBE request.
size_t imquic_moq_build_auth_token(imquic_moq_version version, imquic_moq_auth_token *token, uint8_t *bytes, size_t blen)
Helper mode to craft an auth token buffer out of a imquic_moq_auth_token instance.
imquic_moq_filters * imquic_moq_filters_create(void)
Helper to create a new collection of filters.
char * imquic_moq_catalog_serialize(imquic_moq_catalog *catalog)
Helper to serialize a imquic_moq_catalog instance to a JSON string.
Definition imquic-moq.c:1371
void imquic_set_incoming_publish_namespace_cancel_cb(imquic_endpoint *endpoint, void(*incoming_publish_namespace_cancel)(imquic_connection *conn, uint64_t request_id, imquic_moq_request_error_code error_code, const char *reason))
Configure the callback function to be notified when there's an incoming PUBLISH_NAMESPACE_CANCEL requ...
Definition imquic-moq.c:609
int imquic_moq_catalog_add_track(imquic_moq_catalog *catalog, imquic_moq_catalog_track *track)
Helper to add a imquic_moq_catalog_track to a imquic_moq_catalog instance.
Definition imquic-moq.c:1339
int imquic_moq_accept_request_update(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Function to accept an incoming REQUEST_UPDATE request.
const char * imquic_moq_filter_type_str(imquic_moq_filter_type type)
Helper function to serialize to string the name of a imquic_moq_filter_type value.
uint8_t imquic_write_moqint(imquic_moq_version version, uint64_t number, uint8_t *bytes, size_t blen)
Write a variable size integer to a buffer.
void imquic_moq_filters_destroy(imquic_moq_filters *filters)
Helper to get rid of a imquic_moq_filters instance.
void imquic_set_fetch_accepted_cb(imquic_endpoint *endpoint, void(*fetch_accepted)(imquic_connection *conn, uint64_t request_id, imquic_moq_location *largest, imquic_moq_request_parameters *parameters, GList *track_properties))
Configure the callback function to be notified when an FETCH we previously sent was accepted.
Definition imquic-moq.c:962
const char * imquic_moq_get_remote_implementation(imquic_connection *conn)
Helper function to return the MoQ implementation name as a string, if provided by the peer of this co...
void imquic_moq_namespace_free(imquic_moq_namespace *tns)
Helper to free a imquic_moq_namespace instance.
Definition imquic-moq.c:450
int imquic_moq_reject_publish_namespace(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)
Function to reject an incoming PUBLISH_NAMESPACE request.
gboolean imquic_moq_track_equals(imquic_moq_track *first, imquic_moq_track *second)
Helper to check whether two track names are the sames.
Definition imquic-moq.c:523
void imquic_set_incoming_namespace_cb(imquic_endpoint *endpoint, void(*incoming_namespace)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns))
Configure the callback function to be notified when there's an incoming NAMESPACE request.
Definition imquic-moq.c:894
GList * imquic_moq_parse_properties(imquic_moq_version version, uint8_t *properties, size_t plen)
Helper mode to parse a properties buffer to a GList of imquic_moq_property.
int imquic_moq_set_connection_auth(imquic_connection *conn, uint8_t *auth, size_t authlen)
Method to provide credentials, as a client, on a new connection. If credentials need to provided,...
int imquic_moq_catalog_remove_track(imquic_moq_catalog *catalog, const char *track_namespace, const char *track_name)
Helper to remove a track from a imquic_moq_catalog instance.
Definition imquic-moq.c:1347
gboolean imquic_moq_track_is_valid(imquic_moq_track *tn)
Helper check if a imquic_moq_track instance is valid.
Definition imquic-moq.c:543
void imquic_set_subscribe_error_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when a SUBSCRIBE we previously sent was rejected with ...
Definition imquic-moq.c:712
const char * imquic_moq_location_filter_type_str(imquic_moq_location_filter_type type)
Helper function to serialize to string the name of a imquic_moq_location_filter_type value.
const char * imquic_moq_property_type_str(imquic_moq_version version, imquic_moq_property_type type)
Helper function to serialize to string the name of a imquic_moq_property_type value.
Definition imquic-moq.c:1140
void imquic_set_subscribe_tracks_error_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when an SUBSCRIBE_TRACKS we previously sent was reject...
Definition imquic-moq.c:871
imquic_moq_subscribe_namespace_options
Subscribe options for namespaces.
Definition moq.h:513
@ IMQUIC_MOQ_WANT_PUBLISH
Definition moq.h:514
@ IMQUIC_MOQ_WANT_PUBLISH_AND_NAMESPACE
Definition moq.h:516
@ IMQUIC_MOQ_WANT_NAMESPACE
Definition moq.h:515
int imquic_moq_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)
Function to send a FETCH request.
void imquic_set_incoming_fetch_cancel_cb(imquic_endpoint *endpoint, void(*incoming_fetch_cancel)(imquic_connection *conn, uint64_t request_id))
Configure the callback function to be notified when there's an incoming FETCH_CANCEL request.
Definition imquic-moq.c:951
imquic_moq_pub_done_code
Publish done codes.
Definition moq.h:1009
@ IMQUIC_MOQ_PUBDONE_TRACK_ENDED
Definition moq.h:1012
@ IMQUIC_MOQ_PUBDONE_UNAUTHORIZED
Definition moq.h:1011
@ IMQUIC_MOQ_PUBDONE_EXPIRED
Definition moq.h:1016
@ IMQUIC_MOQ_PUBDONE_GOING_AWAY
Definition moq.h:1014
@ IMQUIC_MOQ_PUBDONE_EXCESSIVE_LOAD
Definition moq.h:1018
@ IMQUIC_MOQ_PUBDONE_MALFORMED_TRACK
Definition moq.h:1019
@ IMQUIC_MOQ_PUBDONE_INTERNAL_ERROR
Definition moq.h:1010
@ IMQUIC_MOQ_PUBDONE_SUBSCRIPTION_ENDED
Definition moq.h:1013
@ IMQUIC_MOQ_PUBDONE_TOO_FAR_BEHIND
Definition moq.h:1015
@ IMQUIC_MOQ_PUBDONE_UPDATE_FAILED
Definition moq.h:1017
void imquic_set_new_moq_connection_cb(imquic_endpoint *endpoint, void(*new_moq_connection)(imquic_connection *conn, void *user_data))
Configure the callback function to be notified about new QUIC connections on the configured endpoint....
Definition imquic-moq.c:561
void imquic_moq_request_parameters_destroy(imquic_moq_request_parameters *parameters)
Helper to get rid of a imquic_moq_request_parameters instance.
imquic_moq_catalog * imquic_moq_catalog_parse(const char *json)
Helper to parse a JSON catalog to a imquic_moq_catalog instance.
Definition imquic-moq.c:1235
int imquic_moq_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)
Function to send a PUBLISH request.
const char * imquic_moq_reset_stream_code_str(imquic_moq_reset_stream_code code)
Helper function to serialize to string the name of a imquic_moq_reset_stream_code value.
int imquic_moq_accept_subscribe_tracks(imquic_connection *conn, uint64_t request_id, imquic_moq_request_parameters *parameters)
Function to accept an incoming SUBSCRIBE_TRACKS request.
int imquic_moq_reject_publish(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)
Function to reject an incoming PUBLISH request.
const char * imquic_moq_error_code_str(imquic_moq_error_code code)
Helper function to serialize to string the name of a imquic_moq_error_code value.
void imquic_set_incoming_unsubscribe_cb(imquic_endpoint *endpoint, void(*incoming_unsubscribe)(imquic_connection *conn, uint64_t request_id))
Configure the callback function to be notified when there's an incoming UNSUBSCRIBE request.
Definition imquic-moq.c:780
gboolean imquic_moq_namespace_contains(imquic_moq_namespace *parent, imquic_moq_namespace *child)
Helper to check whether a namespace is contained in another.
Definition imquic-moq.c:375
gboolean imquic_moq_filters_match_track(imquic_moq_filters *filters, GList *properties)
Helper to check if a specific track matches a filters collection.
void imquic_moq_track_free(imquic_moq_track *tn)
Helper to free a imquic_moq_track instance.
Definition imquic-moq.c:553
int imquic_moq_requests_blocked(imquic_connection *conn)
Function to send a REQUESTS_BLOCKED request.
void imquic_set_incoming_subscribe_tracks_cb(imquic_endpoint *endpoint, void(*incoming_subscribe_tracks)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when there's an incoming SUBSCRIBE_TRACKS request.
Definition imquic-moq.c:848
void imquic_set_track_status_error_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when a TRACK_STATUS we previously sent was rejected wi...
Definition imquic-moq.c:1008
int imquic_moq_accept_fetch(imquic_connection *conn, uint64_t request_id, imquic_moq_location *largest, imquic_moq_request_parameters *parameters, GList *track_properties)
Function to accept an incoming FETCH request.
imquic_moq_delivery
Ways of sending objects.
Definition moq.h:622
@ IMQUIC_MOQ_USE_FETCH
All fetched objects on the same STREAM.
Definition moq.h:628
@ IMQUIC_MOQ_USE_DATAGRAM
A single object on a DATAGRAM.
Definition moq.h:624
@ IMQUIC_MOQ_USE_SUBGROUP
All objects of the same subgroup on the same STREAM.
Definition moq.h:626
void imquic_set_incoming_track_status_cb(imquic_endpoint *endpoint, void(*incoming_track_status)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn, imquic_moq_request_parameters *parameters))
Configure the callback function to be notified when there's an incoming TRACK_STATUS request.
Definition imquic-moq.c:985
int imquic_moq_track_status(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns, imquic_moq_track *tn, imquic_moq_request_parameters *parameters)
Function to send a TRACK_STATUS request.
void imquic_set_incoming_fetch_cb(imquic_endpoint *endpoint, 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))
Configure the callback function to be notified when there's an incoming FETCH request.
Definition imquic-moq.c:927
void imquic_set_incoming_namespace_done_cb(imquic_endpoint *endpoint, void(*incoming_namespace_done)(imquic_connection *conn, uint64_t request_id, imquic_moq_namespace *tns))
Configure the callback function to be notified when there's an incoming NAMESPACE_DONE request.
Definition imquic-moq.c:905
int imquic_moq_update_request(imquic_connection *conn, uint64_t request_id, uint64_t sub_request_id, imquic_moq_request_parameters *parameters)
Function to send a REQUEST_UPDATE request.
imquic_moq_location_filter_type
MoQ filter type, for subscriptions.
Definition moq.h:473
@ IMQUIC_MOQ_LOCATION_FILTER_ABSOLUTE_RANGE
Definition moq.h:478
@ IMQUIC_MOQ_LOCATION_FILTER_NONE
Definition moq.h:474
@ IMQUIC_MOQ_LOCATION_FILTER_RELATIVE_START
Definition moq.h:475
@ IMQUIC_MOQ_LOCATION_FILTER_GROUP_END
Definition moq.h:477
@ IMQUIC_MOQ_LOCATION_FILTER_ABSOLUTE_START
Definition moq.h:476
@ IMQUIC_MOQ_LOCATION_FILTER_NEXT_OBJECT
Definition moq.h:479
gboolean imquic_moq_namespace_equals(imquic_moq_namespace *first, imquic_moq_namespace *second)
Helper to check whether two namespaces are the sames.
Definition imquic-moq.c:355
Token value, if any.
Definition moq.h:917
MoQ Authorization Token.
Definition moq.h:905
imquic_moq_auth_token_alias_type alias_type
Alias type.
Definition moq.h:907
uint64_t token_alias
Token alias, if any.
Definition moq.h:911
gboolean token_type_set
Whether there is a token type.
Definition moq.h:913
uint64_t token_type
Token type, if any.
Definition moq.h:915
struct imquic_moq_auth_token::imquic_moq_auth_token_value token_value
gboolean token_alias_set
Whether there is a token alias.
Definition moq.h:909
MoQ Catalog track.
Definition moq.h:1850
char * role
Role.
Definition moq.h:1862
uint32_t bitrate
Bitrate.
Definition moq.h:1878
uint16_t width
Width (video tracks only).
Definition moq.h:1872
char * track_name
Name of the track.
Definition moq.h:1852
char * packaging
Packaging.
Definition moq.h:1856
uint32_t samplerate
Sampling rate (audio tracks only).
Definition moq.h:1868
char * track_namespace
Namespace the track belongs to.
Definition moq.h:1854
char * codec
Codec.
Definition moq.h:1866
uint8_t framerate
Framerate (video tracks only).
Definition moq.h:1876
gboolean is_live
Whether the track is live or not.
Definition moq.h:1858
uint16_t height
Height (video tracks only).
Definition moq.h:1874
uint8_t render_group
Render group.
Definition moq.h:1864
uint64_t target_latency
Target latency.
Definition moq.h:1860
char * channel_config
Channel configuration (audio tracks only).
Definition moq.h:1870
MoQ Catalog.
Definition moq.h:1840
GList * tracks
Array of tracks in the catalog.
Definition moq.h:1846
int64_t generated_at
When the catalog was generated.
Definition moq.h:1844
char * version
Version of the catalog.
Definition moq.h:1842
Individual MoQ filter range.
Definition moq.h:798
uint8_t set_id
Set this filter range belongs to.
Definition moq.h:802
imquic_moq_property_type property
Prpèerty type (if needed by filter).
Definition moq.h:804
uint64_t end
Filter end.
Definition moq.h:808
uint64_t start
Filter start.
Definition moq.h:806
imquic_moq_filter_type type
Type of filter.
Definition moq.h:800
Collection of MoQ filters.
Definition moq.h:824
GList * filters_list
Same filters, but as a single linked list.
Definition moq.h:829
GHashTable * filters_map
Map of filters, indexed by set ID.
Definition moq.h:827
MoQ location filter (new).
Definition moq.h:502
imquic_moq_location_filter_type type
Filter type.
Definition moq.h:504
imquic_moq_location_filter_type_legacy legacy_type
Legacy filter type, for older versions.
Definition moq.h:506
imquic_moq_location_range range
The location range, depending on the type.
Definition moq.h:508
MoQ location range (from where to where, e.g., for FETCH).
Definition moq.h:493
imquic_moq_location end
End group/object.
Definition moq.h:497
imquic_moq_location start
Start group/object.
Definition moq.h:495
MoQ Group/Object couple (for ranges).
Definition moq.h:487
uint64_t object
Definition moq.h:489
uint64_t group
Definition moq.h:488
MoQ Track Namespace.
Definition moq.h:336
size_t length
Size of the namespace data.
Definition moq.h:340
uint8_t * buffer
Namespace data (typically a non-null terminated string).
Definition moq.h:338
struct imquic_moq_namespace * next
Next namespace in this list, if this is a tuple.
Definition moq.h:342
MoQ Object.
Definition moq.h:735
gboolean first_of_subgroup
Whether the first object in the stream contains the first object in the subgroup (added in v18).
Definition moq.h:775
gboolean priority_set
Whether the object contains a priority.
Definition moq.h:752
imquic_moq_delivery delivery
How to send this object (or how it was received).
Definition moq.h:773
size_t payload_len
Size of the MoQ object payload.
Definition moq.h:771
uint64_t subgroup_id
MoQ subgroup_id.
Definition moq.h:746
gboolean end_of_stream
Whether this signals the end of the stream.
Definition moq.h:777
gboolean fill_fetch
Whether this is fill FETCH related.
Definition moq.h:740
GList * properties
MoQ properties, if any.
Definition moq.h:756
uint64_t group_id
MoQ group_id.
Definition moq.h:744
uint64_t object_id
MoQ object_id.
Definition moq.h:748
uint8_t * payload
MoQ object payload.
Definition moq.h:769
uint8_t priority
MoQ publisher priority.
Definition moq.h:754
uint64_t track_alias
MoQ track_alias.
Definition moq.h:742
uint8_t * payload_prefix
MoQ object payload prefix, if needed.
Definition moq.h:765
size_t payload_prefix_len
Size of the MoQ object payload prefix.
Definition moq.h:767
imquic_moq_object_status object_status
MoQ object status.
Definition moq.h:750
uint64_t request_id
MoQ request_id.
Definition moq.h:737
MoQ Property.
Definition moq.h:653
uint32_t id
MoQ Property ID.
Definition moq.h:655
uint64_t length
Definition moq.h:661
union imquic_moq_property::@177124263055135035040370145357160103327167033353 value
Property value, which could be either a number (even property ID) or an octet of data with length (od...
uint64_t number
Definition moq.h:659
uint8_t * buffer
Definition moq.h:662
struct imquic_moq_property::@177124263055135035040370145357160103327167033353::imquic_moq_property_data data
MoQ Redirect Structure.
Definition moq.h:438
imquic_moq_namespace * track_namespace
Definition moq.h:442
char * connect_uri
Definition moq.h:440
imquic_moq_track * track_name
Definition moq.h:444
MoQ request parameters.
Definition moq.h:534
gboolean largest_object_set
Whether the LARGEST_OBJECT parameter is set.
Definition moq.h:588
imquic_moq_namespace track_namespace_prefix[32]
Value of the TRACK_NAMESPACE_PREFIX parameter.
Definition moq.h:602
imquic_moq_location_filter location_filter
Value of the LOCATION_FILTER parameter.
Definition moq.h:578
gboolean subgroup_delivery_timeout_set
Whether the SUBGROUP_DELIVERY_TIMEOUT parameter is set.
Definition moq.h:550
uint8_t subscriber_priority
Value of the SUBSCRIBER_PRIORITY parameter.
Definition moq.h:564
gboolean include_properties
Value of the INCLUDE_PROPERTIES parameter.
Definition moq.h:606
gboolean filters_set
Whether there are filters.
Definition moq.h:580
imquic_moq_filters * filters
Filters of different types, indexed by set ID.
Definition moq.h:582
size_t auth_token_len
Size of the AUTHORIZATION_TOKEN parameter.
Definition moq.h:540
uint64_t object_delivery_timeout
Value of the OBJECT_DELIVERY_TIMEOUT parameter.
Definition moq.h:548
gboolean fill_parameters_set
Whether the FILL_PARAMETERS parameter is set.
Definition moq.h:570
uint64_t new_group_request
Value of the NEW_GROUP_REQUEST parameter.
Definition moq.h:598
uint64_t expires
Value of the EXPIRES parameter.
Definition moq.h:586
uint64_t fill_timeout
Value of the FILL_TIMEOUT parameter.
Definition moq.h:556
gboolean auth_token_set
Whether the AUTHORIZATION_TOKEN parameter is set.
Definition moq.h:536
uint64_t delivery_timeout
Value of the DELIVERY_TIMEOUT parameter.
Definition moq.h:544
struct imquic_moq_request_parameters * fill_parameters
Value of the FILL_PARAMETERS parameter.
Definition moq.h:574
imquic_moq_location largest_object
Value of the LARGEST_OBJECT parameter.
Definition moq.h:590
imquic_moq_group_order group_order
Value of the GROUP_ORDER parameter.
Definition moq.h:568
gboolean object_delivery_timeout_set
Whether the OBJECT_DELIVERY_TIMEOUT parameter is set.
Definition moq.h:546
gboolean new_group_request_set
Whether the NEW_GROUP_REQUEST parameter is set.
Definition moq.h:596
gboolean include_properties_set
Whether the INCLUDE_PROPERTIES parameter is set.
Definition moq.h:604
gboolean subscriber_priority_set
Whether the SUBSCRIBER_PRIORITY parameter is set.
Definition moq.h:562
gboolean location_filter_set
Whether the LOCATION_FILTER parameter is set.
Definition moq.h:576
gboolean delivery_timeout_set
Whether the DELIVERY_TIMEOUT parameter is set.
Definition moq.h:542
uint64_t rendezvous_timeout
Value of the RENDEZVOUS_TIMEOUT parameter.
Definition moq.h:560
gboolean forward
Value of the FORWARD parameter.
Definition moq.h:594
uint8_t auth_token[256]
Value of the AUTHORIZATION_TOKEN parameter.
Definition moq.h:538
gboolean forward_set
Whether the FORWARD parameter is set.
Definition moq.h:592
gboolean expires_set
Whether the EXPIRES parameter is set.
Definition moq.h:584
gboolean track_namespace_prefix_set
Whether the TRACK_NAMESPACE_PREFIX parameter is set.
Definition moq.h:600
gboolean group_order_set
Whether the GROUP_ORDER parameter is set.
Definition moq.h:566
gboolean unknown
Whether there's unknown parameters.
Definition moq.h:609
gboolean rendezvous_timeout_set
Whether the RENDEZVOUS_TIMEOUT parameter is set.
Definition moq.h:558
gboolean fill_timeout_set
Whether the FILL_TIMEOUT parameter is set.
Definition moq.h:554
uint64_t subgroup_delivery_timeout
Value of the SUBGROUP_DELIVERY_TIMEOUT parameter.
Definition moq.h:552
MoQ Track Name.
Definition moq.h:391
uint8_t * buffer
Name data (typically a non-null terminated string).
Definition moq.h:393
size_t length
Size of the name data.
Definition moq.h:395