Module: sems Branch: master Commit: 42e1d05c501a02efc003a4e48b1e292294a34387 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=42e1d05c501a02efc003a4e48b1e292294a34387
Author: Václav Kubart <[email protected]> Committer: Václav Kubart <[email protected]> Date: Wed Apr 25 16:14:52 2012 +0200 transcoder: statistics about used codecs can be put into all requests and replies --- core/AmConfig.cpp | 4 ++++ core/AmConfig.h | 10 ++++++++++ core/AmSipDialog.cpp | 29 +++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 0 deletions(-) diff --git a/core/AmConfig.cpp b/core/AmConfig.cpp index 7d0cdcb..43b17c6 100644 --- a/core/AmConfig.cpp +++ b/core/AmConfig.cpp @@ -110,6 +110,8 @@ string AmConfig::ShutdownModeErrReason = "Server shutting down"; string AmConfig::OptionsTranscoderOutStatsHdr; // empty by default string AmConfig::OptionsTranscoderInStatsHdr; // empty by default +string AmConfig::TranscoderOutStatsHdr; // empty by default +string AmConfig::TranscoderInStatsHdr; // empty by default Am100rel::State AmConfig::rel100 = Am100rel::REL100_SUPPORTED; @@ -574,6 +576,8 @@ int AmConfig::readConfiguration() OptionsTranscoderOutStatsHdr = cfg.getParameter("options_transcoder_out_stats_hdr"); OptionsTranscoderInStatsHdr = cfg.getParameter("options_transcoder_in_stats_hdr"); + TranscoderOutStatsHdr = cfg.getParameter("transcoder_out_stats_hdr"); + TranscoderInStatsHdr = cfg.getParameter("transcoder_in_stats_hdr"); if (cfg.hasParameter("100rel")) { string rel100s = cfg.getParameter("100rel"); diff --git a/core/AmConfig.h b/core/AmConfig.h index 6b8fbfe..864b939 100644 --- a/core/AmConfig.h +++ b/core/AmConfig.h @@ -187,8 +187,18 @@ struct AmConfig static unsigned int ShutdownModeErrCode; static string ShutdownModeErrReason; + /** header containing the transcoder's outgoing codec statistics which should + * be present in replies to OPTIONS requests */ static string OptionsTranscoderOutStatsHdr; + /** header containing the transcoder's incoming codec statistics which should + * be present in replies to OPTIONS requests */ static string OptionsTranscoderInStatsHdr; + /** header containing the transcoder's outgoing codec statistics which should + * be present in every message leaving server */ + static string TranscoderOutStatsHdr; + /** header containing the transcoder's incoming codec statistics which should + * be present in every message leaving server */ + static string TranscoderInStatsHdr; static Am100rel::State rel100; diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp index 40c3d7c..d121606 100644 --- a/core/AmSipDialog.cpp +++ b/core/AmSipDialog.cpp @@ -37,6 +37,29 @@ #include "sip/parse_uri.h" #include "sip/parse_next_hop.h" +#include "AmB2BMedia.h" // just because of statistics + +static void addTranscoderStats(string &hdrs) +{ + // add transcoder statistics into request/reply headers + if (!AmConfig::TranscoderOutStatsHdr.empty()) { + string usage; + B2BMediaStatistics::instance()->reportCodecWriteUsage(usage); + + hdrs += AmConfig::TranscoderOutStatsHdr + ": "; + hdrs += usage; + hdrs += CRLF; + } + if (!AmConfig::TranscoderInStatsHdr.empty()) { + string usage; + B2BMediaStatistics::instance()->reportCodecReadUsage(usage); + + hdrs += AmConfig::TranscoderInStatsHdr + ": "; + hdrs += usage; + hdrs += CRLF; + } +} + const char* __dlg_status2str[AmSipDialog::__max_Status] = { "Disconnected", "Trying", @@ -745,6 +768,8 @@ int AmSipDialog::reply(const AmSipTransaction& t, reply.hdrs += SIP_HDR_COLSP(SIP_HDR_SERVER) + AmConfig::Signature + CRLF; } + addTranscoderStats(reply.hdrs); // add transcoder statistics into reply headers + if (code < 300 && t.method != "CANCEL" && t.method != "BYE"){ /* if 300<=code<400, explicit contact setting should be done */ reply.contact = getContactHdr(); @@ -803,6 +828,8 @@ int AmSipDialog::reply_error(const AmSipRequest& req, unsigned int code, if (AmConfig::Signature.length()) reply.hdrs += SIP_HDR_COLSP(SIP_HDR_SERVER) + AmConfig::Signature + CRLF; + addTranscoderStats(reply.hdrs); // add transcoder statistics into reply headers + int ret = SipCtrlInterface::send(reply); if(ret){ ERROR("Could not send reply: code=%i; reason='%s'; method=%s; call-id=%s; cseq=%i\n", @@ -1085,6 +1112,8 @@ int AmSipDialog::sendRequest(const string& method, } + addTranscoderStats(req.hdrs); // add transcoder statistics into request headers + req.route = getRoute(); if(body != NULL) { _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
