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
