ICE/STUN/TURN processing. More...
#include <ifaddrs.h>
#include <poll.h>
#include <net/if.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netdb.h>
#include <fcntl.h>
#include <stun/usages/bind.h>
#include <nice/debug.h>
#include "janus.h"
#include "debug.h"
#include "ice.h"
#include "turnrest.h"
#include "sdp.h"
#include "rtpsrtp.h"
#include "rtcp.h"
#include "apierror.h"
#include "ip-utils.h"
#include "events.h"
Data Structures | |
struct | janus_ice_static_event_loop |
struct | janus_ice_queued_packet |
struct | janus_ice_nacked_packet |
struct | janus_ice_outgoing_traffic |
Macros | |
#define | JANUS_ICE_PACKET_AUDIO 0 |
#define | JANUS_ICE_PACKET_VIDEO 1 |
#define | JANUS_ICE_PACKET_TEXT 2 |
#define | JANUS_ICE_PACKET_BINARY 3 |
#define | JANUS_ICE_PACKET_SCTP 4 |
#define | DEFAULT_NO_MEDIA_TIMER 1 |
#define | DEFAULT_SLOWLINK_THRESHOLD 4 |
#define | DEFAULT_TWCC_PERIOD 200 |
#define | DEFAULT_MIN_NACK_QUEUE 200 |
#define | DEFAULT_MAX_NACK_QUEUE 1000 |
#define | MAX_NACK_IGNORE 200000 |
#define | SEQ_MISSING_WAIT 12000 /* 12ms */ |
#define | SEQ_NACKED_WAIT 155000 /* 155ms */ |
Typedefs | |
typedef struct janus_ice_static_event_loop | janus_ice_static_event_loop |
typedef struct janus_ice_queued_packet | janus_ice_queued_packet |
typedef struct janus_ice_nacked_packet | janus_ice_nacked_packet |
typedef struct janus_ice_outgoing_traffic | janus_ice_outgoing_traffic |
Functions | |
char * | janus_ice_get_stun_server (void) |
Method to get the STUN server IP address. More... | |
uint16_t | janus_ice_get_stun_port (void) |
Method to get the STUN server port. More... | |
char * | janus_ice_get_turn_server (void) |
Method to get the TURN server IP address. More... | |
uint16_t | janus_ice_get_turn_port (void) |
Method to get the TURN server port. More... | |
char * | janus_ice_get_turn_rest_api (void) |
Method to get the specified TURN REST API backend, if any. More... | |
gboolean | janus_ice_is_ice_lite_enabled (void) |
Method to check whether ICE Lite mode is enabled or not (still WIP) More... | |
gboolean | janus_ice_is_ice_tcp_enabled (void) |
Method to check whether ICE-TCP support is enabled/supported or not (still WIP) More... | |
gboolean | janus_ice_is_full_trickle_enabled (void) |
Method to check whether full-trickle support is enabled or not. More... | |
gboolean | janus_ice_is_mdns_enabled (void) |
Method to check whether mDNS resolution is enabled or not. More... | |
gboolean | janus_ice_is_ipv6_enabled (void) |
Method to check whether IPv6 candidates are enabled/supported or not (still WIP) More... | |
void | janus_enable_opaqueid_in_api (void) |
Method to enable opaque ID in Janus API responses/events. More... | |
gboolean | janus_is_opaqueid_in_api_enabled (void) |
Method to check whether opaque ID have to be added to Janus API responses/events. More... | |
int | janus_ice_get_static_event_loops (void) |
Method to return the number of static event loops, if enabled. More... | |
void | janus_ice_set_static_event_loops (int loops) |
Method to configure the static event loops mechanism at startup. More... | |
void | janus_ice_stop_static_event_loops (void) |
Method to stop all the static event loops, if enabled. More... | |
gboolean | janus_ice_is_ice_debugging_enabled (void) |
Method to check whether libnice debugging has been enabled (http://nice.freedesktop.org/libnice/libnice-Debug-messages.html) More... | |
void | janus_ice_debugging_enable (void) |
Method to enable libnice debugging (http://nice.freedesktop.org/libnice/libnice-Debug-messages.html) More... | |
void | janus_ice_debugging_disable (void) |
Method to disable libnice debugging (the default) More... | |
void | janus_ice_enable_nat_1_1 (gboolean kph) |
Helper method to force Janus to overwrite all host candidates with the public IP. More... | |
void | janus_ice_enforce_interface (const char *ip) |
Method to add an interface/IP to the enforce list for ICE (that is, only gather candidates from these and ignore the others) More... | |
gboolean | janus_ice_is_enforced (const char *ip) |
Method to check whether an interface is currently in the enforce list for ICE (that is, won't have candidates) More... | |
void | janus_ice_ignore_interface (const char *ip) |
Method to add an interface/IP to the ignore list for ICE (that is, don't gather candidates) More... | |
gboolean | janus_ice_is_ignored (const char *ip) |
Method to check whether an interface/IP is currently in the ignore list for ICE (that is, won't have candidates) More... | |
void | janus_ice_set_event_stats_period (int period) |
Method to modify the event handler statistics period (i.e., the number of seconds that should pass before Janus notifies event handlers about media statistics for a PeerConnection) More... | |
int | janus_ice_get_event_stats_period (void) |
Method to get the current event handler statistics period (see above) More... | |
void | janus_set_no_media_timer (uint timer) |
Method to modify the no-media event timer (i.e., the number of seconds where no media arrives before Janus notifies this) More... | |
uint | janus_get_no_media_timer (void) |
Method to get the current no-media event timer (see above) More... | |
void | janus_set_slowlink_threshold (uint packets) |
Method to modify the slowlink-threshold property (i.e., the number of lost packets per seconds that should trigger a slow-link event) More... | |
uint | janus_get_slowlink_threshold (void) |
Method to get the current slowlink-threshold value (see above) More... | |
void | janus_set_twcc_period (uint period) |
Method to modify the TWCC feedback period (i.e., how often TWCC feedback is sent back to media senders) More... | |
uint | janus_get_twcc_period (void) |
Method to get the current TWCC period (see above) More... | |
void | janus_set_dscp (int dscp) |
Method to modify the DSCP value to set, which is disabled by default. More... | |
int | janus_get_dscp (void) |
Method to get the current DSCP value (see above) More... | |
void | janus_set_min_nack_queue (uint16_t mnq) |
Method to modify the min NACK value (i.e., the minimum time window of packets per handle to store for retransmissions) More... | |
uint16_t | janus_get_min_nack_queue (void) |
Method to get the current min NACK value (i.e., the minimum time window of packets per handle to store for retransmissions) More... | |
void | janus_seq_list_free (janus_seq_info **head) |
void | janus_ice_relay_rtcp_internal (janus_ice_handle *handle, janus_plugin_rtcp *packet, gboolean filter_rtcp) |
gboolean | janus_plugin_session_is_alive (janus_plugin_session *plugin_session) |
Quick helper method to check if a plugin session associated with a Janus handle is still valid. More... | |
void | janus_ice_notify_hangup (janus_ice_handle *handle, const char *reason) |
Quick helper method to notify a WebRTC hangup through the Janus API. More... | |
janus_ice_trickle * | janus_ice_trickle_new (const char *transaction, json_t *candidate) |
Helper method to allocate a janus_ice_trickle instance. More... | |
gint | janus_ice_trickle_parse (janus_ice_handle *handle, json_t *candidate, const char **error) |
Helper method to parse trickle candidates. More... | |
void | janus_ice_trickle_destroy (janus_ice_trickle *trickle) |
Helper method to destroy a janus_ice_trickle instance. More... | |
void | janus_ice_init (gboolean ice_lite, gboolean ice_tcp, gboolean full_trickle, gboolean ignore_mdns, gboolean ipv6, uint16_t rtp_min_port, uint16_t rtp_max_port) |
ICE stuff initialization. More... | |
void | janus_ice_deinit (void) |
ICE stuff de-initialization. More... | |
int | janus_ice_test_stun_server (janus_network_address *addr, uint16_t port, uint16_t local_port, janus_network_address *public_addr, uint16_t *public_port) |
Method to check whether a STUN server is reachable. More... | |
int | janus_ice_set_stun_server (gchar *stun_server, uint16_t stun_port) |
Method to force Janus to use a STUN server when gathering candidates. More... | |
int | janus_ice_set_turn_server (gchar *turn_server, uint16_t turn_port, gchar *turn_type, gchar *turn_user, gchar *turn_pwd) |
Method to force Janus to use a TURN server when gathering candidates. More... | |
int | janus_ice_set_turn_rest_api (gchar *api_server, gchar *api_key, gchar *api_method) |
Method to force Janus to contact a TURN REST API server to get a TURN service to use when gathering candidates. The TURN REST API takes precedence over any static credential passed via janus_ice_set_turn_server. More... | |
const gchar * | janus_get_ice_state_name (gint state) |
Helper method to get a string representation of a libnice ICE state. More... | |
janus_ice_handle * | janus_ice_handle_create (void *core_session, const char *opaque_id, const char *token) |
Method to create a new Janus ICE handle. More... | |
gint | janus_ice_handle_attach_plugin (void *core_session, janus_ice_handle *handle, janus_plugin *plugin) |
Method to attach a Janus ICE handle to a plugin. More... | |
gint | janus_ice_handle_destroy (void *core_session, janus_ice_handle *handle) |
Method to destroy a Janus ICE handle. More... | |
void | janus_ice_webrtc_hangup (janus_ice_handle *handle, const char *reason) |
Method to only hangup (e.g., DTLS alert) the WebRTC PeerConnection allocated by a Janus ICE handle. More... | |
void | janus_ice_stream_destroy (janus_ice_stream *stream) |
Method to only free resources related to a specific ICE stream allocated by a Janus ICE handle. More... | |
void | janus_ice_component_destroy (janus_ice_component *component) |
Method to only free resources related to a specific ICE component allocated by a Janus ICE handle. More... | |
void | janus_ice_incoming_data (janus_ice_handle *handle, char *label, char *protocol, gboolean textdata, char *buffer, int length) |
Plugin SCTP/DataChannel callback, called by the SCTP stack when when there's data for a plugin. More... | |
void | janus_ice_candidates_to_sdp (janus_ice_handle *handle, janus_sdp_mline *mline, guint stream_id, guint component_id) |
Method to add local candidates to a janus_sdp SDP object representation. More... | |
void | janus_ice_add_remote_candidate (janus_ice_handle *handle, NiceCandidate *c) |
Method to queue a remote candidate for processing. More... | |
void | janus_ice_setup_remote_candidates (janus_ice_handle *handle, guint stream_id, guint component_id) |
Method to handle remote candidates and start the connectivity checks. More... | |
int | janus_ice_setup_local (janus_ice_handle *handle, int offer, int audio, int video, int data, int trickle) |
Method to locally set up the ICE candidates (initialization and gathering) More... | |
void | janus_ice_restart (janus_ice_handle *handle) |
Method to restart ICE and the connectivity checks. More... | |
void | janus_ice_resend_trickles (janus_ice_handle *handle) |
Method to resend all the existing candidates via trickle (e.g., after an ICE restart) More... | |
void | janus_ice_relay_rtp (janus_ice_handle *handle, janus_plugin_rtp *packet) |
Core RTP callback, called when a plugin has an RTP packet to send to a peer. More... | |
void | janus_ice_relay_rtcp (janus_ice_handle *handle, janus_plugin_rtcp *packet) |
Core RTCP callback, called when a plugin has an RTCP message to send to a peer. More... | |
void | janus_ice_send_pli (janus_ice_handle *handle) |
Helper core callback, called when a plugin wants to send a RTCP PLI to a peer. More... | |
void | janus_ice_send_remb (janus_ice_handle *handle, uint32_t bitrate) |
Helper core callback, called when a plugin wants to send a RTCP REMB to a peer. More... | |
void | janus_ice_relay_sctp (janus_ice_handle *handle, char *buffer, int length) |
Core SCTP/DataChannel callback, called by the SCTP stack when when there's data to send. More... | |
void | janus_ice_notify_data_ready (janus_ice_handle *handle) |
Plugin SCTP/DataChannel callback, called by the SCTP stack when data can be written. More... | |
void | janus_ice_dtls_handshake_done (janus_ice_handle *handle, janus_ice_component *component) |
Callback to be notified when the DTLS handshake for a specific component has been completed. More... | |
Variables | |
GList * | janus_ice_enforce_list = NULL |
GList * | janus_ice_ignore_list = NULL |
janus_mutex | ice_list_mutex |
uint16_t | rtp_range_min = 0 |
uint16_t | rtp_range_max = 0 |
ICE/STUN/TURN processing.
Implementation (based on libnice) of the ICE process. The code handles the whole ICE process, from the gathering of candidates to the final setup of a virtual channel RTP and RTCP can be transported on. Incoming RTP and RTCP packets from peers are relayed to the associated plugins by means of the incoming_rtp and incoming_rtcp callbacks. Packets to be sent to peers are relayed by peers invoking the relay_rtp and relay_rtcp core callbacks instead.
#define DEFAULT_MAX_NACK_QUEUE 1000 |
#define DEFAULT_MIN_NACK_QUEUE 200 |
#define DEFAULT_NO_MEDIA_TIMER 1 |
#define DEFAULT_SLOWLINK_THRESHOLD 4 |
#define DEFAULT_TWCC_PERIOD 200 |
#define JANUS_ICE_PACKET_AUDIO 0 |
#define JANUS_ICE_PACKET_BINARY 3 |
#define JANUS_ICE_PACKET_SCTP 4 |
#define JANUS_ICE_PACKET_TEXT 2 |
#define JANUS_ICE_PACKET_VIDEO 1 |
#define MAX_NACK_IGNORE 200000 |
#define SEQ_MISSING_WAIT 12000 /* 12ms */ |
#define SEQ_NACKED_WAIT 155000 /* 155ms */ |
typedef struct janus_ice_nacked_packet janus_ice_nacked_packet |
typedef struct janus_ice_outgoing_traffic janus_ice_outgoing_traffic |
typedef struct janus_ice_queued_packet janus_ice_queued_packet |
typedef struct janus_ice_static_event_loop janus_ice_static_event_loop |
void janus_enable_opaqueid_in_api | ( | void | ) |
Method to enable opaque ID in Janus API responses/events.
int janus_get_dscp | ( | void | ) |
Method to get the current DSCP value (see above)
const gchar* janus_get_ice_state_name | ( | gint | state | ) |
Helper method to get a string representation of a libnice ICE state.
[in] | state | The libnice ICE state |
uint16_t janus_get_min_nack_queue | ( | void | ) |
Method to get the current min NACK value (i.e., the minimum time window of packets per handle to store for retransmissions)
uint janus_get_no_media_timer | ( | void | ) |
Method to get the current no-media event timer (see above)
uint janus_get_slowlink_threshold | ( | void | ) |
Method to get the current slowlink-threshold value (see above)
uint janus_get_twcc_period | ( | void | ) |
Method to get the current TWCC period (see above)
void janus_ice_add_remote_candidate | ( | janus_ice_handle * | handle, |
NiceCandidate * | c | ||
) |
Method to queue a remote candidate for processing.
[in] | handle | The Janus ICE handle this method refers to |
[in] | c | The remote NiceCandidate to process |
void janus_ice_candidates_to_sdp | ( | janus_ice_handle * | handle, |
janus_sdp_mline * | mline, | ||
guint | stream_id, | ||
guint | component_id | ||
) |
Method to add local candidates to a janus_sdp SDP object representation.
[in] | handle | The Janus ICE handle this method refers to |
[in] | mline | The Janus SDP m-line object to add candidates to |
[in] | stream_id | The stream ID of the candidate to add to the SDP |
[in] | component_id | The component ID of the candidate to add to the SDP |
void janus_ice_component_destroy | ( | janus_ice_component * | component | ) |
Method to only free resources related to a specific ICE component allocated by a Janus ICE handle.
[in] | component | The Janus ICE component instance to free |
void janus_ice_debugging_disable | ( | void | ) |
Method to disable libnice debugging (the default)
void janus_ice_debugging_enable | ( | void | ) |
Method to enable libnice debugging (http://nice.freedesktop.org/libnice/libnice-Debug-messages.html)
void janus_ice_deinit | ( | void | ) |
ICE stuff de-initialization.
void janus_ice_dtls_handshake_done | ( | janus_ice_handle * | handle, |
janus_ice_component * | component | ||
) |
Callback to be notified when the DTLS handshake for a specific component has been completed.
This method also decides when to notify attached plugins about the availability of a reliable PeerConnection
[in] | handle | The Janus ICE handle this callback refers to |
[in] | component | The Janus ICE component that is now ready to be used |
void janus_ice_enable_nat_1_1 | ( | gboolean | keep_private_host | ) |
Helper method to force Janus to overwrite all host candidates with the public IP.
[in] | keep_private_host | Whether we should keep the original private host as a separate candidate, or replace it |
void janus_ice_enforce_interface | ( | const char * | ip | ) |
Method to add an interface/IP to the enforce list for ICE (that is, only gather candidates from these and ignore the others)
[in] | ip | Interface/IP to enforce (e.g., 192.168. or eth0) |
int janus_ice_get_event_stats_period | ( | void | ) |
Method to get the current event handler statistics period (see above)
int janus_ice_get_static_event_loops | ( | void | ) |
Method to return the number of static event loops, if enabled.
uint16_t janus_ice_get_stun_port | ( | void | ) |
Method to get the STUN server port.
char* janus_ice_get_stun_server | ( | void | ) |
Method to get the STUN server IP address.
uint16_t janus_ice_get_turn_port | ( | void | ) |
Method to get the TURN server port.
char* janus_ice_get_turn_rest_api | ( | void | ) |
Method to get the specified TURN REST API backend, if any.
char* janus_ice_get_turn_server | ( | void | ) |
Method to get the TURN server IP address.
gint janus_ice_handle_attach_plugin | ( | void * | core_session, |
janus_ice_handle * | handle, | ||
janus_plugin * | plugin | ||
) |
Method to attach a Janus ICE handle to a plugin.
This method is very important, as it allows plugins to send/receive media (RTP/RTCP) to/from a WebRTC peer.
[in] | core_session | The core/peer session this ICE handle belongs to |
[in] | handle | The Janus ICE handle |
[in] | plugin | The plugin the ICE handle needs to be attached to |
janus_ice_handle* janus_ice_handle_create | ( | void * | core_session, |
const char * | opaque_id, | ||
const char * | token | ||
) |
Method to create a new Janus ICE handle.
[in] | core_session | The core/peer session this ICE handle will belong to |
[in] | opaque_id | The opaque identifier provided by the creator, if any (optional) |
[in] | token | The auth token provided by the creator, if any (optional) |
gint janus_ice_handle_destroy | ( | void * | core_session, |
janus_ice_handle * | handle | ||
) |
Method to destroy a Janus ICE handle.
[in] | core_session | The core/peer session this ICE handle belongs to |
[in] | handle | The Janus ICE handle to destroy |
void janus_ice_ignore_interface | ( | const char * | ip | ) |
Method to add an interface/IP to the ignore list for ICE (that is, don't gather candidates)
[in] | ip | Interface/IP to ignore (e.g., 192.168. or eth1) |
void janus_ice_incoming_data | ( | janus_ice_handle * | handle, |
char * | label, | ||
char * | protocol, | ||
gboolean | textdata, | ||
char * | buffer, | ||
int | length | ||
) |
Plugin SCTP/DataChannel callback, called by the SCTP stack when when there's data for a plugin.
[in] | handle | The Janus ICE handle associated with the peer |
[in] | label | The label of the data channel the message is from |
[in] | protocol | The protocol of the data channel to use |
[in] | textdata | Whether the buffer is text (domstring) or binary data |
[in] | buffer | The message data (buffer) |
[in] | length | The buffer length |
void janus_ice_init | ( | gboolean | ice_lite, |
gboolean | ice_tcp, | ||
gboolean | full_trickle, | ||
gboolean | ignore_mdns, | ||
gboolean | ipv6, | ||
uint16_t | rtp_min_port, | ||
uint16_t | rtp_max_port | ||
) |
ICE stuff initialization.
[in] | ice_lite | Whether the ICE Lite mode should be enabled or not |
[in] | ice_tcp | Whether ICE-TCP support should be enabled or not (only libnice >= 0.1.8, currently broken) |
[in] | full_trickle | Whether full-trickle must be used (instead of half-trickle) |
[in] | ignore_mdns | Whether mDNS candidates should be ignored, instead of resolved |
[in] | ipv6 | Whether IPv6 candidates must be negotiated or not |
[in] | rtp_min_port | Minimum port to use for RTP/RTCP, if a range is to be used |
[in] | rtp_max_port | Maximum port to use for RTP/RTCP, if a range is to be used |
nice_agent_set_port_range
so this is checked by the install.sh script in advance. gboolean janus_ice_is_enforced | ( | const char * | ip | ) |
Method to check whether an interface is currently in the enforce list for ICE (that is, won't have candidates)
[in] | ip | Interface/IP to check (e.g., 192.168.244.1 or eth1) |
gboolean janus_ice_is_full_trickle_enabled | ( | void | ) |
Method to check whether full-trickle support is enabled or not.
gboolean janus_ice_is_ice_debugging_enabled | ( | void | ) |
Method to check whether libnice debugging has been enabled (http://nice.freedesktop.org/libnice/libnice-Debug-messages.html)
gboolean janus_ice_is_ice_lite_enabled | ( | void | ) |
Method to check whether ICE Lite mode is enabled or not (still WIP)
gboolean janus_ice_is_ice_tcp_enabled | ( | void | ) |
Method to check whether ICE-TCP support is enabled/supported or not (still WIP)
gboolean janus_ice_is_ignored | ( | const char * | ip | ) |
Method to check whether an interface/IP is currently in the ignore list for ICE (that is, won't have candidates)
[in] | ip | Interface/IP to check (e.g., 192.168.244.1 or eth1) |
gboolean janus_ice_is_ipv6_enabled | ( | void | ) |
Method to check whether IPv6 candidates are enabled/supported or not (still WIP)
gboolean janus_ice_is_mdns_enabled | ( | void | ) |
Method to check whether mDNS resolution is enabled or not.
void janus_ice_notify_data_ready | ( | janus_ice_handle * | handle | ) |
Plugin SCTP/DataChannel callback, called by the SCTP stack when data can be written.
[in] | handle | The Janus ICE handle associated with the peer |
void janus_ice_notify_hangup | ( | janus_ice_handle * | handle, |
const char * | reason | ||
) |
Quick helper method to notify a WebRTC hangup through the Janus API.
handle | The janus_ice_handle instance this event refers to |
reason | A description of why this happened |
void janus_ice_relay_rtcp | ( | janus_ice_handle * | handle, |
janus_plugin_rtcp * | packet | ||
) |
Core RTCP callback, called when a plugin has an RTCP message to send to a peer.
[in] | handle | The Janus ICE handle associated with the peer |
[in] | packet | The RTCP message to send |
void janus_ice_relay_rtcp_internal | ( | janus_ice_handle * | handle, |
janus_plugin_rtcp * | packet, | ||
gboolean | filter_rtcp | ||
) |
void janus_ice_relay_rtp | ( | janus_ice_handle * | handle, |
janus_plugin_rtp * | packet | ||
) |
Core RTP callback, called when a plugin has an RTP packet to send to a peer.
[in] | handle | The Janus ICE handle associated with the peer |
[in] | packet | The RTP packet to send |
void janus_ice_relay_sctp | ( | janus_ice_handle * | handle, |
char * | buffer, | ||
int | length | ||
) |
Core SCTP/DataChannel callback, called by the SCTP stack when when there's data to send.
[in] | handle | The Janus ICE handle associated with the peer |
[in] | buffer | The message data (buffer) |
[in] | length | The buffer length |
void janus_ice_resend_trickles | ( | janus_ice_handle * | handle | ) |
Method to resend all the existing candidates via trickle (e.g., after an ICE restart)
[in] | handle | The Janus ICE handle this method refers to |
void janus_ice_restart | ( | janus_ice_handle * | handle | ) |
Method to restart ICE and the connectivity checks.
[in] | handle | The Janus ICE handle this method refers to |
void janus_ice_send_pli | ( | janus_ice_handle * | handle | ) |
Helper core callback, called when a plugin wants to send a RTCP PLI to a peer.
[in] | handle | The Janus ICE handle associated with the peer |
void janus_ice_send_remb | ( | janus_ice_handle * | handle, |
uint32_t | bitrate | ||
) |
Helper core callback, called when a plugin wants to send a RTCP REMB to a peer.
[in] | handle | The Janus ICE handle associated with the peer |
[in] | bitrate | The bitrate value to put in the REMB message |
void janus_ice_set_event_stats_period | ( | int | period | ) |
Method to modify the event handler statistics period (i.e., the number of seconds that should pass before Janus notifies event handlers about media statistics for a PeerConnection)
[in] | period | The new period value, in seconds |
void janus_ice_set_static_event_loops | ( | int | loops | ) |
Method to configure the static event loops mechanism at startup.
event_loops
property in the janus.jcfg
configuration for an explanation of this feature, and the possible impact on Janus and users [in] | loops | The number of static event loops to start (0 to disable the feature) |
int janus_ice_set_stun_server | ( | gchar * | stun_server, |
uint16_t | stun_port | ||
) |
Method to force Janus to use a STUN server when gathering candidates.
[in] | stun_server | STUN server address to use |
[in] | stun_port | STUN port to use |
int janus_ice_set_turn_rest_api | ( | gchar * | api_server, |
gchar * | api_key, | ||
gchar * | api_method | ||
) |
Method to force Janus to contact a TURN REST API server to get a TURN service to use when gathering candidates. The TURN REST API takes precedence over any static credential passed via janus_ice_set_turn_server.
[in] | api_server | TURN REST API backend (NULL to disable the API) |
[in] | api_key | API key to use, if required |
[in] | api_method | HTTP method to use (POST by default) |
int janus_ice_set_turn_server | ( | gchar * | turn_server, |
uint16_t | turn_port, | ||
gchar * | turn_type, | ||
gchar * | turn_user, | ||
gchar * | turn_pwd | ||
) |
Method to force Janus to use a TURN server when gathering candidates.
[in] | turn_server | TURN server address to use |
[in] | turn_port | TURN port to use |
[in] | turn_type | Relay type (udp, tcp or tls) |
[in] | turn_user | TURN username, if needed |
[in] | turn_pwd | TURN password, if needed |
int janus_ice_setup_local | ( | janus_ice_handle * | handle, |
int | offer, | ||
int | audio, | ||
int | video, | ||
int | data, | ||
int | trickle | ||
) |
Method to locally set up the ICE candidates (initialization and gathering)
[in] | handle | The Janus ICE handle this method refers to |
[in] | offer | Whether this is for an OFFER or an ANSWER |
[in] | audio | Whether audio is enabled |
[in] | video | Whether video is enabled |
[in] | data | Whether SCTP data channels are enabled |
[in] | trickle | Whether ICE trickling is supported or not |
void janus_ice_setup_remote_candidates | ( | janus_ice_handle * | handle, |
guint | stream_id, | ||
guint | component_id | ||
) |
Method to handle remote candidates and start the connectivity checks.
[in] | handle | The Janus ICE handle this method refers to |
[in] | stream_id | The stream ID of the candidate to add to the SDP |
[in] | component_id | The component ID of the candidate to add to the SDP |
void janus_ice_stop_static_event_loops | ( | void | ) |
Method to stop all the static event loops, if enabled.
void janus_ice_stream_destroy | ( | janus_ice_stream * | stream | ) |
Method to only free resources related to a specific ICE stream allocated by a Janus ICE handle.
[in] | stream | The Janus ICE stream instance to free |
int janus_ice_test_stun_server | ( | janus_network_address * | addr, |
uint16_t | port, | ||
uint16_t | local_port, | ||
janus_network_address * | public_addr, | ||
uint16_t * | public_port | ||
) |
Method to check whether a STUN server is reachable.
[in] | addr | Address of the STUN server as a janus_network_address instance |
[in] | port | Port of the STUN server |
[in] | local_port | Local port to bind to (0 means random choice) |
[out] | public_addr | Public address returned by the STUN server as a janus_network_address instance |
[out] | public_port | Public port returned by the STUN server |
void janus_ice_trickle_destroy | ( | janus_ice_trickle * | trickle | ) |
Helper method to destroy a janus_ice_trickle instance.
[in] | trickle | The janus_ice_trickle instance to destroy |
janus_ice_trickle* janus_ice_trickle_new | ( | const char * | transaction, |
json_t * | candidate | ||
) |
Helper method to allocate a janus_ice_trickle instance.
[in] | transaction | The Janus API ID of the original trickle request |
[in] | candidate | The trickle candidate, as a Jansson object |
gint janus_ice_trickle_parse | ( | janus_ice_handle * | handle, |
json_t * | candidate, | ||
const char ** | error | ||
) |
Helper method to parse trickle candidates.
[in] | handle | The Janus ICE handle this candidate belongs to |
[in] | candidate | The trickle candidate to parse, as a Jansson object |
[in,out] | error | Error string describing the failure, if any |
void janus_ice_webrtc_hangup | ( | janus_ice_handle * | handle, |
const char * | reason | ||
) |
Method to only hangup (e.g., DTLS alert) the WebRTC PeerConnection allocated by a Janus ICE handle.
[in] | handle | The Janus ICE handle instance managing the WebRTC PeerConnection to hangup |
[in] | reason | A description of why this happened |
gboolean janus_is_opaqueid_in_api_enabled | ( | void | ) |
Method to check whether opaque ID have to be added to Janus API responses/events.
gboolean janus_plugin_session_is_alive | ( | janus_plugin_session * | plugin_session | ) |
Quick helper method to check if a plugin session associated with a Janus handle is still valid.
plugin_session | The janus_plugin_session instance to validate |
void janus_seq_list_free | ( | janus_seq_info ** | head | ) |
void janus_set_dscp | ( | int | dscp | ) |
Method to modify the DSCP value to set, which is disabled by default.
[in] | dscp | The new DSCP value (0 to disable) |
void janus_set_min_nack_queue | ( | uint16_t | mnq | ) |
Method to modify the min NACK value (i.e., the minimum time window of packets per handle to store for retransmissions)
[in] | mnq | The new min NACK value |
void janus_set_no_media_timer | ( | uint | timer | ) |
Method to modify the no-media event timer (i.e., the number of seconds where no media arrives before Janus notifies this)
[in] | timer | The new timer value, in seconds |
void janus_set_slowlink_threshold | ( | uint | packets | ) |
Method to modify the slowlink-threshold property (i.e., the number of lost packets per seconds that should trigger a slow-link event)
[in] | packets | The new value, in lost packets per seconds |
void janus_set_twcc_period | ( | uint | period | ) |
Method to modify the TWCC feedback period (i.e., how often TWCC feedback is sent back to media senders)
[in] | period | The new period value, in milliseconds |
janus_mutex ice_list_mutex |
GList* janus_ice_enforce_list = NULL |
GList * janus_ice_ignore_list = NULL |
uint16_t rtp_range_max = 0 |
uint16_t rtp_range_min = 0 |