Hi, Kevin!
It would be simpler if you would have used the uri transformations:
https://www.opensips.org/Documentation/Script-Tran-3-2#toc32
Simply grab the URI and do something like:
if ($(var(contacturi){uri.param,tgrp}) != NULL) {
$var(contacthash) = $(var(contacturi){uri.params});
} else {
$var(contacthash) = $(var(contacturi));
}
Răzvan Crainea
OpenSIPS Core Developer
http://www.opensips-solutions.com
On 11/5/22 16:55, Kevin Kennedy wrote:
I am trying to find a way to use the pvar_hash in the Dispatcher module
to hash on the Contact URI. Normally this can be done with using
$ct.fields(uri) to hash on and this does work,
The caveat that I have is that I am using RFC4904 (SIP Connect) with
some customers and other customers have a normal Contact URI.
RFC4904
sip:1234567890;tgrp=1098765432;[email protected]:5060
<http://[email protected]:5060>
Normal
sip:[email protected]:5060 <http://sip:[email protected]:5060>
I am looking for a way to be able to identify if the Contact URI has the
TGRP parameter, and if it does build the hash with the SIP URI starting
at the tgrp, ie
tgrp=1098765432;[email protected]:5076
<http://[email protected]:5076>
If it doesn't have the TGRP parameter, build the hash with the full contact.
I tried with this logic
modparam("dispatcher", "hash_pvar", "$var(contacthash)")
if (is_method("REGISTER|INVITE")) {
$var(contacturi) = $ct.fields(uri);
$var(str) = "tgrp=";
$var(str2) = "/sip:*;tgrp/tgrp/g";
if ($(var(contacturi){s.index, $var(str)}) != NULL){
xlog("found $var(str) in $var(contacturi)\n");
$var(contacthash)=$(var(contacturi){re.subst,$var(str2)});
}
else {
xlog("did not find $var(str) in
$var(contacturi)\n");
$var(contacthash) = $(var(contacturi));
}
ds_select_dst(3, 7, , "default", 1);
t_relay()
exit
}
I am seeing that the hash is still being created on the full Contact
DBG:core:parse_headers: flags=ffffffffffffffff
found tgrp= in
sip:1234567890;tgrp=1098765432;[email protected]:5076 <http://[email protected]:5076>
DBG:core:tr_eval_re: Trying to apply regexp [/sip:*;tgrp/tgrp/g] on :
[sip:1234567890;tgrp=1098765432;[email protected]:5076 <http://[email protected]:5076>]
DBG:core:tr_eval_re: yay, we can use the pre-compile regexp
DBG:core:subst_run: running. r=1
DBG:core:subst_str: no match
DBG:core:tr_eval_re: no match for subst expression
DBG:core:grep_sock_info_ext: checking if host==us: 14==14 &&
[10.255.100.241] == [10.255.100.240]
DBG:core:grep_sock_info_ext: checking if port 5060 matches port 5060
DBG:core:grep_sock_info_ext: checking if host==us: 14==14 &&
[10.255.100.241] == [10.255.100.241]
DBG:core:grep_sock_info_ext: checking if port 5060 matches port 5060
DBG:core:comp_scriptvar: str 20: mydomain.com <http://mydomain.com>
DBG:dispatcher:w_ds_select: ds_select: 3 7 1 1
DBG:dispatcher:ds_select_dst: set [3], using alg [7], size [3], used
size [2], active size [3]
*DBG:dispatcher:ds_hash_pvar: Hashing
sip:1234567890;tgrp=1098765432;[email protected]:5076 <http://[email protected]:5076>!*
DBG:dispatcher:ds_select_dst: hash [1435049604], candidate [-1], weight
sum [20]
DBG:dispatcher:ds_select_dst: candidate is [0]
DBG:dispatcher:ds_select_dst: using destination [0]
DBG:dispatcher:ds_select_dst: selected [7-3/0] <sip:sbc1.sbcdomain.com
<http://sbc1.sbcdomain.com>>
I am expecting to see the hash as
*tgrp=1098765432;[email protected]:5076
<http://[email protected]:5076>!*
that way it matches no matter what number is sent in the User field.
Thank you.
Kevin
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users