void add_candidate(OwrSession *session, char *ufrag, char *password, int type, int component, char *foundation, uint priority, int transport_type, char *address, uint port) { OwrCandidate *candidate = owr_candidate_new(type, component); g_object_set(candidate, "foundation", foundation, "ufrag", ufrag, "password", password, "transport-type", transport_type, "address", address, "port", port, "priority", priority, NULL); owr_session_add_remote_candidate(session, candidate); }
static void got_candidate(OwrMediaSession *session_a, OwrCandidate *candidate, OwrMediaSession *session_b) { GList *local_candidates; gchar *addr; guint port, component; guint rtp_port, rtcp_port; if (!local_addr || !remote_addr) owr_session_add_remote_candidate(OWR_SESSION(session_b), candidate); else { local_candidates = g_object_get_data(G_OBJECT(session_a), "local-candidates"); local_candidates = g_list_prepend(local_candidates, candidate); g_object_set_data(G_OBJECT(session_a), "local-candidates", local_candidates); g_object_set(candidate, "ufrag", local_addr, "password", stun_pass, NULL); } }
static void gathering_done(OwrSession *session) { OwrMediaSession *msession = OWR_MEDIA_SESSION(session); OwrCandidate *rtp_candidate, *rtcp_candidate; GList *candidates; guint l_rtp_port, l_rtcp_port, r_rtp_port, r_rtcp_port; rtp_candidate = owr_candidate_new(OWR_CANDIDATE_TYPE_HOST, OWR_COMPONENT_TYPE_RTP); rtcp_candidate = owr_candidate_new(OWR_CANDIDATE_TYPE_HOST, OWR_COMPONENT_TYPE_RTCP); g_object_set(rtp_candidate, "address", remote_addr, "ufrag", remote_addr, "password", stun_pass, "foundation", "3", NULL); g_object_set(rtcp_candidate, "address", remote_addr, "ufrag", remote_addr, "password", stun_pass, "foundation", "3", NULL); if (msession == send_session_video) { l_rtp_port = 5120; l_rtcp_port = 5121; r_rtp_port = 5122; r_rtcp_port = 5123; } else if (msession == send_session_audio) { l_rtp_port = 5124; l_rtcp_port = 5125; r_rtp_port = 5126; r_rtcp_port = 5127; } else if (msession == recv_session_video) { l_rtp_port = 5122; l_rtcp_port = 5123; r_rtp_port = 5120; r_rtcp_port = 5121; } else if (msession == recv_session_audio) { l_rtp_port = 5126; l_rtcp_port = 5127; r_rtp_port = 5124; r_rtcp_port = 5125; } g_object_set(rtp_candidate, "port", r_rtp_port, NULL); g_object_set(rtcp_candidate, "port", r_rtcp_port, NULL); owr_session_add_remote_candidate(session, rtp_candidate); owr_session_add_remote_candidate(session, rtcp_candidate); for (candidates = g_object_get_data(G_OBJECT(session), "local-candidates"); candidates; candidates = g_list_next(candidates)) { OwrCandidate *local_candidate = candidates->data, *remote_candidate; OwrComponentType ctype; guint port = 0; gchar *addr; g_object_get(local_candidate, "address", &addr, "port", &port, "component-type", &ctype, NULL); if (!g_str_equal(addr, local_addr)) { g_free(addr); continue; } g_free(addr); if (port == l_rtp_port && ctype == OWR_COMPONENT_TYPE_RTP) remote_candidate = rtp_candidate; else if (port == l_rtcp_port && ctype == OWR_COMPONENT_TYPE_RTCP) remote_candidate = rtcp_candidate; else continue; owr_session_force_candidate_pair(session, ctype, local_candidate, remote_candidate); } }
static void got_candidate(OwrSession *ignored, OwrCandidate *candidate, OwrSession *session) { (void) ignored; owr_session_add_remote_candidate(OWR_SESSION(session), candidate); }
static void got_candidate(OwrMediaSession *session_a, OwrCandidate *candidate, OwrMediaSession *session_b) { owr_session_add_remote_candidate(OWR_SESSION(session_b), candidate); }