Loading...
Searching...
No Matches
Macros | Functions
moq.c File Reference

Media Over QUIC (MoQ) stack. More...

#include <arpa/inet.h>
#include "internal/moq.h"
#include "internal/connection.h"
#include "imquic/debug.h"
Include dependency graph for moq.c:

Macros

#define IMQUIC_MOQ_LOG_VERB   IMQUIC_LOG_HUGE
 
#define IMQUIC_MOQ_LOG_HUGE   IMQUIC_LOG_VERB
 
#define IMQUIC_MOQ_CHECK_ERR(err, res, reason)
 

Functions

void imquic_moq_init (void)
 Initialize the native MoQ stack at startup.
 
void imquic_moq_deinit (void)
 Uninitialize the native MoQ stack.
 
void imquic_moq_new_connection (imquic_connection *conn, void *user_data)
 Callback the core invokes when a new QUIC connection using MoQ is available.
 
void imquic_moq_stream_incoming (imquic_connection *conn, uint64_t stream_id, uint8_t *bytes, uint64_t offset, uint64_t length, gboolean complete)
 Callback the core invokes when there's new incoming data on a STREAM.
 
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.
 
void imquic_moq_connection_gone (imquic_connection *conn)
 Callback the core invokes when an existing MoQ connection is not available anymore.
 
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.
 
const char * imquic_moq_sub_error_code_str (imquic_moq_sub_error_code code)
 Helper function to serialize to string the name of a imquic_moq_error_code value.
 
const char * imquic_moq_sub_done_code_str (imquic_moq_sub_done_code code)
 Helper function to serialize to string the name of a imquic_moq_sub_done_code value.
 
const char * imquic_moq_message_type_str (imquic_moq_message_type type)
 Helper function to serialize to string the name of a imquic_moq_message_type value.
 
const char * imquic_moq_data_message_type_str (imquic_moq_data_message_type type)
 Helper function to serialize to string the name of a imquic_moq_data_message_type value.
 
imquic_moq_delivery imquic_moq_data_message_type_to_delivery (imquic_moq_data_message_type type)
 Helper function to return the imquic_moq_delivery mode associated to a imquic_moq_data_message_type type.
 
const char * imquic_moq_setup_parameter_type_str (imquic_moq_setup_parameter_type type)
 Helper function to serialize to string the name of a imquic_moq_setup_parameter_type value.
 
const char * imquic_moq_subscribe_parameter_type_str (imquic_moq_subscribe_parameter_type type)
 Helper function to serialize to string the name of a imquic_moq_subscribe_parameter_type value.
 
const char * imquic_moq_role_type_str (imquic_moq_role_type type)
 Helper function to serialize to string the name of a imquic_moq_role_type value.
 
const char * imquic_moq_location_mode_str (imquic_moq_location_mode mode)
 Helper function to serialize to string the name of a imquic_moq_location_mode value.
 
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.
 
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.
 
gboolean imquic_moq_buffer_resize (imquic_moq_buffer *buffer, uint64_t new_size)
 Resize an existing buffer.
 
void imquic_moq_buffer_append (imquic_moq_buffer *buffer, uint8_t *bytes, uint64_t length)
 Append data at the end of the buffer.
 
void imquic_moq_buffer_shift (imquic_moq_buffer *buffer, uint64_t length)
 Move the data in the buffer back of a specific number of bytes.
 
void imquic_moq_buffer_destroy (imquic_moq_buffer *buffer)
 Destroy an existing buffer.
 
imquic_moq_subscriptionimquic_moq_subscription_create (uint64_t subscribe_id, uint64_t track_alias)
 Helper to create a new subscription instance.
 
void imquic_moq_subscription_destroy (imquic_moq_subscription *moq_sub)
 Destroy an existing MoQ subscription.
 
void imquic_moq_stream_destroy (imquic_moq_stream *moq_stream)
 Destroy an existing MoQ stream.
 
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.
 
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.
 
size_t imquic_moq_parse_server_setup (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to pars an SERVER_SETUP message.
 
size_t imquic_moq_parse_max_subscribe_id (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to pars an MAX_SUBSCRIBE_ID message.
 
size_t imquic_moq_parse_announce (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse an ANNOUNCE message.
 
size_t imquic_moq_parse_announce_ok (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse an ANNOUNCE_OK message.
 
size_t imquic_moq_parse_announce_error (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse an ANNOUNCE_ERROR message.
 
size_t imquic_moq_parse_unannounce (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse an UNANNOUNCE message.
 
size_t imquic_moq_parse_announce_cancel (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse an ANNOUNCE_CANCEL message.
 
size_t imquic_moq_parse_subscribe (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a SUBSCRIBE message.
 
size_t imquic_moq_parse_subscribe_update (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a SUBSCRIBE_UPDATE message.
 
size_t imquic_moq_parse_subscribe_ok (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a SUBSCRIBE_OK message.
 
size_t imquic_moq_parse_subscribe_error (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a SUBSCRIBE_ERROR message.
 
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.
 
size_t imquic_moq_parse_subscribe_done (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a SUBSCRIBE_DONE message.
 
size_t imquic_moq_parse_subscribe_announces (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a SUBSCRIBE_ANNOUNCES message.
 
size_t imquic_moq_parse_subscribe_announces_ok (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a SUBSCRIBE_ANNOUNCES_OK message.
 
size_t imquic_moq_parse_subscribe_announces_error (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a SUBSCRIBE_ANNOUNCES_ERROR message.
 
size_t imquic_moq_parse_unsubscribe_announces (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse an UNSUBSCRIBE_ANNOUNCES message.
 
size_t imquic_moq_parse_fetch (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a FETCH message.
 
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.
 
size_t imquic_moq_parse_fetch_ok (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a FETCH_OK message.
 
size_t imquic_moq_parse_fetch_error (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a FETCH_ERROR message.
 
size_t imquic_moq_parse_track_status_request (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a TRACK_STATUS_REQUEST message.
 
size_t imquic_moq_parse_track_status (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a TRACK_STATUS message.
 
size_t imquic_moq_parse_object_stream (imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse an OBJECT_STREAM message.
 
size_t imquic_moq_parse_object_datagram (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse an OBJECT_DATAGRAM message.
 
size_t imquic_moq_parse_stream_header_track (imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a STREAM_HEADER_TRACK message.
 
int imquic_moq_parse_stream_header_track_object (imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete)
 Helper to parse a STREAM_HEADER_TRACK object.
 
size_t imquic_moq_parse_stream_header_group (imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a STREAM_HEADER_GROUP message.
 
int imquic_moq_parse_stream_header_group_object (imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete)
 Helper to parse a STREAM_HEADER_GROUP object.
 
size_t imquic_moq_parse_stream_header_subgroup (imquic_moq_context *moq, imquic_moq_stream *moq_stream, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a STREAM_HEADER_SUBGROUP message.
 
int imquic_moq_parse_stream_header_subgroup_object (imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete)
 Helper to parse a STREAM_HEADER_SUBGROUP object.
 
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.
 
int imquic_moq_parse_fetch_header_object (imquic_moq_context *moq, imquic_moq_stream *moq_stream, gboolean complete)
 Helper to parse a FETCH_HEADER object.
 
size_t imquic_moq_parse_goaway (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint8_t *error)
 Helper to parse a GOAWAY message.
 
size_t imquic_moq_add_control_message (imquic_moq_context *moq, imquic_moq_message_type type, uint8_t *bytes, size_t blen, size_t poffset, size_t plen, size_t *start)
 Helper method to put a message header and a payload together.
 
size_t imquic_moq_add_client_setup (imquic_moq_context *moq, uint8_t *bytes, size_t blen, GList *supported_versions, size_t params_num, imquic_data *parameters)
 Helper method to add a CLIENT_SETUP message to a buffer.
 
size_t imquic_moq_add_server_setup (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint32_t version, size_t params_num, imquic_data *parameters)
 Helper method to add a SERVER_SETUP message to a buffer.
 
size_t imquic_moq_add_max_subscribe_id (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t max_subscribe_id)
 Helper method to add a MAX_SUBSCRIBE_ID message to a buffer.
 
size_t imquic_moq_add_announce (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace, size_t params_num, imquic_data *parameters)
 Helper method to add an ANNOUNCE message to a buffer.
 
size_t imquic_moq_add_announce_ok (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace)
 Helper method to add an ANNOUNCE_OK message to a buffer.
 
size_t imquic_moq_add_announce_error (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace, imquic_moq_error_code error, const char *reason)
 Helper method to add an ANNOUNCE_ERROR message to a buffer.
 
size_t imquic_moq_add_unannounce (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace)
 Helper method to add an UNANNOUNCE message to a buffer.
 
size_t imquic_moq_add_announce_cancel (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace)
 Helper method to add aN ANNOUNCE_CANCEL message to a buffer.
 
size_t imquic_moq_add_subscribe_v03 (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t track_alias, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, imquic_moq_location *start_group, imquic_moq_location *start_object, imquic_moq_location *end_group, imquic_moq_location *end_object, size_t params_num, imquic_data *parameters)
 Helper to add a SUBSCRIBE message (version -03 of the draft) to a buffer.
 
size_t imquic_moq_add_subscribe (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t track_alias, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, uint8_t priority, uint8_t group_order, imquic_moq_filter_type filter, uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, size_t params_num, imquic_data *parameters)
 Helper to add a SUBSCRIBE message (any version of the draft except v03) to a buffer.
 
size_t imquic_moq_add_subscribe_update (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, uint8_t priority, size_t params_num, imquic_data *parameters)
 Helper method to add a SUBSCRIBE_UPDATE message to a buffer.
 
size_t imquic_moq_add_subscribe_ok (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t expires, imquic_moq_group_order group_order, gboolean content_exists, uint64_t largest_group_id, uint64_t largest_object_id, size_t params_num, imquic_data *parameters)
 Helper method to add a SUBSCRIBE_OK message to a buffer.
 
size_t imquic_moq_add_subscribe_error (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, imquic_moq_sub_error_code error, const char *reason, uint64_t track_alias)
 Helper method to add a SUBSCRIBE_ERRROR message to a buffer.
 
size_t imquic_moq_add_unsubscribe (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id)
 Helper method to add an UNSUBSCRIBE message to a buffer.
 
size_t imquic_moq_add_subscribe_done (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, imquic_moq_sub_done_code status, const char *reason, gboolean content_exists, uint64_t final_group, uint64_t final_object)
 Helper method to add a SUBSCRIBE_DONE message to a buffer.
 
size_t imquic_moq_add_subscribe_announces (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace, size_t params_num, imquic_data *parameters)
 Helper to add a SUBSCRIBE_ANNOUNCES message (version -04 of the draft) to a buffer.
 
size_t imquic_moq_add_subscribe_announces_ok (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace)
 Helper method to add a SUBSCRIBE_ANNOUNCES_OK message to a buffer.
 
size_t imquic_moq_add_subscribe_announces_error (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace, imquic_moq_error_code error, const char *reason)
 Helper method to add a SUBSCRIBE_ANNOUNCES_ERRROR message to a buffer.
 
size_t imquic_moq_add_unsubscribe_announces (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace)
 Helper method to add an UNSUBSCRIBE_ANNOUNCES message to a buffer.
 
size_t imquic_moq_add_fetch (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, uint8_t priority, imquic_moq_group_order group_order, uint64_t start_group, uint64_t start_object, uint64_t end_group, uint64_t end_object, size_t params_num, imquic_data *parameters)
 Helper to add a FETCH message (any version of the draft except v03) to a buffer.
 
size_t imquic_moq_add_fetch_cancel (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id)
 Helper method to add an FETCH_CANCEL message to a buffer.
 
size_t imquic_moq_add_fetch_ok (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint8_t group_order, uint8_t end_of_track, uint64_t largest_group_id, uint64_t largest_object_id, size_t params_num, imquic_data *parameters)
 Helper method to add a FETCH_OK message to a buffer.
 
size_t imquic_moq_add_fetch_error (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, imquic_moq_sub_error_code error, const char *reason)
 Helper method to add a FETCH_ERRROR message to a buffer.
 
size_t imquic_moq_add_track_status_request (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name)
 Helper to add a TRACK_STATUS_REQUEST message to a buffer.
 
size_t imquic_moq_add_track_status (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_namespace *track_namespace, imquic_moq_name *track_name, uint64_t status_code, uint64_t last_group_id, uint64_t last_object_id)
 Helper to add a TRACK_STATUS message to a buffer.
 
size_t imquic_moq_add_object_stream (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t track_alias, uint64_t group_id, uint64_t object_id, uint64_t object_status, uint64_t object_send_order, uint8_t priority, uint8_t *payload, size_t plen)
 Helper to add an OBJECT_STREAM message to a buffer (only before v06)
 
size_t imquic_moq_add_object_datagram (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t track_alias, uint64_t group_id, uint64_t object_id, uint64_t object_status, uint64_t object_send_order, uint8_t priority, uint8_t *payload, size_t plen)
 Helper to add an OBJECT_DATAGRAM message to a buffer.
 
size_t imquic_moq_add_stream_header_track (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t track_alias, uint64_t object_send_order, uint8_t priority)
 Helper to add a STREAM_HEADER_TRACK message to a buffer (only before v06)
 
size_t imquic_moq_add_stream_header_track_object (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t group_id, uint64_t object_id, uint64_t object_status, uint8_t *payload, size_t plen)
 Helper to add an object to a buffer, formatted as expected for STREAM_HEADER_TRACK objects (so not all IDs) (only before v06)
 
size_t imquic_moq_add_stream_header_group (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t track_alias, uint64_t group_id, uint64_t object_send_order, uint8_t priority)
 Helper to add a STREAM_HEADER_GROUP message to a buffer (only before v06)
 
size_t imquic_moq_add_stream_header_group_object (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t object_id, uint64_t object_status, uint8_t *payload, size_t plen)
 Helper to add an object to a buffer, formatted as expected for STREAM_HEADER_GROUP objects (so not all IDs) (only before v06)
 
size_t imquic_moq_add_stream_header_subgroup (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id, uint64_t track_alias, uint64_t group_id, uint64_t subgroup_id, uint8_t priority)
 Helper to add a STREAM_HEADER_SUBGROUP message to a buffer (only after v06)
 
size_t imquic_moq_add_stream_header_subgroup_object (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t object_id, uint64_t object_status, uint8_t *payload, size_t plen)
 Helper to add an object to a buffer, formatted as expected for STREAM_HEADER_SUBGROUP objects (so not all IDs) (only after v06)
 
size_t imquic_moq_add_fetch_header (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t subscribe_id)
 Helper to add a FETCH_HEADER message to a buffer (only after v07)
 
size_t imquic_moq_add_fetch_header_object (imquic_moq_context *moq, uint8_t *bytes, size_t blen, uint64_t group_id, uint64_t subgroup_id, uint64_t object_id, uint8_t priority, uint64_t object_status, uint8_t *payload, size_t plen)
 Helper to add an object to a buffer, formatted as expected for FETCH_HEADER objects (so not all IDs) (only before v06)
 
size_t imquic_moq_add_goaway (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_data *new_session_uri)
 Helper method to add a GOAWAY message to a buffer.
 
size_t imquic_moq_parse_setup_parameter (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_parsed_setup_parameter *param, uint8_t *error)
 Helper method to parse a MoQ setup parameter.
 
size_t imquic_moq_parse_subscribe_parameter (imquic_moq_context *moq, uint8_t *bytes, size_t blen, imquic_moq_parsed_subscribe_parameter *param, uint8_t *error)
 Helper method to parse a MoQ subscribe parameter.
 
size_t imquic_moq_parameter_add_int (imquic_moq_context *moq, uint8_t *bytes, size_t blen, int param, uint64_t number)
 Helper to add a MoQ (setup or subscribe) parameter with a numeric value to a buffer.
 
size_t imquic_moq_parameter_add_data (imquic_moq_context *moq, uint8_t *bytes, size_t blen, int param, uint8_t *buf, size_t buflen)
 Helper to add a MoQ (setup or subscribe) parameter with generic data to a buffer.
 
int imquic_moq_set_role (imquic_connection *conn, imquic_moq_role role)
 Method to set the MoQ role on a connection. Must be done as soon as the connection is established, and before sending any MoQ message. A good place to do that is the callback fired when a new connection is available.
 
imquic_moq_role imquic_moq_get_role (imquic_connection *conn)
 Helper function to get the MoQ role associated with a connection.
 
int imquic_moq_set_version (imquic_connection *conn, imquic_moq_version version)
 Method to set the MoQ version on a connection. Must be done as soon as the connection is established, and before sending any MoQ message. A good place to do that is the callback fired when a new connection is available.
 
imquic_moq_version imquic_moq_get_version (imquic_connection *conn)
 Helper function to get the MoQ version associated with a connection.
 
int imquic_moq_set_max_subscribe_id (imquic_connection *conn, uint64_t max_subscribe_id)
 Helper function to set the Maximum Subscribe ID a subscriber can send.
 
int imquic_moq_announce (imquic_connection *conn, imquic_moq_namespace *tns)
 Function to send an ANNOUNCE request.
 
int imquic_moq_accept_announce (imquic_connection *conn, imquic_moq_namespace *tns)
 Function to accept an incoming ANNOUNCE request.
 
int imquic_moq_reject_announce (imquic_connection *conn, imquic_moq_namespace *tns, int error_code, const char *reason)
 Function to reject an incoming ANNOUNCE request.
 
int imquic_moq_unannounce (imquic_connection *conn, imquic_moq_namespace *tns)
 Function to send an UNANNOUNCE request.
 
int imquic_moq_subscribe (imquic_connection *conn, uint64_t subscribe_id, uint64_t track_alias, imquic_moq_namespace *tns, imquic_moq_name *tn, imquic_moq_auth_info *auth)
 Function to send a SUBSCRIBE request.
 
int imquic_moq_accept_subscribe (imquic_connection *conn, uint64_t subscribe_id, uint64_t expires, gboolean descending)
 Function to accept an incoming SUBSCRIBE request.
 
int imquic_moq_reject_subscribe (imquic_connection *conn, uint64_t subscribe_id, int error_code, const char *reason, uint64_t track_alias)
 Function to reject an incoming SUBSCRIBE request.
 
int imquic_moq_unsubscribe (imquic_connection *conn, uint64_t subscribe_id)
 Function to send a UNSUBSCRIBE request.
 
int imquic_moq_subscribe_announces (imquic_connection *conn, imquic_moq_namespace *tns, imquic_moq_auth_info *auth)
 Function to send a SUBSCRIBE_ANNOUNCES request.
 
int imquic_moq_accept_subscribe_announces (imquic_connection *conn, imquic_moq_namespace *tns)
 Function to accept an incoming SUBSCRIBE_ANNOUNCES request.
 
int imquic_moq_reject_subscribe_announces (imquic_connection *conn, imquic_moq_namespace *tns, int error_code, const char *reason)
 Function to reject an incoming SUBSCRIBE_ANNOUNCES request.
 
int imquic_moq_unsubscribe_announces (imquic_connection *conn, imquic_moq_namespace *tns)
 Function to send a UNSUBSCRIBE_ANNOUNCES request.
 
int imquic_moq_fetch (imquic_connection *conn, uint64_t subscribe_id, imquic_moq_namespace *tns, imquic_moq_name *tn, gboolean descending, imquic_moq_fetch_range *range, imquic_moq_auth_info *auth)
 Function to send a FETCH request.
 
int imquic_moq_accept_fetch (imquic_connection *conn, uint64_t subscribe_id, gboolean descending, imquic_moq_position *largest)
 Function to accept an incoming FETCH request.
 
int imquic_moq_reject_fetch (imquic_connection *conn, uint64_t subscribe_id, int error_code, const char *reason)
 Function to reject an incoming FETCH request.
 
int imquic_moq_cancel_fetch (imquic_connection *conn, uint64_t subscribe_id)
 Function to send a FETCH_CANCEL request.
 
int imquic_moq_send_object (imquic_connection *conn, imquic_moq_object *object)
 Function to send a MoQ object.
 

Detailed Description

Media Over QUIC (MoQ) stack.

Author
Lorenzo Miniero loren.nosp@m.zo@m.nosp@m.eetec.nosp@m.ho.c.nosp@m.om

Implementation of the Media Over QUIC (MoQ) stack as part of the library itself. At the time of writing, this implements (most of) versions -03 and -04 of the protocol.

Note
This is the internal implementation of MoQ in the library. You're still free to only use imquic as the underlying QUIC/WebTransport library, and take care of the MoQ implementation on your own instead: in order to do that, use the generic imquic client/server creation utilities, rather than the MoQ specific ones.

Macro Definition Documentation

◆ IMQUIC_MOQ_CHECK_ERR

#define IMQUIC_MOQ_CHECK_ERR ( err,
res,
reason )
Value:
if(err) { \
IMQUIC_LOG(IMQUIC_LOG_ERR, "%s\n", reason); \
return res; \
}
#define IMQUIC_LOG_ERR
Non-fatal error.
Definition debug.h:42

◆ IMQUIC_MOQ_LOG_HUGE

#define IMQUIC_MOQ_LOG_HUGE   IMQUIC_LOG_VERB

◆ IMQUIC_MOQ_LOG_VERB

#define IMQUIC_MOQ_LOG_VERB   IMQUIC_LOG_HUGE

Function Documentation

◆ imquic_moq_accept_announce()

int imquic_moq_accept_announce ( imquic_connection * conn,
imquic_moq_namespace * tns )

Function to accept an incoming ANNOUNCE request.

Parameters
connThe imquic_connection to send the request on
tnsThe imquic_moq_namespace namespace to accept
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_accept_fetch()

int imquic_moq_accept_fetch ( imquic_connection * conn,
uint64_t subscribe_id,
gboolean descending,
imquic_moq_position * largest )

Function to accept an incoming FETCH request.

Parameters
connThe imquic_connection to send the request on
subscribe_idThe unique subscribe_id value associated to the subscription to accept
descendingWhether objects will be delivered in descending group order
largestThe largest group/object IDs
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_accept_subscribe()

int imquic_moq_accept_subscribe ( imquic_connection * conn,
uint64_t subscribe_id,
uint64_t expires,
gboolean descending )

Function to accept an incoming SUBSCRIBE request.

Parameters
connThe imquic_connection to send the request on
subscribe_idThe unique subscribe_id value associated to the subscription to accept
expiresValue of expires to send back
descendingWhether objects will be delivered in descending group order
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_accept_subscribe_announces()

int imquic_moq_accept_subscribe_announces ( imquic_connection * conn,
imquic_moq_namespace * tns )

Function to accept an incoming SUBSCRIBE_ANNOUNCES request.

Parameters
connThe imquic_connection to send the request on
tnsThe imquic_moq_namespace namespace to accept notifications for
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_add_announce()

size_t imquic_moq_add_announce ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace,
size_t params_num,
imquic_data * parameters )

Helper method to add an ANNOUNCE message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceNamespace to announce
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_announce_cancel()

size_t imquic_moq_add_announce_cancel ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace )

Helper method to add aN ANNOUNCE_CANCEL message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceNamespace for which to cancel the announcement
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_announce_error()

size_t imquic_moq_add_announce_error ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace,
imquic_moq_error_code error,
const char * reason )

Helper method to add an ANNOUNCE_ERROR message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceNamespace for which the announcement caused an error
errorError code associated to the message
reasonVerbose description of the error, if any
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_announce_ok()

size_t imquic_moq_add_announce_ok ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace )

Helper method to add an ANNOUNCE_OK message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceNamespace for which the announcement succeeded
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_client_setup()

size_t imquic_moq_add_client_setup ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
GList * supported_versions,
size_t params_num,
imquic_data * parameters )

Helper method to add a CLIENT_SETUP message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
supported_versionsList of supported versions
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_control_message()

size_t imquic_moq_add_control_message ( imquic_moq_context * moq,
imquic_moq_message_type type,
uint8_t * bytes,
size_t blen,
size_t poffset,
size_t plen,
size_t * start )

Helper method to put a message header and a payload together.

Note
All the "add" functions for control messages don't set the type in the buffer, since versions of MoQ later than v06 also envision a payload length varint: as such, we prepare the payload first, and prefix the message type (and optionally the payload length) later.
Parameters
[in]moqThe imquic_moq_context generating the message
[in]typeThe ID of the control message to send
[in]bytesThe buffer to add the control message to
[in]blenThe size of the buffer
[in]poffsetWhere in the provided buffer we already have the payload
[in]plenSize of the payload in the buffer
[out]startWhere the final control message starts, in the buffer
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_fetch()

size_t imquic_moq_add_fetch ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
imquic_moq_namespace * track_namespace,
imquic_moq_name * track_name,
uint8_t priority,
imquic_moq_group_order group_order,
uint64_t start_group,
uint64_t start_object,
uint64_t end_group,
uint64_t end_object,
size_t params_num,
imquic_data * parameters )

Helper to add a FETCH message (any version of the draft except v03) to a buffer.

Note
This sends the -04 or -05 variant of the message
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
track_namespaceThe namespace to put in the message
track_nameThe track name to put in the message
priorityThe fetchr priority to put in the message
group_orderThe group order to put in the message
start_groupThe start group ID to put in the message
start_objectThe start object ID to put in the message
end_groupThe end group ID to put in the message
end_objectThe end object ID to put in the message
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_fetch_cancel()

size_t imquic_moq_add_fetch_cancel ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id )

Helper method to add an FETCH_CANCEL message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_fetch_error()

size_t imquic_moq_add_fetch_error ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
imquic_moq_sub_error_code error,
const char * reason )

Helper method to add a FETCH_ERRROR message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
errorError code associated to the message
reasonVerbose description of the error, if any
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_fetch_header()

size_t imquic_moq_add_fetch_header ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id )

Helper to add a FETCH_HEADER message to a buffer (only after v07)

Note
This will create a new STREAM and send the header: after that, imquic_moq_add_fetch_header_object is used to send all objects that belong to this track.
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_fetch_header_object()

size_t imquic_moq_add_fetch_header_object ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t group_id,
uint64_t subgroup_id,
uint64_t object_id,
uint8_t priority,
uint64_t object_status,
uint8_t * payload,
size_t plen )

Helper to add an object to a buffer, formatted as expected for FETCH_HEADER objects (so not all IDs) (only before v06)

Parameters
moqThe imquic_moq_context generating the object
bytesThe buffer to add the object to
blenThe size of the buffer
group_idThe group ID
subgroup_idThe subgroup ID
object_idThe object ID
priorityThe publisher priority to put in the message
object_statusThe object status (only added if the payload length is 0)
payloadThe buffer containing the payload of the object
plenThe size of the payload buffer
Returns
The size of the generated object, if successful, or 0 otherwise

◆ imquic_moq_add_fetch_ok()

size_t imquic_moq_add_fetch_ok ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint8_t group_order,
uint8_t end_of_track,
uint64_t largest_group_id,
uint64_t largest_object_id,
size_t params_num,
imquic_data * parameters )

Helper method to add a FETCH_OK message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
group_orderThe group order to put in the message
end_of_trackWhether all objects have been published
largest_group_idLargest group ID to add to the message, if needed
largest_object_idLargest object ID to add to the message, if needed
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_goaway()

size_t imquic_moq_add_goaway ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_data * new_session_uri )

Helper method to add a GOAWAY message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
new_session_uriBuffer containint the new uri value to put in the message, if any
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_max_subscribe_id()

size_t imquic_moq_add_max_subscribe_id ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t max_subscribe_id )

Helper method to add a MAX_SUBSCRIBE_ID message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
max_subscribe_idMaximum subscribe ID to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_object_datagram()

size_t imquic_moq_add_object_datagram ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t track_alias,
uint64_t group_id,
uint64_t object_id,
uint64_t object_status,
uint64_t object_send_order,
uint8_t priority,
uint8_t * payload,
size_t plen )

Helper to add an OBJECT_DATAGRAM message to a buffer.

Note
This assumes the connection negotiated DATAGRAM support
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
track_aliasThe track alias to put in the message
group_idThe group ID to put in the message
object_idThe object ID to put in the message
object_statusThe object status (only added if the payload length is 0)
object_send_orderThe object send order to put in the message (v03 and v04 only)
priorityThe publisher priority to put in the message (only after v05)
payloadThe buffer containing the payload of the object
plenThe size of the payload buffer
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_object_stream()

size_t imquic_moq_add_object_stream ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t track_alias,
uint64_t group_id,
uint64_t object_id,
uint64_t object_status,
uint64_t object_send_order,
uint8_t priority,
uint8_t * payload,
size_t plen )

Helper to add an OBJECT_STREAM message to a buffer (only before v06)

Note
This will create a throaway STREAM just to send this object
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
track_aliasThe track alias to put in the message
group_idThe group ID to put in the message
object_idThe object ID to put in the message
object_statusThe object status (only added if the payload length is 0)
object_send_orderThe object send order to put in the message (v03 and v04 only)
priorityThe publisher priority to put in the message (only after v05)
payloadThe buffer containing the payload of the object
plenThe size of the payload buffer
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_server_setup()

size_t imquic_moq_add_server_setup ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint32_t version,
size_t params_num,
imquic_data * parameters )

Helper method to add a SERVER_SETUP message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
versionNegotiated version
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_stream_header_group()

size_t imquic_moq_add_stream_header_group ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t track_alias,
uint64_t group_id,
uint64_t object_send_order,
uint8_t priority )

Helper to add a STREAM_HEADER_GROUP message to a buffer (only before v06)

Note
This will create a new STREAM and send the header: after that, imquic_moq_add_stream_header_group_object is used to send all objects that belong to this group.
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
track_aliasThe track alias to put in the message
group_idThe group ID to put in the message
object_send_orderThe object send order to put in the message (v03 and v04 only)
priorityThe publisher priority to put in the message (only after v05)
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_stream_header_group_object()

size_t imquic_moq_add_stream_header_group_object ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t object_id,
uint64_t object_status,
uint8_t * payload,
size_t plen )

Helper to add an object to a buffer, formatted as expected for STREAM_HEADER_GROUP objects (so not all IDs) (only before v06)

Parameters
moqThe imquic_moq_context generating the object
bytesThe buffer to add the object to
blenThe size of the buffer
object_idThe object ID
object_statusThe object status (only added if the payload length is 0)
payloadThe buffer containing the payload of the object
plenThe size of the payload buffer
Returns
The size of the generated object, if successful, or 0 otherwise

◆ imquic_moq_add_stream_header_subgroup()

size_t imquic_moq_add_stream_header_subgroup ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t track_alias,
uint64_t group_id,
uint64_t subgroup_id,
uint8_t priority )

Helper to add a STREAM_HEADER_SUBGROUP message to a buffer (only after v06)

Note
This will create a new STREAM and send the header: after that, imquic_moq_add_stream_header_subgroup_object is used to send all objects that belong to this subgroup.
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
track_aliasThe track alias to put in the message
group_idThe group ID to put in the message
subgroup_idThe subgroup ID to put in the message
priorityThe publisher priority to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_stream_header_subgroup_object()

size_t imquic_moq_add_stream_header_subgroup_object ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t object_id,
uint64_t object_status,
uint8_t * payload,
size_t plen )

Helper to add an object to a buffer, formatted as expected for STREAM_HEADER_SUBGROUP objects (so not all IDs) (only after v06)

Parameters
moqThe imquic_moq_context generating the object
bytesThe buffer to add the object to
blenThe size of the buffer
object_idThe object ID
object_statusThe object status (only added if the payload length is 0)
payloadThe buffer containing the payload of the object
plenThe size of the payload buffer
Returns
The size of the generated object, if successful, or 0 otherwise

◆ imquic_moq_add_stream_header_track()

size_t imquic_moq_add_stream_header_track ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t track_alias,
uint64_t object_send_order,
uint8_t priority )

Helper to add a STREAM_HEADER_TRACK message to a buffer (only before v06)

Note
This will create a new STREAM and send the header: after that, imquic_moq_add_stream_header_track_object is used to send all objects that belong to this track.
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
track_aliasThe track alias to put in the message
object_send_orderThe object send order to put in the message (v03 and v04 only)
priorityThe publisher priority to put in the message (only after v05)
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_stream_header_track_object()

size_t imquic_moq_add_stream_header_track_object ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t group_id,
uint64_t object_id,
uint64_t object_status,
uint8_t * payload,
size_t plen )

Helper to add an object to a buffer, formatted as expected for STREAM_HEADER_TRACK objects (so not all IDs) (only before v06)

Parameters
moqThe imquic_moq_context generating the object
bytesThe buffer to add the object to
blenThe size of the buffer
group_idThe group ID
object_idThe object ID
object_statusThe object status (only added if the payload length is 0)
payloadThe buffer containing the payload of the object
plenThe size of the payload buffer
Returns
The size of the generated object, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe()

size_t imquic_moq_add_subscribe ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t track_alias,
imquic_moq_namespace * track_namespace,
imquic_moq_name * track_name,
uint8_t priority,
uint8_t group_order,
imquic_moq_filter_type filter,
uint64_t start_group,
uint64_t start_object,
uint64_t end_group,
uint64_t end_object,
size_t params_num,
imquic_data * parameters )

Helper to add a SUBSCRIBE message (any version of the draft except v03) to a buffer.

Note
This sends the -04 or -05 variant of the message
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
track_aliasThe track alias to put in the message
track_namespaceThe namespace to put in the message
track_nameThe track name to put in the message
priorityThe subscriber priority to put in the message (only after v05)
group_orderThe group order to put in the message (only after v05)
filterThe filter as a imquic_moq_filter_type value
start_groupThe start group ID to put in the message
start_objectThe start object ID to put in the message
end_groupThe end group ID to put in the message
end_objectThe end object ID to put in the message
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe_announces()

size_t imquic_moq_add_subscribe_announces ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace,
size_t params_num,
imquic_data * parameters )

Helper to add a SUBSCRIBE_ANNOUNCES message (version -04 of the draft) to a buffer.

Note
This sends the -04 or -05 variant of the message
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceThe namespace to put in the message
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe_announces_error()

size_t imquic_moq_add_subscribe_announces_error ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace,
imquic_moq_error_code error,
const char * reason )

Helper method to add a SUBSCRIBE_ANNOUNCES_ERRROR message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceThe namespace to put in the message
errorError code associated to the message
reasonVerbose description of the error, if any
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe_announces_ok()

size_t imquic_moq_add_subscribe_announces_ok ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace )

Helper method to add a SUBSCRIBE_ANNOUNCES_OK message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceThe namespace to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe_done()

size_t imquic_moq_add_subscribe_done ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
imquic_moq_sub_done_code status,
const char * reason,
gboolean content_exists,
uint64_t final_group,
uint64_t final_object )

Helper method to add a SUBSCRIBE_DONE message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
statusThe status of the subscrption
reasonVerbose description of the status
content_existsWhether the following two properties should be added to the message
final_groupFinal group ID to add to the message, if needed
final_objectFinal object ID to add to the message, if needed
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe_error()

size_t imquic_moq_add_subscribe_error ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
imquic_moq_sub_error_code error,
const char * reason,
uint64_t track_alias )

Helper method to add a SUBSCRIBE_ERRROR message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
errorError code associated to the message
reasonVerbose description of the error, if any
track_aliasThe track alias to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe_ok()

size_t imquic_moq_add_subscribe_ok ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t expires,
imquic_moq_group_order group_order,
gboolean content_exists,
uint64_t largest_group_id,
uint64_t largest_object_id,
size_t params_num,
imquic_data * parameters )

Helper method to add a SUBSCRIBE_OK message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
expiresThe expires value to put in the message
group_orderThe group order to put in the message (only after v05)
content_existsWhether the following two properties should be added to the message
largest_group_idLargest group ID to add to the message, if needed
largest_object_idLargest object ID to add to the message, if needed
params_numNumber of parameters to add to the message, if any (only after v06)
parametersA buffer containing an already serialized list of parameters (only after v06)
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe_update()

size_t imquic_moq_add_subscribe_update ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t start_group,
uint64_t start_object,
uint64_t end_group,
uint64_t end_object,
uint8_t priority,
size_t params_num,
imquic_data * parameters )

Helper method to add a SUBSCRIBE_UPDATE message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
start_groupThe start group ID to put in the message
start_objectThe start object ID to put in the message
end_groupThe end group ID to put in the message
end_objectThe end object ID to put in the message
priorityThe subscriber priority to put in the message (only after v05)
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_subscribe_v03()

size_t imquic_moq_add_subscribe_v03 ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id,
uint64_t track_alias,
imquic_moq_namespace * track_namespace,
imquic_moq_name * track_name,
imquic_moq_location * start_group,
imquic_moq_location * start_object,
imquic_moq_location * end_group,
imquic_moq_location * end_object,
size_t params_num,
imquic_data * parameters )

Helper to add a SUBSCRIBE message (version -03 of the draft) to a buffer.

Note
This sends the -03 variant of the message
Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
track_aliasThe track alias to put in the message
track_namespaceThe namespace to put in the message
track_nameThe track name to put in the message
start_groupThe start group as a imquic_moq_location instance, if any
start_objectThe start object as a imquic_moq_location instance, if any
end_groupThe end group as a imquic_moq_location instance, if any
end_objectThe end object as a imquic_moq_location instance, if any
params_numNumber of parameters to add to the message, if any
parametersA buffer containing an already serialized list of parameters
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_track_status()

size_t imquic_moq_add_track_status ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace,
imquic_moq_name * track_name,
uint64_t status_code,
uint64_t last_group_id,
uint64_t last_object_id )

Helper to add a TRACK_STATUS message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceThe namespace to put in the message
track_nameThe track name to put in the message
status_codeThe status code to put in the message
last_group_idThe last group ID to put in the message
last_object_idThe last object ID to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_track_status_request()

size_t imquic_moq_add_track_status_request ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace,
imquic_moq_name * track_name )

Helper to add a TRACK_STATUS_REQUEST message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceThe namespace to put in the message
track_nameThe track name to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_unannounce()

size_t imquic_moq_add_unannounce ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace )

Helper method to add an UNANNOUNCE message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceNamespace to unannounce
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_unsubscribe()

size_t imquic_moq_add_unsubscribe ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint64_t subscribe_id )

Helper method to add an UNSUBSCRIBE message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
subscribe_idThe subscription ID to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_add_unsubscribe_announces()

size_t imquic_moq_add_unsubscribe_announces ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_namespace * track_namespace )

Helper method to add an UNSUBSCRIBE_ANNOUNCES message to a buffer.

Parameters
moqThe imquic_moq_context generating the message
bytesThe buffer to add the message to
blenThe size of the buffer
track_namespaceThe namespace to put in the message
Returns
The size of the generated message, if successful, or 0 otherwise

◆ imquic_moq_announce()

int imquic_moq_announce ( imquic_connection * conn,
imquic_moq_namespace * tns )

Function to send an ANNOUNCE request.

Parameters
connThe imquic_connection to send the request on
tnsThe imquic_moq_namespace namespace to announce
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_buffer_append()

void imquic_moq_buffer_append ( imquic_moq_buffer * buffer,
uint8_t * bytes,
uint64_t length )

Append data at the end of the buffer.

Note
This automatically resizes the buffer with imquic_moq_buffer_resize, if appending the new data would exceeds the buffer size.
Parameters
bufferBuffer to append the new data to
bytesData to append
lengthSize of the data to append

◆ imquic_moq_buffer_destroy()

void imquic_moq_buffer_destroy ( imquic_moq_buffer * buffer)

Destroy an existing buffer.

Parameters
bufferBuffer to destroy

◆ imquic_moq_buffer_resize()

gboolean imquic_moq_buffer_resize ( imquic_moq_buffer * buffer,
uint64_t new_size )

Resize an existing buffer.

Note
We can only increase the size of the buffer, not reduce it.
Parameters
bufferBuffer to resize
new_sizeNew size of the buffer
Returns
TRUE if successful, a negative integer otherwise

◆ imquic_moq_buffer_shift()

void imquic_moq_buffer_shift ( imquic_moq_buffer * buffer,
uint64_t length )

Move the data in the buffer back of a specific number of bytes.

Note
This automatically updates the buffer length accordingly.
Parameters
bufferBuffer to update
lengthHow many bytes back the buffer should be moved

◆ imquic_moq_cancel_fetch()

int imquic_moq_cancel_fetch ( imquic_connection * conn,
uint64_t subscribe_id )

Function to send a FETCH_CANCEL request.

Parameters
connThe imquic_connection to send the request on
subscribe_idThe unique subscribe_id value associated to the subscription to cancel_fetch from
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_connection_gone()

void imquic_moq_connection_gone ( imquic_connection * conn)

Callback the core invokes when an existing MoQ connection is not available anymore.

Parameters
connThe imquic_connection instance that is now gone

◆ imquic_moq_data_message_type_str()

const char * imquic_moq_data_message_type_str ( imquic_moq_data_message_type type)

Helper function to serialize to string the name of a imquic_moq_data_message_type value.

Parameters
typeThe imquic_data_moq_message_type value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_data_message_type_to_delivery()

imquic_moq_delivery imquic_moq_data_message_type_to_delivery ( imquic_moq_data_message_type type)

Helper function to return the imquic_moq_delivery mode associated to a imquic_moq_data_message_type type.

Parameters
typeThe imquic_data_moq_message_type value
Returns
The associated imquic_moq_delivery mode, if successful, or -1 otherwise

◆ imquic_moq_datagram_incoming()

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.

Parameters
connThe imquic_connection instance for which new DATAGRAM data is available
bytesThe new data that is available
lengthSize of the new data

◆ imquic_moq_deinit()

void imquic_moq_deinit ( void )

Uninitialize the native MoQ stack.

◆ imquic_moq_error_code_str()

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.

Parameters
codeThe imquic_moq_error_code value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_fetch()

int imquic_moq_fetch ( imquic_connection * conn,
uint64_t subscribe_id,
imquic_moq_namespace * tns,
imquic_moq_name * tn,
gboolean descending,
imquic_moq_fetch_range * range,
imquic_moq_auth_info * auth )

Function to send a FETCH request.

Parameters
connThe imquic_connection to send the request on
subscribe_idA unique numeric identifier to associate to this subscription
tnsThe imquic_moq_namespace namespace the track to fetch to belongs to
tnThe imquic_moq_name track name to fetch to
descendingWhether objects should be fetched in descending group order
rangeThe range of groups/objects to fetch
authThe imquic_moq_auth_info authentication info, if needed
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_filter_type_str()

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.

Parameters
typeThe imquic_moq_filter_type value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_get_role()

imquic_moq_role imquic_moq_get_role ( imquic_connection * conn)

Helper function to get the MoQ role associated with a connection.

Parameters
connThe imquic_connection to query
Returns
The imquic_moq_role value

◆ imquic_moq_get_version()

imquic_moq_version imquic_moq_get_version ( imquic_connection * conn)

Helper function to get the MoQ version associated with a connection.

Parameters
connThe imquic_connection to query
Returns
The imquic_moq_version value

◆ imquic_moq_group_order_str()

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.

Parameters
typeThe imquic_moq_group_order value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_init()

void imquic_moq_init ( void )

Initialize the native MoQ stack at startup.

◆ imquic_moq_location_mode_str()

const char * imquic_moq_location_mode_str ( imquic_moq_location_mode mode)

Helper function to serialize to string the name of a imquic_moq_location_mode value.

Parameters
modeThe imquic_moq_location_mode value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_message_type_str()

const char * imquic_moq_message_type_str ( imquic_moq_message_type type)

Helper function to serialize to string the name of a imquic_moq_message_type value.

Parameters
typeThe imquic_moq_message_type value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_new_connection()

void imquic_moq_new_connection ( imquic_connection * conn,
void * user_data )

Callback the core invokes when a new QUIC connection using MoQ is available.

Parameters
connThe imquic_connection instance that is now available
user_dataOptional user data the user/application may have associated to the endpoint this connection belongs to

◆ imquic_moq_parameter_add_data()

size_t imquic_moq_parameter_add_data ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
int param,
uint8_t * buf,
size_t buflen )

Helper to add a MoQ (setup or subscribe) parameter with generic data to a buffer.

Parameters
moqThe imquic_moq_context instance the parameter is for
bytesBuffer to add the parameter to
blenSize of the buffer
paramID of the parameter to add
bufThe data acting as a value for the parameter to add
buflenThe size of the data value
Returns
The size of the parameter, if successful, or 0 otherwise

◆ imquic_moq_parameter_add_int()

size_t imquic_moq_parameter_add_int ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
int param,
uint64_t number )

Helper to add a MoQ (setup or subscribe) parameter with a numeric value to a buffer.

Parameters
moqThe imquic_moq_context instance the parameter is for
bytesBuffer to add the parameter to
blenSize of the buffer
paramID of the parameter to add
numberThe numeric value of the parameter to add
Returns
The size of the parameter, if successful, or 0 otherwise

◆ imquic_moq_parse_announce()

size_t imquic_moq_parse_announce ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse an ANNOUNCE message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_announce_cancel()

size_t imquic_moq_parse_announce_cancel ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse an ANNOUNCE_CANCEL message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_announce_error()

size_t imquic_moq_parse_announce_error ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse an ANNOUNCE_ERROR message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_announce_ok()

size_t imquic_moq_parse_announce_ok ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse an ANNOUNCE_OK message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_client_setup()

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.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_fetch()

size_t imquic_moq_parse_fetch ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a FETCH message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_fetch_cancel()

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.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_fetch_error()

size_t imquic_moq_parse_fetch_error ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a FETCH_ERROR message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_fetch_header()

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.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]moq_streamThe imquic_moq_context instance the object is from
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_fetch_header_object()

int imquic_moq_parse_fetch_header_object ( imquic_moq_context * moq,
imquic_moq_stream * moq_stream,
gboolean complete )

Helper to parse a FETCH_HEADER object.

Note
A negative response doesn't mean there's an error, but just that the object isn't complete yet and we need to wait for more data.
Parameters
[in]moqThe imquic_moq_context instance the object is for
[in]moq_streamThe imquic_moq_context instance the object is from
[in]completeWhether this data marks the completion of the QUIC stream it came from
Returns
0 in case of success, or a negative integer otherwise

◆ imquic_moq_parse_fetch_ok()

size_t imquic_moq_parse_fetch_ok ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a FETCH_OK message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_goaway()

size_t imquic_moq_parse_goaway ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a GOAWAY message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_max_subscribe_id()

size_t imquic_moq_parse_max_subscribe_id ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to pars an MAX_SUBSCRIBE_ID message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_message()

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.

Note
This will iterate on a buffer, trying to parse as many messages as possible in a sequential way. In case a message is incomplete (e.g., because we're still waiting on STREAM data), we move back to the beginning of the buffer and return, waiting for more data to arrive.
Parameters
moqThe imquic_moq_context instance the message is for
stream_idThe QUIC stream ID the message came from
bytesThe buffer containing the message to parse
blenSize of the buffer to parse
completeWhether this data marks the completion of the QUIC stream it came from
datagramWhether this is not coming from a STREAM but a DATAGRAM
Returns
0 in case of success, or a negative integer otherwise

◆ imquic_moq_parse_object_datagram()

size_t imquic_moq_parse_object_datagram ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse an OBJECT_DATAGRAM message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_object_stream()

size_t imquic_moq_parse_object_stream ( imquic_moq_context * moq,
imquic_moq_stream * moq_stream,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse an OBJECT_STREAM message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]moq_streamThe imquic_moq_context instance the message came from
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_server_setup()

size_t imquic_moq_parse_server_setup ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to pars an SERVER_SETUP message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_setup_parameter()

size_t imquic_moq_parse_setup_parameter ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_parsed_setup_parameter * param,
uint8_t * error )

Helper method to parse a MoQ setup parameter.

Note
This method does nothing at the moment
Parameters
[in]moqThe imquic_moq_context instance to update with the new parameter
[in]bytesBuffer containing the parameter to parse
[in]blenSize of the buffer to parse
[out]paramimquic_moq_parsed_setup_parameter instance to put the parsed parameter in
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parameter, if successful, or 0 otherwise

◆ imquic_moq_parse_stream_header_group()

size_t imquic_moq_parse_stream_header_group ( imquic_moq_context * moq,
imquic_moq_stream * moq_stream,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a STREAM_HEADER_GROUP message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]moq_streamThe imquic_moq_context instance the message came from
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_stream_header_group_object()

int imquic_moq_parse_stream_header_group_object ( imquic_moq_context * moq,
imquic_moq_stream * moq_stream,
gboolean complete )

Helper to parse a STREAM_HEADER_GROUP object.

Note
A negative response doesn't mean there's an error, but just that the object isn't complete yet and we need to wait for more data.
Parameters
[in]moqThe imquic_moq_context instance the object is for
[in]moq_streamThe imquic_moq_context instance the object is from
[in]completeWhether this data marks the completion of the QUIC stream it came from
Returns
0 in case of success, or a negative integer otherwise

◆ imquic_moq_parse_stream_header_subgroup()

size_t imquic_moq_parse_stream_header_subgroup ( imquic_moq_context * moq,
imquic_moq_stream * moq_stream,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a STREAM_HEADER_SUBGROUP message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]moq_streamThe imquic_moq_context instance the message came from
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_stream_header_subgroup_object()

int imquic_moq_parse_stream_header_subgroup_object ( imquic_moq_context * moq,
imquic_moq_stream * moq_stream,
gboolean complete )

Helper to parse a STREAM_HEADER_SUBGROUP object.

Note
A negative response doesn't mean there's an error, but just that the object isn't complete yet and we need to wait for more data.
Parameters
[in]moqThe imquic_moq_context instance the object is for
[in]moq_streamThe imquic_moq_context instance the object is from
[in]completeWhether this data marks the completion of the QUIC stream it came from
Returns
0 in case of success, or a negative integer otherwise

◆ imquic_moq_parse_stream_header_track()

size_t imquic_moq_parse_stream_header_track ( imquic_moq_context * moq,
imquic_moq_stream * moq_stream,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a STREAM_HEADER_TRACK message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]moq_streamThe imquic_moq_context instance the object is from
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_stream_header_track_object()

int imquic_moq_parse_stream_header_track_object ( imquic_moq_context * moq,
imquic_moq_stream * moq_stream,
gboolean complete )

Helper to parse a STREAM_HEADER_TRACK object.

Note
A negative response doesn't mean there's an error, but just that the object isn't complete yet and we need to wait for more data.
Parameters
[in]moqThe imquic_moq_context instance the object is for
[in]moq_streamThe imquic_moq_context instance the object is from
[in]completeWhether this data marks the completion of the QUIC stream it came from
Returns
0 in case of success, or a negative integer otherwise

◆ imquic_moq_parse_subscribe()

size_t imquic_moq_parse_subscribe ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a SUBSCRIBE message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_subscribe_announces()

size_t imquic_moq_parse_subscribe_announces ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a SUBSCRIBE_ANNOUNCES message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_subscribe_announces_error()

size_t imquic_moq_parse_subscribe_announces_error ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a SUBSCRIBE_ANNOUNCES_ERROR message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_subscribe_announces_ok()

size_t imquic_moq_parse_subscribe_announces_ok ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a SUBSCRIBE_ANNOUNCES_OK message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_subscribe_done()

size_t imquic_moq_parse_subscribe_done ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a SUBSCRIBE_DONE message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_subscribe_error()

size_t imquic_moq_parse_subscribe_error ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a SUBSCRIBE_ERROR message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_subscribe_ok()

size_t imquic_moq_parse_subscribe_ok ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a SUBSCRIBE_OK message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_subscribe_parameter()

size_t imquic_moq_parse_subscribe_parameter ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
imquic_moq_parsed_subscribe_parameter * param,
uint8_t * error )

Helper method to parse a MoQ subscribe parameter.

Note
This method does nothing at the moment
Parameters
[in]moqThe imquic_moq_context instance to update with the new parameter
[in]bytesBuffer containing the parameter to parse
[in]blenSize of the buffer to parse
[out]paramimquic_moq_parsed_subscribe_parameter instance to put the parsed parameter in
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parameter, if successful, or 0 otherwise

◆ imquic_moq_parse_subscribe_update()

size_t imquic_moq_parse_subscribe_update ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a SUBSCRIBE_UPDATE message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_track_status()

size_t imquic_moq_parse_track_status ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a TRACK_STATUS message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_track_status_request()

size_t imquic_moq_parse_track_status_request ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse a TRACK_STATUS_REQUEST message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_unannounce()

size_t imquic_moq_parse_unannounce ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse an UNANNOUNCE message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_unsubscribe()

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.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_parse_unsubscribe_announces()

size_t imquic_moq_parse_unsubscribe_announces ( imquic_moq_context * moq,
uint8_t * bytes,
size_t blen,
uint8_t * error )

Helper to parse an UNSUBSCRIBE_ANNOUNCES message.

Parameters
[in]moqThe imquic_moq_context instance the message is for
[in]bytesThe buffer containing the message to parse
[in]blenSize of the buffer to parse
[out]errorIn/out property, initialized to 0 and set to 1 in case of parsing errors
Returns
The size of the parsed message, if successful, or 0 otherwise

◆ imquic_moq_reject_announce()

int imquic_moq_reject_announce ( imquic_connection * conn,
imquic_moq_namespace * tns,
int error_code,
const char * reason )

Function to reject an incoming ANNOUNCE request.

Parameters
connThe imquic_connection to send the request on
tnsThe imquic_moq_namespace namespace to reject
error_codeThe error code to send back
reasonA string representation of the error, if needed
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_reject_fetch()

int imquic_moq_reject_fetch ( imquic_connection * conn,
uint64_t subscribe_id,
int error_code,
const char * reason )

Function to reject an incoming FETCH request.

Parameters
connThe imquic_connection to send the request on
subscribe_idThe unique subscribe_id value associated to the subscription to reject
error_codeThe error code to send back
reasonA string representation of the error, if needed
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_reject_subscribe()

int imquic_moq_reject_subscribe ( imquic_connection * conn,
uint64_t subscribe_id,
int error_code,
const char * reason,
uint64_t track_alias )

Function to reject an incoming SUBSCRIBE request.

Parameters
connThe imquic_connection to send the request on
subscribe_idThe unique subscribe_id value associated to the subscription to reject
error_codeThe error code to send back
reasonA string representation of the error, if needed
track_aliasThe unique track_alias value associated to the subscription to reject
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_reject_subscribe_announces()

int imquic_moq_reject_subscribe_announces ( imquic_connection * conn,
imquic_moq_namespace * tns,
int error_code,
const char * reason )

Function to reject an incoming SUBSCRIBE_ANNOUNCES request.

Parameters
connThe imquic_connection to send the request on
tnsThe imquic_moq_namespace namespace to reject notifications for
error_codeThe error code to send back
reasonA string representation of the error, if needed
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_role_type_str()

const char * imquic_moq_role_type_str ( imquic_moq_role_type type)

Helper function to serialize to string the name of a imquic_moq_role_type value.

Parameters
typeThe imquic_moq_role_type value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_send_object()

int imquic_moq_send_object ( imquic_connection * conn,
imquic_moq_object * object )

Function to send a MoQ object.

Note
Depending on the delivery mode, to close the stream set the end_of_stream property to TRUE in the object. There's no need to do that when using OBJECT_STREAM or OBJECT_DATAGRAM . You can also close the stream when you don't have any object to send: just set the relevant properties (e.g., subscribe_id, group_id and subgroup_id) without any payload, and the stack will find the right stream to close it.
Parameters
connThe imquic_connection to send the object on
objectThe imquic_moq_object object to send, including all relevant identifiers and the payload
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_set_max_subscribe_id()

int imquic_moq_set_max_subscribe_id ( imquic_connection * conn,
uint64_t max_subscribe_id )

Helper function to set the Maximum Subscribe ID a subscriber can send.

Note
If invoked before the MoQ connection setup, it will be put in the setup parameter, otherwise it's sent in a MAX_SUBSCRIBE_ID request
Parameters
connThe imquic_connection to update
max_subscribe_idThe Maximum Subscribe ID to enforce
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_set_role()

int imquic_moq_set_role ( imquic_connection * conn,
imquic_moq_role role )

Method to set the MoQ role on a connection. Must be done as soon as the connection is established, and before sending any MoQ message. A good place to do that is the callback fired when a new connection is available.

Note
The role can only be set once: it's an error to try and change it later, since the MoQ handshake will already have taken place.
Parameters
connThe imquic_connection to set the role on
roleThe imquic_moq_role to take
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_set_version()

int imquic_moq_set_version ( imquic_connection * conn,
imquic_moq_version version )

Method to set the MoQ version on a connection. Must be done as soon as the connection is established, and before sending any MoQ message. A good place to do that is the callback fired when a new connection is available.

Note
The version can only be set once: it's an error to try and change it later, since the MoQ handshake will already have taken place.
Parameters
connThe imquic_connection to set the version on
versionThe imquic_moq_version to use/offer
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_setup_parameter_type_str()

const char * imquic_moq_setup_parameter_type_str ( imquic_moq_setup_parameter_type type)

Helper function to serialize to string the name of a imquic_moq_setup_parameter_type value.

Parameters
typeThe imquic_moq_setup_parameter_type value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_stream_destroy()

void imquic_moq_stream_destroy ( imquic_moq_stream * moq_stream)

Destroy an existing MoQ stream.

Parameters
moq_streamMoQ stream to destroy

◆ imquic_moq_stream_incoming()

void imquic_moq_stream_incoming ( imquic_connection * conn,
uint64_t stream_id,
uint8_t * bytes,
uint64_t offset,
uint64_t length,
gboolean complete )

Callback the core invokes when there's new incoming data on a STREAM.

Parameters
connThe imquic_connection instance for which new STREAM data is available
stream_idThe QUIC Stream ID for which new data is available
bytesThe new data that is available
offsetThe offset in the stream this new data should be put in
lengthSize of the new data
completeWhether this data marks the end of this STREAM

◆ imquic_moq_sub_done_code_str()

const char * imquic_moq_sub_done_code_str ( imquic_moq_sub_done_code code)

Helper function to serialize to string the name of a imquic_moq_sub_done_code value.

Parameters
codeThe imquic_moq_sub_done_code value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_sub_error_code_str()

const char * imquic_moq_sub_error_code_str ( imquic_moq_sub_error_code code)

Helper function to serialize to string the name of a imquic_moq_error_code value.

Parameters
codeThe imquic_moq_error_code value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_subscribe()

int imquic_moq_subscribe ( imquic_connection * conn,
uint64_t subscribe_id,
uint64_t track_alias,
imquic_moq_namespace * tns,
imquic_moq_name * tn,
imquic_moq_auth_info * auth )

Function to send a SUBSCRIBE request.

Parameters
connThe imquic_connection to send the request on
subscribe_idA unique numeric identifier to associate to this subscription
track_aliasA unique numeric identifier to associate to the track in this subscription
tnsThe imquic_moq_namespace namespace the track to subscribe to belongs to
tnThe imquic_moq_name track name to subscribe to
authThe imquic_moq_auth_info authentication info, if needed
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_subscribe_announces()

int imquic_moq_subscribe_announces ( imquic_connection * conn,
imquic_moq_namespace * tns,
imquic_moq_auth_info * auth )

Function to send a SUBSCRIBE_ANNOUNCES request.

Parameters
connThe imquic_connection to send the request on
tnsThe imquic_moq_namespace namespace the track to subscribe to belongs to
authThe imquic_moq_auth_info authentication info, if needed
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_subscribe_parameter_type_str()

const char * imquic_moq_subscribe_parameter_type_str ( imquic_moq_subscribe_parameter_type type)

Helper function to serialize to string the name of a imquic_moq_subscribe_parameter_type value.

Parameters
typeThe imquic_moq_subscribe_parameter_type value
Returns
The type name as a string, if valid, or NULL otherwise

◆ imquic_moq_subscription_create()

imquic_moq_subscription * imquic_moq_subscription_create ( uint64_t subscribe_id,
uint64_t track_alias )

Helper to create a new subscription instance.

Parameters
subscribe_idThe subscription ID
track_aliasThe track alias
Returns
A pointer to a imquic_moq_subscription, if successful, or NULL otherwise

◆ imquic_moq_subscription_destroy()

void imquic_moq_subscription_destroy ( imquic_moq_subscription * moq_sub)

Destroy an existing MoQ subscription.

Parameters
moq_subMoQ subscription to destroy

◆ imquic_moq_unannounce()

int imquic_moq_unannounce ( imquic_connection * conn,
imquic_moq_namespace * tns )

Function to send an UNANNOUNCE request.

Parameters
connThe imquic_connection to send the request on
tnsThe imquic_moq_namespace namespace to unannounce
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_unsubscribe()

int imquic_moq_unsubscribe ( imquic_connection * conn,
uint64_t subscribe_id )

Function to send a UNSUBSCRIBE request.

Parameters
connThe imquic_connection to send the request on
subscribe_idThe unique subscribe_id value associated to the subscription to unsubscribe from
Returns
0 in case of success, a negative integer otherwise

◆ imquic_moq_unsubscribe_announces()

int imquic_moq_unsubscribe_announces ( imquic_connection * conn,
imquic_moq_namespace * tns )

Function to send a UNSUBSCRIBE_ANNOUNCES request.

Parameters
connThe imquic_connection to send the request on
tnsThe imquic_moq_namespace namespace to unsubscribe notifications from
Returns
0 in case of success, a negative integer otherwise