Module: sems Branch: master Commit: 3ff9ec66b85daeab82b0d4eaff77a12593333fb1 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=3ff9ec66b85daeab82b0d4eaff77a12593333fb1
Author: Carsten Bock <[email protected]> Committer: Carsten Bock <[email protected]> Date: Tue Feb 7 17:11:10 2012 +0100 New option: filter_sdp_alines=yes Filters out any unneeded (or unwanted) "a="-lines from the SDP. Needed for a customer, who has to block SRTP for LI. --- apps/sbc/SBC.cpp | 4 ++-- apps/sbc/SBCCallProfile.cpp | 1 + apps/sbc/SBCCallProfile.h | 1 + apps/sbc/SDPFilter.cpp | 24 +++++++++++++++++++++++- apps/sbc/SDPFilter.h | 2 +- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/apps/sbc/SBC.cpp b/apps/sbc/SBC.cpp index a326005..ba08062 100644 --- a/apps/sbc/SBC.cpp +++ b/apps/sbc/SBC.cpp @@ -1032,7 +1032,7 @@ int SBCDialog::relayEvent(AmEvent* ev) { int SBCDialog::filterBody(AmSdp& sdp, bool is_a2b) { if (call_profile.sdpfilter_enabled) { // normalize SDP - normalizeSDP(sdp, call_profile.anonymize_sdp); + normalizeSDP(sdp, call_profile.anonymize_sdp, call_profile.filter_sdp_alines); // filter SDP if (call_profile.sdpfilter != Transparent) { filterSDP(sdp, call_profile.sdpfilter, call_profile.sdpfilter_list); @@ -1709,7 +1709,7 @@ void SBCCalleeSession::onSendRequest(AmSipRequest& req, int flags) int SBCCalleeSession::filterBody(AmSdp& sdp, bool is_a2b) { if (call_profile.sdpfilter_enabled) { // normalize SDP - normalizeSDP(sdp, call_profile.anonymize_sdp); + normalizeSDP(sdp, call_profile.anonymize_sdp, call_profile.filter_sdp_alines); // filter SDP if (call_profile.sdpfilter != Transparent) { filterSDP(sdp, call_profile.sdpfilter, call_profile.sdpfilter_list); diff --git a/apps/sbc/SBCCallProfile.cpp b/apps/sbc/SBCCallProfile.cpp index 9cb8b87..9bff899 100644 --- a/apps/sbc/SBCCallProfile.cpp +++ b/apps/sbc/SBCCallProfile.cpp @@ -113,6 +113,7 @@ bool SBCCallProfile::readFromConfiguration(const string& name, sdpfilter_list.insert(c); } anonymize_sdp = cfg.getParameter("sdp_anonymize", "no") == "yes"; + filter_sdp_alines = cfg.getParameter("filter_sdp_alines", "no") == "yes"; } diff --git a/apps/sbc/SBCCallProfile.h b/apps/sbc/SBCCallProfile.h index 3a720ec..5b3e567 100644 --- a/apps/sbc/SBCCallProfile.h +++ b/apps/sbc/SBCCallProfile.h @@ -85,6 +85,7 @@ struct SBCCallProfile FilterType sdpfilter; set<string> sdpfilter_list; bool anonymize_sdp; + bool filter_sdp_alines; string sst_enabled; string sst_aleg_enabled; diff --git a/apps/sbc/SDPFilter.cpp b/apps/sbc/SDPFilter.cpp index 7b21a03..53f8812 100644 --- a/apps/sbc/SDPFilter.cpp +++ b/apps/sbc/SDPFilter.cpp @@ -101,7 +101,24 @@ void fix_incomplete_silencesupp(SdpMedia& m) { } } -int normalizeSDP(AmSdp& sdp, bool anonymize_sdp) { +void filter_alines(SdpMedia& m) { + std::vector<SdpAttribute> new_alines; + for (std::vector<SdpAttribute>::iterator a_it = + m.attributes.begin(); a_it != m.attributes.end(); a_it++) { + if ((a_it->attribute == "silenceSupp") + || (a_it->attribute == "rtpmap") + || (a_it->attribute == "fmtp") + || (a_it->attribute == "ptime")) { + new_alines.push_back(*a_it); + DBG("Left SDP-Attribute: '%s':'%s'\n", a_it->attribute.c_str(), a_it->value.c_str()); + } else { + DBG("Dropped SDP-Attribute: '%s':'%s'\n", a_it->attribute.c_str(), a_it->value.c_str()); + } + } + m.attributes = new_alines; +} + +int normalizeSDP(AmSdp& sdp, bool anonymize_sdp, bool filter_sdp_alines) { for (std::vector<SdpMedia>::iterator m_it= sdp.media.begin(); m_it != sdp.media.end(); m_it++) { if (m_it->type != MT_AUDIO && m_it->type != MT_VIDEO) @@ -113,6 +130,10 @@ int normalizeSDP(AmSdp& sdp, bool anonymize_sdp) { // fix incomplete silenceSupp attributes (see RFC3108) // (only media level - RFC3108 4.) fix_incomplete_silencesupp(*m_it); + + // Filter SDP A-Lines, if wanted: + if (filter_sdp_alines) + filter_alines(*m_it); } if (anonymize_sdp) { @@ -124,5 +145,6 @@ int normalizeSDP(AmSdp& sdp, bool anonymize_sdp) { sdp.origin.user = "-"; } + return 0; } diff --git a/apps/sbc/SDPFilter.h b/apps/sbc/SDPFilter.h index dfd2fd5..4096c2d 100644 --- a/apps/sbc/SDPFilter.h +++ b/apps/sbc/SDPFilter.h @@ -38,6 +38,6 @@ using std::string; int filterSDP(AmSdp& sdp, FilterType sdpfilter, const std::set<string>& sdpfilter_list); /** normalize SDP, fixing some common issues */ -int normalizeSDP(AmSdp& sdp, bool anonymize_sdp); +int normalizeSDP(AmSdp& sdp, bool anonymize_sdp, bool filter_sdp_alines); #endif _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
