Module: sems
Branch: 1.5
Commit: 59017ea7835f5b9e8cbf9b0c054962ae14f3b45f
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=59017ea7835f5b9e8cbf9b0c054962ae14f3b45f

Author: Stefan Sayer <[email protected]>
Committer: Stefan Sayer <[email protected]>
Date:   Thu Sep 12 20:42:33 2013 +0200

reply to OPTIONS also if no application configured

reported by Julian Santer

Conflicts:

        core/sip/defs.h

---

 core/AmApi.cpp           |   52 +++++++++++++++++++++++++--------------------
 core/AmApi.h             |    3 ++
 core/AmPlugIn.cpp        |    2 +-
 core/AmSipDispatcher.cpp |   22 ++++++++++++-------
 core/sip/defs.h          |    1 +
 5 files changed, 48 insertions(+), 32 deletions(-)

diff --git a/core/AmApi.cpp b/core/AmApi.cpp
index ad9876d..4a9986e 100644
--- a/core/AmApi.cpp
+++ b/core/AmApi.cpp
@@ -79,25 +79,38 @@ void AmSessionFactory::configureSession(AmSession* sess) {
 
 void AmSessionFactory::onOoDRequest(const AmSipRequest& req)
 {
-  string hdrs;
-  if (!AmConfig::OptionsTranscoderInStatsHdr.empty()) {
-    string usage;
-    B2BMediaStatistics::instance()->reportCodecReadUsage(usage);
-
-    hdrs += AmConfig::OptionsTranscoderInStatsHdr + ": ";
-    hdrs += usage;
-    hdrs += CRLF;
-  }
-  if (!AmConfig::OptionsTranscoderOutStatsHdr.empty()) {
-    string usage;
-    B2BMediaStatistics::instance()->reportCodecWriteUsage(usage);
 
-    hdrs += AmConfig::OptionsTranscoderOutStatsHdr + ": ";
-    hdrs += usage;
-    hdrs += CRLF;
+  if (req.method == SIP_METH_OPTIONS) {
+    replyOptions(req);
+    return;
   }
 
-  if (req.method == "OPTIONS") {
+  INFO("sorry, we don't support beginning a new session with "
+       "a '%s' message\n", req.method.c_str());
+
+  AmSipDialog::reply_error(req,501,"Not Implemented");
+  return;
+}
+
+void AmSessionFactory::replyOptions(const AmSipRequest& req) {
+    string hdrs;
+    if (!AmConfig::OptionsTranscoderInStatsHdr.empty()) {
+      string usage;
+      B2BMediaStatistics::instance()->reportCodecReadUsage(usage);
+
+      hdrs += AmConfig::OptionsTranscoderInStatsHdr + ": ";
+      hdrs += usage;
+      hdrs += CRLF;
+    }
+    if (!AmConfig::OptionsTranscoderOutStatsHdr.empty()) {
+      string usage;
+      B2BMediaStatistics::instance()->reportCodecWriteUsage(usage);
+
+      hdrs += AmConfig::OptionsTranscoderOutStatsHdr + ": ";
+      hdrs += usage;
+      hdrs += CRLF;
+    }
+
     // Basic OPTIONS support
     if (AmConfig::OptionsSessionLimit &&
        (AmSession::getSessionNum() >= AmConfig::OptionsSessionLimit)) {
@@ -119,14 +132,7 @@ void AmSessionFactory::onOoDRequest(const AmSipRequest& 
req)
     }
 
     AmSipDialog::reply_error(req, 200, "OK", hdrs);
-    return;
-  }
 
-  INFO("sorry, we don't support beginning a new session with "
-       "a '%s' message\n", req.method.c_str());
-    
-  AmSipDialog::reply_error(req,501,"Not Implemented");
-  return;
 }
 
 // void AmSessionFactory::postEvent(AmEvent* ev) {
diff --git a/core/AmApi.h b/core/AmApi.h
index 63bc444..c5a0198 100644
--- a/core/AmApi.h
+++ b/core/AmApi.h
@@ -130,6 +130,9 @@ class AmSessionFactory: public AmPluginFactory
   int configureModule(AmConfigReader& cfg);
 
  public:
+
+  static void replyOptions(const AmSipRequest& req);
+
   /**
    * This function applys the module configuration 
    */
diff --git a/core/AmPlugIn.cpp b/core/AmPlugIn.cpp
index 9a8b513..32fbdfb 100644
--- a/core/AmPlugIn.cpp
+++ b/core/AmPlugIn.cpp
@@ -795,7 +795,7 @@ AmSessionFactory* AmPlugIn::findSessionFactory(const 
AmSipRequest& req, string&
     }
     
     if (m_app_name.empty()) {
-      ERROR("could not find any application matching configured criteria\n");
+      INFO("could not find any application matching configured criteria\n");
       return NULL;
     }
     
diff --git a/core/AmSipDispatcher.cpp b/core/AmSipDispatcher.cpp
index dd99bd0..9ba4682 100644
--- a/core/AmSipDispatcher.cpp
+++ b/core/AmSipDispatcher.cpp
@@ -66,6 +66,7 @@ void AmSipDispatcher::handleSipMsg(AmSipRequest &req)
   AmEventDispatcher* ev_disp = AmEventDispatcher::instance();
 
   if(!local_tag.empty()) {
+    // in-dlg request
     AmSipRequestEvent* ev = new AmSipRequestEvent(req);
 
       if(!ev_disp->post(local_tag,ev)) {
@@ -109,14 +110,19 @@ void AmSipDispatcher::handleSipMsg(AmSipRequest &req)
 
   } else {
 
-      string app_name;
-      AmSessionFactory* sess_fact = 
AmPlugIn::instance()->findSessionFactory(req,app_name);
-      if(!sess_fact){
-
-         AmSipDialog::reply_error(req,404,"Not found");
-         return;
-      }
-
+    string app_name;
+    AmSessionFactory* sess_fact = 
AmPlugIn::instance()->findSessionFactory(req,app_name);
+    if (sess_fact) {
       sess_fact->onOoDRequest(req);
+      return;
+    }
+       
+    if (req.method == SIP_METH_OPTIONS) {
+      AmSessionFactory::replyOptions(req);
+      return;
+    }
+      
+    AmSipDialog::reply_error(req,404,"Not found");
   }
+
 }
diff --git a/core/sip/defs.h b/core/sip/defs.h
index ef8046a..04dbcbc 100644
--- a/core/sip/defs.h
+++ b/core/sip/defs.h
@@ -12,6 +12,7 @@
 #define SIP_METH_ACK            "ACK"
 #define SIP_METH_SUBSCRIBE      "SUBSCRIBE"
 #define SIP_METH_NOTIFY         "NOTIFY"
+#define SIP_METH_OPTIONS        "OPTIONS"
 
 #define SIP_HDR_FROM            "From"
 #define SIP_HDR_TO              "To"

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to