]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
srtp update
authorAnthony Minessale <anthony.minessale@gmail.com>
Tue, 26 Feb 2008 21:13:47 +0000 (21:13 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Tue, 26 Feb 2008 21:13:47 +0000 (21:13 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7746 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia_glue.c

index c9bfcfd8d7dda0048af369f86f0630ac53c47bf0..3c08a8a5ed0c07d10ca8374fe2f1dc13103fde1d 100644 (file)
@@ -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 <sofia-sip/nua.h>
 #include <sofia-sip/sip_status.h>
index b3f55490c6bccb2feb83f28e6ebc1706ba4e8d32..8a41de5aa081cf26fd68ab880c43963bad8196e3 100644 (file)
@@ -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;