#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>
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;
}
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);
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) {
}
}
+ 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;
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;