[Asterisk-code-review] res pjsip sdp rtp: include ice in ANSWER only if offered (asterisk[13])
Torrey Searle
asteriskteam at digium.com
Mon Jul 9 04:44:05 CDT 2018
Torrey Searle has uploaded this change for review. ( https://gerrit.asterisk.org/9376
Change subject: res_pjsip_sdp_rtp: include ice in ANSWER only if offered
......................................................................
res_pjsip_sdp_rtp: include ice in ANSWER only if offered
Keep track if ICE candidates were in the SDP offer & only put them
in the corresponding SDP answer if the offer condaind ICE candidates
ASTERISK-27957 #close
Change-Id: Idf2597ee48e9a287e07aa4030bfa705430a13a92
---
M include/asterisk/res_pjsip_session.h
M res/res_pjsip_sdp_rtp.c
M res/res_pjsip_session.c
3 files changed, 40 insertions(+), 0 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/76/9376/1
diff --git a/include/asterisk/res_pjsip_session.h b/include/asterisk/res_pjsip_session.h
index 464167c..315aa46 100644
--- a/include/asterisk/res_pjsip_session.h
+++ b/include/asterisk/res_pjsip_session.h
@@ -85,6 +85,8 @@
unsigned int held:1;
/*! \brief Does remote support rtcp_mux */
unsigned int remote_rtcp_mux:1;
+ /*! \brief Does remote support ice */
+ unsigned int remote_ice:1;
/*! \brief Stream type this session media handles */
char stream_type[1];
};
diff --git a/res/res_pjsip_sdp_rtp.c b/res/res_pjsip_sdp_rtp.c
index 5852027..fe50e7a 100644
--- a/res/res_pjsip_sdp_rtp.c
+++ b/res/res_pjsip_sdp_rtp.c
@@ -531,6 +531,10 @@
return;
}
+ if (!session_media->remote_ice) {
+ return;
+ }
+
if ((username = ice->get_ufrag(session_media->rtp))) {
attr = pjmedia_sdp_attr_create(pool, "ice-ufrag", pj_cstr(&stmp, username));
media->attr[media->attr_count++] = attr;
@@ -576,6 +580,36 @@
ao2_ref(candidates, -1);
}
+/*! \brief Function which checks for ice attributes in an audio stream */
+static void check_ice_support(struct ast_sip_session *session, struct ast_sip_session_media *session_media,
+ const struct pjmedia_sdp_session *remote, const struct pjmedia_sdp_media *remote_stream)
+{
+ struct ast_rtp_engine_ice *ice;
+ const pjmedia_sdp_attr *attr;
+ unsigned int attr_i;
+
+ if (!session->endpoint->media.rtp.ice_support || !(ice = ast_rtp_instance_get_ice(session_media->rtp))) {
+ session_media->remote_ice = 0;
+ return;
+ }
+
+ /* Find all of the candidates */
+ for (attr_i = 0; attr_i < remote_stream->attr_count; ++attr_i) {
+ attr = remote_stream->attr[attr_i];
+ if (!pj_strcmp2(&attr->name, "candidate")) {
+ session_media->remote_ice = 1;
+ break;
+ }
+ }
+
+ if (attr_i == remote_stream->attr_count) {
+ session_media->remote_ice = 0;
+ }
+
+
+
+}
+
/*! \brief Function which processes ICE attributes in an audio stream */
static void process_ice_attributes(struct ast_sip_session *session, struct ast_sip_session_media *session_media,
const struct pjmedia_sdp_session *remote, const struct pjmedia_sdp_media *remote_stream)
@@ -1033,6 +1067,9 @@
pj_strdup(session->inv_session->pool, &session_media->transport, &stream->desc.transport);
}
+ /* If ICE support is enabled find all the needed attributes */
+ check_ice_support(session, session_media, sdp, stream);
+
if (set_caps(session, session_media, stream)) {
return 0;
}
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index 086da62..8eaeb31 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -1341,6 +1341,7 @@
return CMP_STOP;
}
session_media->encryption = session->endpoint->media.rtp.encryption;
+ session_media->remote_ice = session->endpoint->media.rtp.ice_support;
session_media->keepalive_sched_id = -1;
session_media->timeout_sched_id = -1;
/* Safe use of strcpy */
--
To view, visit https://gerrit.asterisk.org/9376
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-MessageType: newchange
Gerrit-Change-Id: Idf2597ee48e9a287e07aa4030bfa705430a13a92
Gerrit-Change-Number: 9376
Gerrit-PatchSet: 1
Gerrit-Owner: Torrey Searle <tsearle at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20180709/cdbfb483/attachment-0001.html>
More information about the asterisk-code-review
mailing list