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
