sbc: support for using header and header components

sayer/1.4-spce2.6
Stefan Sayer 16 years ago
parent daa9c241ff
commit 2ad43bfc84

@ -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]);

@ -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:user@10.0.2.15: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.

Loading…
Cancel
Save