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

Reply via email to