blob: e2a34ada24f99b96784c25db3460e3f9c0f42791 [file] [log] [blame]
#pragma once
#include <rawrtc.h>
#include <rawrtcc.h>
#include <rawrtcdc.h>
#include <re.h>
enum {
PARAMETERS_MAX_LENGTH = 8192,
};
/*
* SCTP parameters that need to be negotiated.
*/
struct sctp_parameters {
struct rawrtc_sctp_capabilities* capabilities;
uint16_t port;
};
/*
* Client structure. Can be extended.
*/
struct client {
char* name;
char** ice_candidate_types;
size_t n_ice_candidate_types;
};
/*
* Data channel helper structure. Can be extended.
*/
struct data_channel_helper {
struct le le;
struct rawrtc_data_channel* channel;
char* label;
struct client* client;
void* arg;
};
/*
* Ignore success code list.
*/
extern enum rawrtc_code const ignore_success[];
extern size_t const ignore_success_length;
/*
* Helper macros for exiting with error messages.
*/
#define EOE(code) exit_on_error(code, ignore_success, ignore_success_length, __FILE__, __LINE__)
#define EOEIGN(code, ignore) exit_on_error(code, ignore, ARRAY_SIZE(ignore), __FILE__, __LINE__)
#define EOR(code) exit_on_posix_error(code, __FILE__, __LINE__)
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (__GNUC__ >= 3)
# define EWE(...) exit_with_error(__FILE__, __LINE__, __VA_ARGS__)
#elif defined(__GNUC__)
# define EWE(args...) exit_with_error(__FILE__, __LINE__, args)
#endif
/*
* Function to be called before exiting.
*/
void before_exit(void);
/*
* Exit on error code.
*/
void exit_on_error(
enum rawrtc_code const code,
enum rawrtc_code const ignore[],
size_t const n_ignore,
char const* const file,
uint32_t const line);
/*
* Exit on POSIX error code.
*/
void exit_on_posix_error(int code, char const* const file, uint32_t line);
/*
* Exit with a custom error message.
*/
void exit_with_error(char const* const file, uint32_t line, char const* const formatter, ...);
/*
* Check if the ICE candidate type is enabled.
*/
bool ice_candidate_type_enabled(
struct client* const client, enum rawrtc_ice_candidate_type const type);
/*
* Print ICE candidate information.
*/
void print_ice_candidate(
struct rawrtc_ice_candidate* const candidate,
char const* const url, // read-only
struct rawrtc_peer_connection_ice_candidate* const pc_candidate, // nullable
struct client* const client);