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

Reply via email to