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

Author: Stefan Sayer <[email protected]>
Committer: Raphael Coeffic <[email protected]>
Date:   Thu Apr 26 18:59:33 2012 +0200

syslog_cdr: support for struct access in call control variables

---

 apps/sbc/call_control/syslog_cdr/SyslogCDR.cpp     |   25 ++++++++++++++++++-
 .../call_control/syslog_cdr/etc/cc_syslog_cdr.conf |    4 +++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/apps/sbc/call_control/syslog_cdr/SyslogCDR.cpp 
b/apps/sbc/call_control/syslog_cdr/SyslogCDR.cpp
index db99ce8..3e7c5b6 100644
--- a/apps/sbc/call_control/syslog_cdr/SyslogCDR.cpp
+++ b/apps/sbc/call_control/syslog_cdr/SyslogCDR.cpp
@@ -285,8 +285,29 @@ void SyslogCDR::end(const string& ltag, SBCCallProfile* 
call_profile,
        } else if (*it == "$end_tm") {
          cdr+=csv_quote(timeString(end_ts_sec)) +",";
        } else {
-         ERROR("in configuration: unknown value '%s' in cdr_format\n",
-               it->c_str());
+         string varname = it->substr(1);
+         string prop;
+         size_t ppos = varname.find('.');
+         if (ppos != string::npos) {
+           prop = varname.substr(ppos+1);
+           varname = varname.substr(0, ppos);
+         }
+         SBCVarMapIteratorT var_it = call_profile->cc_vars.find(varname);
+         if (var_it == call_profile->cc_vars.end()) {
+           DBG("unknown variable '%s' in cdr_format\n", it->c_str());
+         } else {
+           AmArg* v = &var_it->second;
+           if (!prop.empty()) {
+             try {
+               v = &var_it->second[prop];
+             } catch(...) { }
+           }
+           if (isArgCStr((*v))) {
+             cdr+=string(v->asCStr())+",";
+           } else {
+             cdr+=AmArg::print(*v)+",";
+           }
+         }
        }
       } else {
        if (!values.hasMember(*it)) {
diff --git a/apps/sbc/call_control/syslog_cdr/etc/cc_syslog_cdr.conf 
b/apps/sbc/call_control/syslog_cdr/etc/cc_syslog_cdr.conf
index 1a22e63..2d5e5c0 100644
--- a/apps/sbc/call_control/syslog_cdr/etc/cc_syslog_cdr.conf
+++ b/apps/sbc/call_control/syslog_cdr/etc/cc_syslog_cdr.conf
@@ -26,6 +26,10 @@
 #     $ltag                             - local tag (ID for call)
 #     $start_ts, $connect_ts, $end_ts   - timestamp (sec.usec since epoch)
 #     $start_tm, $connect_tm, $end_tm   - timestamp (%F %T fmt)
+#
+#   $varname from call control variables  
+#     also: $varname.property
+#
 #     $duration                         - duration start to end (sec.ms)
 #     $duration_sec                     - duration start to end (sec)
 #     $bill_duration                    - duration connect to end (sec.ms)

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

Reply via email to