Module: sems Branch: master Commit: ae823636b39bb897aa7d83106223e0c5b1333bdd URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=ae823636b39bb897aa7d83106223e0c5b1333bdd
Author: Juha Heinanen <[email protected]> Committer: Juha Heinanen <[email protected]> Date: Mon Sep 30 13:44:05 2013 +0300 apps/sbc: added $x.P(name) pattern that returns value of param 'name' from URI x --- apps/sbc/ParamReplacer.cpp | 29 ++++++++++++++++++++++------- doc/Readme.sbc.txt | 1 + 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/apps/sbc/ParamReplacer.cpp b/apps/sbc/ParamReplacer.cpp index 0975d2c..4a8cef7 100644 --- a/apps/sbc/ParamReplacer.cpp +++ b/apps/sbc/ParamReplacer.cpp @@ -35,7 +35,7 @@ #include <stdlib.h> void replaceParsedParam(const string& s, size_t p, - const AmUriParser& parsed, string& res) { + const AmUriParser& parsed, string& res, size_t &skip) { switch (s[p+1]) { case 'u': { // URI res+=parsed.uri_user+"@"+parsed.uri_host; @@ -51,7 +51,22 @@ void replaceParsedParam(const string& s, size_t p, case 'h': res+=parsed.uri_host; break; // host case 'p': res+=parsed.uri_port; break; // port case 'H': res+=parsed.uri_headers; break; // Headers - case 'P': res+=parsed.uri_param; break; // Params + case 'P': { // Params + if ((s.length() < p+4) || (s[p+2] != '(')) { + res+=parsed.uri_param; + break; + } + size_t skip_p = p+3; + for (;skip_p<s.length() && s[skip_p] != ')';skip_p++) { } + if (skip_p==s.length()) { + WARN("Error parsing P param replacement (unclosed brackets)\n"); + break; + } + string param_name = s.substr(p+3, skip_p-p-3); + DBG("param_name = '%s' (skip_p - p = %d)\n", param_name.c_str(), (int)(skip_p-p)); + res += get_header_keyvalue(parsed.uri_param, param_name); + skip = size_t(skip_p - p); + }; break; case 'n': res+=parsed.display_name; break; // Params // case 't': { // tag @@ -134,7 +149,7 @@ string replaceParameters(const string& s, } } - replaceParsedParam(s, p, from_parser, res); + replaceParsedParam(s, p, from_parser, res, skip_chars); }; break; @@ -161,7 +176,7 @@ string replaceParameters(const string& s, } } - replaceParsedParam(s, p, to_parser, res); + replaceParsedParam(s, p, to_parser, res, skip_chars); }; break; @@ -182,7 +197,7 @@ string replaceParameters(const string& s, break; } } - replaceParsedParam(s, p, ruri_parser, res); + replaceParsedParam(s, p, ruri_parser, res, skip_chars); }; break; case 'c': { // call-id @@ -358,7 +373,7 @@ string replaceParameters(const string& s, if (!uri_parser.uri_port.empty()) \ res+=":"+uri_parser.uri_port; \ } else { \ - replaceParsedParam(s, p, uri_parser, res); \ + replaceParsedParam(s, p, uri_parser, res, skip_chars); \ } \ }; break; @@ -486,7 +501,7 @@ string replaceParameters(const string& s, hdr_name.c_str(), uri_parser.uri.c_str()); break; } - replaceParsedParam(s, p, uri_parser, res); + replaceParsedParam(s, p, uri_parser, res, skip_chars); } skip_chars = skip_p-p; } break; diff --git a/doc/Readme.sbc.txt b/doc/Readme.sbc.txt index 49a2595..c3c623a 100644 --- a/doc/Readme.sbc.txt +++ b/doc/Readme.sbc.txt @@ -131,6 +131,7 @@ The patterns which can be used are the following: $fp - From port $fH - From headers $fP - From Params + $fP(param) - From Param 'param' $ft - From tag $fn - From display name _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
