From 2c52bf32f0f9c1704c683f26b0ade9a0107bfb8e Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 26 Feb 2008 21:13:47 +0000 Subject: [PATCH] srtp update git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7746 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/mod_sofia.h | 1 + src/mod/endpoints/mod_sofia/sofia_glue.c | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index c9bfcfd8d7..3c08a8a5ed 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -76,6 +76,7 @@ typedef struct private_object private_object_t; #define SOFIA_SECURE_MEDIA_VARIABLE "sip_secure_media" #define SOFIA_SECURE_MEDIA_CONFIRMED_VARIABLE "sip_secure_media_confirmed" #define SOFIA_HAS_CRYPTO_VARIABLE "sip_has_crypto" +#define SOFIA_CRYPTO_MANDATORY_VARIABLE "sip_crypto_mandatory" #include #include diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index b3f55490c6..8a41de5aa0 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -1127,7 +1127,7 @@ void sofia_glue_tech_absorb_sdp(private_object_t *tech_pvt) if ((parser = sdp_parse(NULL, sdp_str, (int) strlen(sdp_str), 0))) { if ((sdp = sdp_session(parser))) { for (m = sdp->sdp_media; m; m = m->m_next) { - if (m->m_type != sdp_media_audio) { + if (m->m_type != sdp_media_audio || !m->m_port) { continue; } @@ -1726,7 +1726,7 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, sdp_session_t * switch_channel_t *channel = switch_core_session_get_channel(session); const char *val; const char *crypto = NULL; - int got_crypto = 0, got_audio = 0; + int got_crypto = 0, got_audio = 0, got_avp = 0, got_savp = 0; switch_assert(tech_pvt != NULL); @@ -1808,7 +1808,13 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, sdp_session_t * ptime = dptime; - if (m->m_type == sdp_media_audio && !got_audio) { + if (m->m_proto == sdp_proto_srtp) { + got_savp++; + } else if (m->m_proto == sdp_proto_rtp) { + got_avp++; + } + + if (m->m_type == sdp_media_audio && m->m_port && !got_audio) { sdp_rtpmap_t *map; for (attr = m->m_attributes; attr; attr = attr->a_next) { @@ -1862,6 +1868,11 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, sdp_session_t * } } + if (got_crypto && !got_avp) { + switch_channel_set_variable(tech_pvt->channel, SOFIA_CRYPTO_MANDATORY_VARIABLE, "true"); + switch_channel_set_variable(tech_pvt->channel, SOFIA_SECURE_MEDIA_VARIABLE, "true"); + } + connection = sdp->sdp_connection; if (m->m_connections) { connection = m->m_connections; @@ -2024,7 +2035,7 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, sdp_session_t * goto greed; } - } else if (m->m_type == sdp_media_video) { + } else if (m->m_type == sdp_media_video && m->m_port) { sdp_rtpmap_t *map; const char *rm_encoding; int framerate = 0;