static void gst_media_add_remote_candidates (SdpMediaConfig * mconf, KmsWebRtcBaseConnection * conn, const gchar * msg_ufrag, const gchar * msg_pwd) { const GstSDPMedia *media = kms_sdp_media_config_get_sdp_media (mconf); KmsIceBaseAgent *agent = conn->agent; gchar *stream_id = conn->stream_id; const gchar *ufrag, *pwd; guint len, i; ufrag = gst_sdp_media_get_attribute_val (media, SDP_ICE_UFRAG_ATTR); pwd = gst_sdp_media_get_attribute_val (media, SDP_ICE_PWD_ATTR); if (!kms_ice_base_agent_set_remote_credentials (agent, stream_id, ufrag, pwd)) { GST_WARNING ("Cannot set remote media credentials (%s, %s).", ufrag, pwd); if (!kms_ice_base_agent_set_remote_credentials (agent, stream_id, msg_ufrag, msg_pwd)) { GST_WARNING ("Cannot set remote message credentials (%s, %s).", ufrag, pwd); return; } else { GST_DEBUG ("Set remote message credentials OK (%s, %s).", ufrag, pwd); } } else { GST_DEBUG ("Set remote media credentials OK (%s, %s).", ufrag, pwd); } len = gst_sdp_media_attributes_len (media); for (i = 0; i < len; i++) { const GstSDPAttribute *attr; KmsIceCandidate *candidate; gint idx = kms_sdp_media_config_get_id (mconf); const gchar *mid = kms_sdp_media_config_get_mid (mconf); attr = gst_sdp_media_get_attribute (media, i); if (g_strcmp0 (SDP_CANDIDATE_ATTR, attr->key) != 0) { continue; } candidate = kms_ice_candidate_new (attr->value, mid, idx); kms_ice_base_agent_add_ice_candidate (agent, candidate, stream_id); g_object_unref (candidate); } }
void WebRtcEndpointImpl::addIceCandidate (std::shared_ptr<IceCandidate> candidate) { gboolean ret; const char *cand_str = candidate->getCandidate().c_str (); const char *mid_str = candidate->getSdpMid().c_str (); guint8 sdp_m_line_index = candidate->getSdpMLineIndex (); KmsIceCandidate *cand = kms_ice_candidate_new (cand_str, mid_str, sdp_m_line_index); g_signal_emit_by_name (element, "add-ice-candidate", cand, &ret); g_object_unref (cand); if (!ret) { throw KurentoException (ICE_ADD_CANDIDATE_ERROR, "Error adding candidate"); } }