Fork me on GitHub
ice.h
Go to the documentation of this file.
1 
17 #ifndef _JANUS_ICE_H
18 #define _JANUS_ICE_H
19 
20 #include <glib.h>
21 #include <agent.h>
22 
23 #include "sdp.h"
24 #include "dtls.h"
25 #include "sctp.h"
26 #include "rtcp.h"
27 #include "text2pcap.h"
28 #include "utils.h"
29 #include "refcount.h"
30 #include "plugins/plugin.h"
31 
32 
40 void janus_ice_init(gboolean ice_lite, gboolean ice_tcp, gboolean full_trickle, gboolean ipv6, uint16_t rtp_min_port, uint16_t rtp_max_port);
42 void janus_ice_deinit(void);
47 int janus_ice_set_stun_server(gchar *stun_server, uint16_t stun_port);
55 int janus_ice_set_turn_server(gchar *turn_server, uint16_t turn_port, gchar *turn_type, gchar *turn_user, gchar *turn_pwd);
63 int janus_ice_set_turn_rest_api(gchar *api_server, gchar *api_key, gchar *api_method);
66 char *janus_ice_get_stun_server(void);
69 uint16_t janus_ice_get_stun_port(void);
72 char *janus_ice_get_turn_server(void);
75 uint16_t janus_ice_get_turn_port(void);
78 char *janus_ice_get_turn_rest_api(void);
80 void janus_ice_enable_nat_1_1(void);
87 void janus_ice_enforce_interface(const char *ip);
91 gboolean janus_ice_is_enforced(const char *ip);
99 void janus_ice_ignore_interface(const char *ip);
103 gboolean janus_ice_is_ignored(const char *ip);
106 gboolean janus_ice_is_ice_lite_enabled(void);
109 gboolean janus_ice_is_ice_tcp_enabled(void);
112 gboolean janus_ice_is_full_trickle_enabled(void);
115 gboolean janus_ice_is_ipv6_enabled(void);
118 void janus_set_max_nack_queue(uint mnq);
121 uint janus_get_max_nack_queue(void);
124 void janus_set_no_media_timer(uint timer);
127 uint janus_get_no_media_timer(void);
130 void janus_set_rfc4588_enabled(gboolean enabled);
133 gboolean janus_is_rfc4588_enabled(void);
136 void janus_ice_set_event_stats_period(int period);
144 void janus_ice_debugging_enable(void);
146 void janus_ice_debugging_disable(void);
147 
148 
152 const gchar *janus_get_ice_state_name(gint state);
153 
154 
163 
164 #define JANUS_ICE_HANDLE_WEBRTC_PROCESSING_OFFER (1 << 0)
165 #define JANUS_ICE_HANDLE_WEBRTC_START (1 << 1)
166 #define JANUS_ICE_HANDLE_WEBRTC_READY (1 << 2)
167 #define JANUS_ICE_HANDLE_WEBRTC_STOP (1 << 3)
168 #define JANUS_ICE_HANDLE_WEBRTC_ALERT (1 << 4)
169 #define JANUS_ICE_HANDLE_WEBRTC_TRICKLE (1 << 7)
170 #define JANUS_ICE_HANDLE_WEBRTC_ALL_TRICKLES (1 << 8)
171 #define JANUS_ICE_HANDLE_WEBRTC_TRICKLE_SYNCED (1 << 9)
172 #define JANUS_ICE_HANDLE_WEBRTC_DATA_CHANNELS (1 << 10)
173 #define JANUS_ICE_HANDLE_WEBRTC_CLEANING (1 << 11)
174 #define JANUS_ICE_HANDLE_WEBRTC_HAS_AUDIO (1 << 12)
175 #define JANUS_ICE_HANDLE_WEBRTC_HAS_VIDEO (1 << 13)
176 #define JANUS_ICE_HANDLE_WEBRTC_GOT_OFFER (1 << 14)
177 #define JANUS_ICE_HANDLE_WEBRTC_GOT_ANSWER (1 << 15)
178 #define JANUS_ICE_HANDLE_WEBRTC_HAS_AGENT (1 << 16)
179 #define JANUS_ICE_HANDLE_WEBRTC_ICE_RESTART (1 << 17)
180 #define JANUS_ICE_HANDLE_WEBRTC_RESEND_TRICKLES (1 << 18)
181 #define JANUS_ICE_HANDLE_WEBRTC_RFC4588_RTX (1 << 19)
182 #define JANUS_ICE_HANDLE_WEBRTC_NEW_DATACHAN_SDP (1 << 20)
183 
184 
187 typedef struct janus_ice_stats_info {
189  guint32 packets;
191  guint64 bytes;
195  gint64 updated;
199  guint32 nacks;
201 
204 typedef struct janus_ice_stats {
218 
222 void janus_ice_notify_hangup(janus_ice_handle *handle, const char *reason);
223 
224 
228 gboolean janus_plugin_session_is_alive(janus_plugin_session *plugin_session);
229 
230 
232 typedef struct janus_seq_info {
233  gint64 ts;
234  guint16 seq;
235  guint16 state;
240 enum {
245 };
246 
247 
251  void *session;
253  guint64 handle_id;
255  char *opaque_id;
257  gint64 created;
259  void *app;
265  gint cdone;
267  GMainContext *mainctx;
269  GMainLoop *mainloop;
271  GThread *thread;
273  GSource *rtp_source, *rtcp_source, *stats_source;
275  NiceAgent *agent;
279  gboolean controlling;
281  gchar *audio_mid;
283  gchar *video_mid;
285  gchar *data_mid;
287  gchar *stream_mid;
289  guint stream_id;
293  gchar *rtp_profile;
295  gchar *local_sdp;
297  gchar *remote_sdp;
299  const gchar *hangup_reason;
303  GAsyncQueue *queued_packets;
307  gint last_srtp_error, last_srtp_summary;
311  volatile gint dump_packets;
317  volatile gint destroyed;
320 };
321 
327  guint stream_id;
329  gint cdone:1;
331  guint32 audio_ssrc;
333  guint32 video_ssrc;
335  guint32 video_ssrc_rtx;
337  guint32 audio_ssrc_peer, audio_ssrc_peer_new, audio_ssrc_peer_orig;
339  guint32 video_ssrc_peer[3], video_ssrc_peer_new[3], video_ssrc_peer_orig[3];
341  guint32 video_ssrc_peer_rtx[3], video_ssrc_peer_rtx_new[3], video_ssrc_peer_rtx_orig[3];
343  char *rid[3];
351  GHashTable *rtx_payload_types;
353  gint audio_payload_type, video_payload_type, video_rtx_payload_type;
355  char *audio_codec, *video_codec;
357  gboolean (* video_is_keyframe)(char* buffer, int len);
359  gboolean audio_send, audio_recv, video_send, video_recv;
363  janus_rtcp_context *video_rtcp_ctx[3];
365  GHashTable *rtx_nacked[3];
371  gint64 video_first_ntp_ts[3];
373  guint32 video_first_rtp_ts[3];
375  guint32 audio_last_ts;
377  guint32 video_last_ts;
399  gchar *ruser;
401  gchar *rpass;
403  GHashTable *components;
407  gboolean noerrorlog;
411  volatile gint destroyed;
414 };
415 
416 #define LAST_SEQS_MAX_LEN 160
417 
422  guint stream_id;
426  guint state;
430  GSList *candidates;
438  gboolean process_started;
440  GSource *icestate_source;
444  GSource *dtlsrt_source;
448  gboolean do_audio_nacks;
450  gboolean do_video_nacks;
452  GQueue *audio_retransmit_buffer, *video_retransmit_buffer;
454  GHashTable *audio_retransmit_seqs, *video_retransmit_seqs;
456  guint16 rtx_seq_number;
468  janus_seq_info *last_seqs_video[3];
474  gboolean noerrorlog;
478  volatile gint destroyed;
481 };
482 
488  gint64 received;
490  char *transaction;
493 };
494 
497 
502 janus_ice_trickle *janus_ice_trickle_new(const char *transaction, json_t *candidate);
508 gint janus_ice_trickle_parse(janus_ice_handle *handle, json_t *candidate, const char **error);
513 
514 
517 
522 janus_ice_handle *janus_ice_handle_create(void *core_session, const char *opaque_id);
529 gint janus_ice_handle_attach_plugin(void *core_session, janus_ice_handle *handle, janus_plugin *plugin);
534 gint janus_ice_handle_destroy(void *core_session, janus_ice_handle *handle);
538 void janus_ice_webrtc_hangup(janus_ice_handle *handle, const char *reason);
546 
547 
550 
556 void janus_ice_relay_rtp(janus_ice_handle *handle, int video, char *buf, int len);
562 void janus_ice_relay_rtcp(janus_ice_handle *handle, int video, char *buf, int len);
567 void janus_ice_relay_data(janus_ice_handle *handle, char *buf, int len);
572 void janus_ice_incoming_data(janus_ice_handle *handle, char *buffer, int length);
577 void janus_ice_relay_sctp(janus_ice_handle *handle, char *buffer, int length);
579 
580 
583 
592 int janus_ice_setup_local(janus_ice_handle *handle, int offer, int audio, int video, int data, int trickle);
598 void janus_ice_candidates_to_sdp(janus_ice_handle *handle, janus_sdp_mline *mline, guint stream_id, guint component_id);
603 void janus_ice_setup_remote_candidates(janus_ice_handle *handle, guint stream_id, guint component_id);
611 void janus_ice_restart(janus_ice_handle *handle);
616 
617 
622 void janus_ice_set_static_event_loops(int loops);
629 
630 #endif
guint srtp_errors_count
Count of the recent SRTP replay errors, in order to avoid spamming the logs.
Definition: ice.h:305
void janus_ice_notify_hangup(janus_ice_handle *handle, const char *reason)
Quick helper method to notify a WebRTC hangup through the Janus API.
Definition: ice.c:642
janus_ice_stats in_stats
Stats for incoming data (audio/video/data)
Definition: ice.h:470
gboolean noerrorlog
Helper flag to avoid flooding the console with the same error all over again.
Definition: ice.h:474
void janus_ice_resend_trickles(janus_ice_handle *handle)
Method to resend all the existing candidates via trickle (e.g., after an ICE restart) ...
Definition: ice.c:3290
const gchar * hangup_reason
Reason this handle has been hung up.
Definition: ice.h:299
guint state
libnice ICE component state
Definition: ice.h:426
janus_ice_handle * janus_ice_handle_create(void *core_session, const char *opaque_id)
Method to create a new Janus ICE handle.
Definition: ice.c:1066
gboolean video_send
Definition: ice.h:359
GHashTable * rtx_payload_types
Mapping of rtx payload types to actual media-related packet types.
Definition: ice.h:351
json_t * candidate
JSON object of the trickle candidate(s)
Definition: ice.h:492
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 c...
Definition: ice.c:1011
gint64 retransmit_log_ts
Last time a log message about sending retransmits was printed.
Definition: ice.h:458
gchar * audio_mid
Audio mid (media ID)
Definition: ice.h:281
janus_flags webrtc_flags
Mask of WebRTC-related flags for this handle.
Definition: ice.h:263
guint32 audio_ssrc
Audio SSRC of the server for this stream.
Definition: ice.h:331
gboolean janus_ice_is_full_trickle_enabled(void)
Method to check whether full-trickle support is enabled or not.
Definition: ice.c:88
SCTP processing for data channels (headers)
guint32 packets
Packets sent or received.
Definition: ice.h:189
gchar * local_sdp
SDP generated locally (just for debugging purposes)
Definition: ice.h:295
guint32 audio_ssrc_peer_orig
Definition: ice.h:337
Reference counter mechanism.
struct janus_seq_info * prev
Definition: ice.h:237
gsize janus_flags
Janus flags container.
Definition: utils.h:85
struct json_t json_t
Definition: plugin.h:223
guint nack_sent_recent_cnt
Number of NACKs sent since last log message.
Definition: ice.h:464
guint component_id
libnice ICE component ID
Definition: ice.h:424
void janus_seq_list_free(janus_seq_info **head)
Definition: ice.c:523
janus_ice_stream * stream
Janus ICE stream this component belongs to.
Definition: ice.h:420
gint64 audio_first_ntp_ts
First received audio NTP timestamp.
Definition: ice.h:367
Janus media statistics container.
Definition: ice.h:204
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...
Definition: ice.c:1425
uint16_t janus_ice_get_stun_port(void)
Method to get the STUN server port.
Definition: ice.c:45
gboolean janus_ice_is_ice_lite_enabled(void)
Method to check whether ICE Lite mode is enabled or not (still WIP)
Definition: ice.c:76
janus_mutex mutex
Mutex to lock/unlock this component.
Definition: ice.h:476
gchar * stream_mid
Main mid (will be a pointer to one of the above)
Definition: ice.h:287
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.
Definition: ice.c:817
struct janus_seq_info janus_seq_info
A helper struct for determining when to send NACKs.
janus_refcount ref
Reference counter for this instance.
Definition: ice.h:413
janus_mutex mutex
Mutex to lock/unlock this stream.
Definition: ice.h:409
GSource * stats_source
Definition: ice.h:273
NiceAgent * agent
libnice ICE agent
Definition: ice.h:275
gint64 nack_sent_log_ts
Last time a log message about sending NACKs was printed.
Definition: ice.h:462
void janus_set_max_nack_queue(uint mnq)
Method to modify the max NACK value (i.e., the number of packets per handle to store for retransmissi...
Definition: ice.c:447
struct janus_ice_stats janus_ice_stats
Janus media statistics container.
char * janus_ice_get_turn_rest_api(void)
Method to get the specified TURN REST API backend, if any.
Definition: ice.c:65
Definition: ice.h:242
gboolean process_started
Whether the setup of remote candidates for this component has started or not.
Definition: ice.h:438
janus_refcount ref
Reference counter for this instance.
Definition: ice.h:480
GMutex janus_mutex
Janus mutex implementation.
Definition: mutex.h:61
SDP m-line representation.
Definition: sdp-utils.h:128
void janus_ice_relay_data(janus_ice_handle *handle, char *buf, int len)
Core SCTP/DataChannel callback, called when a plugin has data to send to a peer.
Plugin-Core communication (implementation)
Janus ICE stream.
Definition: ice.h:323
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.
Definition: ice.c:1098
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...
Definition: ice.c:1268
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 be...
Definition: ice.c:271
ogg_stream_state * stream
Definition: pp-opus.c:31
Janus ICE component.
Definition: ice.h:418
void janus_ice_restart(janus_ice_handle *handle)
Method to restart ICE and the connectivity checks.
Definition: ice.c:3280
uint janus_get_no_media_timer(void)
Method to get the current no-media event timer (see above)
Definition: ice.c:408
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...
Definition: ice.c:551
void janus_ice_relay_rtp(janus_ice_handle *handle, int video, char *buf, int len)
Core RTP callback, called when a plugin has an RTP packet to send to a peer.
Definition: ice.c:4114
GSList * candidates
GLib list of libnice remote candidates for this component.
Definition: ice.h:430
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...
Definition: ice.c:251
gboolean janus_ice_is_ipv6_enabled(void)
Method to check whether IPv6 candidates are enabled/supported or not (still WIP)
Definition: ice.c:94
void janus_ice_incoming_data(janus_ice_handle *handle, char *buffer, int length)
Plugin SCTP/DataChannel callback, called by the SCTP stack when when there&#39;s data for a plugin...
Definition: ice.c:2725
gint last_event_stats
Count of how many seconds passed since the last stats passed to event handlers.
Definition: ice.h:309
Instance of a text2pcap recorder.
Definition: text2pcap.h:47
guint16 seq
Definition: ice.h:234
janus_ice_handle * handle
Janus ICE handle this trickle candidate belongs to.
Definition: ice.h:486
gchar * remote_fingerprint
Hashed fingerprint of the peer&#39;s certificate, as parsed in SDP.
Definition: ice.h:397
void janus_set_rfc4588_enabled(gboolean enabled)
Method to enable or disable the RFC4588 support negotiation.
Definition: ice.c:415
GThread * thread
GLib thread for the handle and libnice.
Definition: ice.h:271
void janus_ice_init(gboolean ice_lite, gboolean ice_tcp, gboolean full_trickle, gboolean ipv6, uint16_t rtp_min_port, uint16_t rtp_max_port)
ICE stuff initialization.
Definition: ice.c:760
Definition: refcount.h:78
GSList * remote_candidates
GLib list of remote candidates for this component (summary)
Definition: ice.h:434
GHashTable * components
GLib hash table of components (IDs are the keys)
Definition: ice.h:403
gint cdone
Number of gathered candidates.
Definition: ice.h:265
gchar * video_mid
Video mid (media ID)
Definition: ice.h:283
gchar * rtp_profile
RTP profile set by caller (so that we can match it)
Definition: ice.h:293
TURN REST API client.
char * transaction
Janus API transaction ID of the original trickle request.
Definition: ice.h:490
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...
Definition: ice.c:1348
Helper to handle pending trickle candidates (e.g., when we&#39;re still waiting for an offer) ...
Definition: ice.h:484
struct janus_seq_info * next
Definition: ice.h:236
guint stream_id
libnice ICE stream ID
Definition: ice.h:422
gboolean janus_ice_is_ice_tcp_enabled(void)
Method to check whether ICE-TCP support is enabled/supported or not (still WIP)
Definition: ice.c:82
gint64 created
Monotonic time of when the handle has been created.
Definition: ice.h:257
const gchar * janus_get_ice_state_name(gint state)
Helper method to get a string representation of a libnice ICE state.
Definition: ice.c:1038
void janus_ice_ignore_interface(const char *ip)
Method to add an interface/IP to the ignore list for ICE (that is, don&#39;t gather candidates) ...
Definition: ice.c:240
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&#39;s data to send...
Definition: ice.c:4198
gboolean do_transport_wide_cc
Wether we do transport wide cc for video.
Definition: ice.h:379
volatile gint destroyed
Atomic flag to check if this instance has been destroyed.
Definition: ice.h:317
GSList * transport_wide_received_seq_nums
GLib list of transport wide cc stats in reverse received order.
Definition: ice.h:391
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.
Definition: ice.c:2931
GMainLoop * mainloop
GLib loop for the handle and libnice.
Definition: ice.h:269
GSource * dtlsrt_source
Re-transmission timer for DTLS.
Definition: ice.h:444
The plugin session and callbacks interface.
Definition: plugin.h:239
janus_refcount ref
Reference counter for this instance.
Definition: ice.h:319
guint transport_wide_cc_ext_id
Transport wide cc rtp ext ID.
Definition: ice.h:381
uint janus_get_max_nack_queue(void)
Method to get the current max NACK value (i.e., the number of packets per handle to store for retrans...
Definition: ice.c:454
janus_plugin_session * app_handle
Opaque core/plugin session pointer.
Definition: ice.h:261
guint retransmit_recent_cnt
Number of retransmitted packets since last log message.
Definition: ice.h:460
RTP context, in order to make sure SSRC changes result in coherent seq/ts increases.
Definition: rtp.h:155
volatile gint destroyed
Atomic flag to check if this instance has been destroyed.
Definition: ice.h:478
janus_ice_handle * handle
Janus ICE handle this stream belongs to.
Definition: ice.h:325
Definition: ice.h:241
janus_ice_stats out_stats
Stats for outgoing data (audio/video/data)
Definition: ice.h:472
void janus_ice_debugging_disable(void)
Method to disable libnice debugging (the default)
Definition: ice.c:198
RTCP processing (headers)
gint64 updated
Time we last updated the last second counter.
Definition: ice.h:195
uint16_t janus_ice_get_turn_port(void)
Method to get the TURN server port.
Definition: ice.c:59
GSList * local_candidates
GLib list of local candidates for this component (summary)
Definition: ice.h:432
GMainContext * mainctx
GLib context for the handle and libnice.
Definition: ice.h:267
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.
Definition: ice.c:2894
GQueue * video_retransmit_buffer
Definition: ice.h:452
guint stream_id
ICE Stream ID.
Definition: ice.h:289
gint64 ts
Definition: ice.h:233
void janus_ice_enable_nat_1_1(void)
Helper method to force Janus to overwrite all host candidates with the public IP. ...
Definition: ice.c:207
void janus_ice_deinit(void)
ICE stuff de-initialization.
Definition: ice.c:811
janus_ice_stats_info audio
Audio info.
Definition: ice.h:206
gchar * remote_hashing
Hashing algorhitm used by the peer for the DTLS certificate (e.g., "SHA-256")
Definition: ice.h:395
gchar * ruser
The ICE username for this stream.
Definition: ice.h:399
gboolean janus_is_rfc4588_enabled(void)
Method to check whether the RFC4588 support is enabled.
Definition: ice.c:419
gchar * remote_sdp
SDP received by the peer (just for debugging purposes)
Definition: ice.h:297
A helper struct for determining when to send NACKs.
Definition: ice.h:232
char * janus_ice_get_stun_server(void)
Method to get the STUN server IP address.
Definition: ice.c:42
void * app
Opaque application (plugin) pointer.
Definition: ice.h:259
int janus_ice_get_event_stats_period(void)
Method to get the current event handler statistics period (see above)
Definition: ice.c:274
DTLS/SRTP processing (headers)
void janus_ice_relay_rtcp(janus_ice_handle *handle, int video, char *buf, int len)
Core RTCP callback, called when a plugin has an RTCP message to send to a peer.
Definition: ice.c:4176
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)
Definition: ice.c:180
guint32 transport_wide_cc_last_seq_num
Last received transport wide seq num.
Definition: ice.h:383
janus_ice_stream * stream
ICE stream.
Definition: ice.h:291
void janus_ice_trickle_destroy(janus_ice_trickle *trickle)
Helper method to destroy a janus_ice_trickle instance.
Definition: ice.c:747
gboolean notified_lastsec
Whether or not we notified about lastsec issues already.
Definition: ice.h:197
gint video_rtx_payload_type
Definition: ice.h:353
gint last_srtp_summary
Definition: ice.h:307
Definition: ice.h:244
guint32 audio_first_rtp_ts
First received audio RTP timestamp.
Definition: ice.h:369
Janus ICE handle.
Definition: ice.h:249
guint32 video_ssrc
Video SSRC of the server for this stream.
Definition: ice.h:333
void janus_ice_set_static_event_loops(int loops)
Method to configure the static event loops mechanism at startup.
Definition: ice.c:127
char * opaque_id
Opaque identifier, e.g., to provide inter-handle relationships to external tools. ...
Definition: ice.h:255
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.
Definition: ice.c:961
struct janus_ice_stats_info janus_ice_stats_info
Janus media statistics.
GList * video_payload_types
List of payload types we can expect for video.
Definition: ice.h:349
gboolean controlling
ICE role (controlling or controlled)
Definition: ice.h:279
GHashTable * video_retransmit_seqs
Definition: ice.h:454
guint32 audio_last_ts
Last sent audio RTP timestamp.
Definition: ice.h:375
Janus media statistics.
Definition: ice.h:187
gboolean do_audio_nacks
Whether we should do NACKs (in or out) for audio.
Definition: ice.h:448
void * session
Opaque pointer to the core/peer session.
Definition: ice.h:251
guint32 video_last_ts
Last sent video RTP timestamp.
Definition: ice.h:377
guint32 nacks
Number of NACKs sent or received.
Definition: ice.h:199
gchar * rpass
The ICE password for this stream.
Definition: ice.h:401
janus_text2pcap * text2pcap
In case this session must be saved to text2pcap, the instance to dump packets to. ...
Definition: ice.h:313
gint64 component_connected
Monotonic time of when this component has successfully connected.
Definition: ice.h:428
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)
Definition: ice.c:2994
Janus DTLS-SRTP handle.
Definition: dtls.h:56
janus_mutex mutex
Mutex to lock/unlock the ICE session.
Definition: ice.h:315
volatile gint destroyed
Atomic flag to check if this instance has been destroyed.
Definition: ice.h:411
janus_rtcp_context * audio_rtcp_ctx
RTCP context for the audio stream.
Definition: ice.h:361
volatile gint dump_packets
Flag to decide whether or not packets need to be dumped to a text2pcap file.
Definition: ice.h:311
guint64 bytes
Bytes sent or received.
Definition: ice.h:191
gint janus_ice_trickle_parse(janus_ice_handle *handle, json_t *candidate, const char **error)
Helper method to parse trickle candidates.
Definition: ice.c:682
GList * audio_payload_types
List of payload types we can expect for audio.
Definition: ice.h:347
guint sl_nack_recent_cnt
Count of recent NACKs (for slow_link)
Definition: ice.h:216
Internal RTCP state context (for RR/SR)
Definition: rtcp.h:226
guint32 bytes_lastsec
Bytes sent or received in the last second.
Definition: ice.h:193
gchar * data_mid
Data channel mid (media ID)
Definition: ice.h:285
guint64 handle_id
Handle identifier, guaranteed to be non-zero.
Definition: ice.h:253
Plugin-Gateway session mapping.
Definition: plugin.h:226
gint64 agent_created
Monotonic time of when the ICE agent has been created.
Definition: ice.h:277
guint transport_wide_cc_feedback_count
Transport wide cc rtp ext ID.
Definition: ice.h:389
GAsyncQueue * queued_packets
Queue of events in the loop and outgoing packets to send.
Definition: ice.h:303
guint32 transport_wide_cc_last_feedback_seq_num
Last transport wide seq num sent on feedback.
Definition: ice.h:385
janus_dtls_srtp * dtls
DTLS-SRTP stack.
Definition: ice.h:446
janus_seq_info * last_seqs_audio
List of recently received audio sequence numbers (as a support to NACK generation) ...
Definition: ice.h:466
GList * pending_trickles
List of pending trickle candidates (those we received before getting the JSEP offer) ...
Definition: ice.h:301
int janus_ice_get_static_event_loops(void)
Method to return the number of static event loops, if enabled.
Definition: ice.c:124
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...
Definition: ice.c:215
gint64 received
Monotonic time of when this trickle candidate has been received.
Definition: ice.h:488
gboolean do_video_nacks
Whether we should do NACKs (in or out) for video.
Definition: ice.h:450
janus_ice_component * component
ICE component.
Definition: ice.h:405
gint64 icefailed_detected
Time of when we first detected an ICE failed (we&#39;ll need this for the timer above) ...
Definition: ice.h:442
void janus_ice_debugging_enable(void)
Method to enable libnice debugging (http://nice.freedesktop.org/libnice/libnice-Debug-messages.html)
Definition: ice.c:183
SDP processing (headers)
guint16 rtx_seq_number
Current sequence number for the RFC4588 rtx SSRC session.
Definition: ice.h:456
gint janus_ice_handle_destroy(void *core_session, janus_ice_handle *handle)
Method to destroy a Janus ICE handle.
Definition: ice.c:1173
guint16 transport_wide_cc_cycles
Transport wide cc transport seq num wrap cycles.
Definition: ice.h:387
gboolean janus_ice_is_enforced(const char *ip)
Method to check whether an interface is currently in the enforce list for ICE (that is...
Definition: ice.c:223
guint32 video_ssrc_rtx
Video retransmission SSRC of the peer for this stream.
Definition: ice.h:335
guint16 state
Definition: ice.h:235
Dumping of RTP/RTCP packets to text2pcap format (headers)
char * janus_ice_get_turn_server(void)
Method to get the TURN server IP address.
Definition: ice.c:56
guint stream_id
libnice ICE stream ID
Definition: ice.h:327
Definition: ice.h:243
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 ...
Definition: ice.c:401
GSource * icestate_source
Timer to check when we should consider ICE as failed.
Definition: ice.h:440
gint64 sl_nack_period_ts
Start time of recent NACKs (for slow_link)
Definition: ice.h:214
gchar * selected_pair
String representation of the selected pair as notified by libnice (foundations)
Definition: ice.h:436
janus_ice_stats_info data
Data info.
Definition: ice.h:210
void janus_ice_stop_static_event_loops(void)
Method to stop all the static event loops, if enabled.
Definition: ice.c:161
janus_dtls_role
DTLS roles.
Definition: dtls.h:41
char * video_codec
Definition: ice.h:355
janus_ice_trickle * janus_ice_trickle_new(const char *transaction, json_t *candidate)
Helper method to allocate a janus_ice_trickle instance.
Definition: ice.c:671
janus_dtls_role dtls_role
DTLS role of the server for this stream.
Definition: ice.h:393
gint64 last_slowlink_time
Last time the slow_link callback (of the plugin) was called.
Definition: ice.h:212
guint32 bytes_lastsec_temp
Definition: ice.h:193
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...
Definition: ice.c:4216
gboolean noerrorlog
Helper flag to avoid flooding the console with the same error all over again.
Definition: ice.h:407