Module: sems Branch: master Commit: 2ad43bfc84a2879e620aa72ed642fd4bd1650c00 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=2ad43bfc84a2879e620aa72ed642fd4bd1650c00
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Fri Oct 29 14:41:16 2010 +0200 sbc: support for using header and header components --- apps/sbc/SBC.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ doc/Readme.sbc.txt | 22 +++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletions(-) diff --git a/apps/sbc/SBC.cpp b/apps/sbc/SBC.cpp index 122f28a..bdaec10 100644 --- a/apps/sbc/SBC.cpp +++ b/apps/sbc/SBC.cpp @@ -401,6 +401,50 @@ string SBCDialog::replaceParameters(const char* r_type, skip_chars = skip_p-p; } break; + case 'H': { // header + size_t name_offset = 2; + if (s[p+1] != '(') { + if (s[p+2] != '(') { + WARN("Error parsing H header replacement (missing '(')\n"); + break; + } + name_offset = 3; + } + if (s.length()<name_offset+1) { + WARN("Error parsing H header replacement (short string)\n"); + break; + } + + size_t skip_p = p+name_offset; + for (;skip_p<s.length() && s[skip_p] != ')';skip_p++) { } + if (skip_p==s.length()) { + WARN("Error parsing H header replacement (unclosed brackets)\n"); + break; + } + string hdr_name = s.substr(p+name_offset, skip_p-p-name_offset); + // DBG("param_name = '%s' (skip-p - p = %d)\n", param_name.c_str(), skip_p-p); + if (name_offset == 2) { + // full header + res += getHeader(req.hdrs, hdr_name); + } else { + // parse URI and use component + AmUriParser uri_parser; + uri_parser.uri = getHeader(req.hdrs, hdr_name); + if ((s[p+1] == '.')) { + res += uri_parser.uri; + break; + } + + if (!uri_parser.parse_uri()) { + WARN("Error parsing header %s URI '%s'\n", + hdr_name.c_str(), uri_parser.uri.c_str()); + break; + } + replaceParsedParam(s, p, uri_parser, res); + } + skip_chars = skip_p-p; + } break; + default: { WARN("unknown replace pattern $%c%c\n", s[p], s[p+1]); diff --git a/doc/Readme.sbc.txt b/doc/Readme.sbc.txt index 49cedf4..3f99fc3 100644 --- a/doc/Readme.sbc.txt +++ b/doc/Readme.sbc.txt @@ -90,6 +90,27 @@ The patterns which can be used are the following: auth_pwd=$P(p) From=sip:$P(u)@$P(d) + $H(headername) - value of header <headername> + Examples: + o P-Caller-Uuid: 0004152379B8 + and + prepaid_caller_uuid=$H(P-Caller-Uuid) + + o P-NextHop-IP: 10.0.2.15 + and + next_hop_ip=$H(P-NextHop-IP) + + $HU(headername) - header <headername> (as URI) User + $Hd(headername) - header <headername> (as URI) domain (host:port) + ... + + Example: + o P-SomeNH-URI: sip:[email protected]:5092 + and + next_hop_ip=$Hh(P-SomeNH-URI) + next_hop_port=$Hp(P-SomeNH-URI) + + \\ -> \ \$ -> $ \* -> * @@ -121,7 +142,6 @@ Headers and messages may be filtered. A filter can be set to o transparent - no filtering done o whitelist - only let items pass that are in the filter list - o blacklist - filter out items that are in the filter list Note that if ACK messages should not be filtered. _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
