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;trunk-context=mydomain.com@10.10.10.10:5060

Normal
sip:1234567890@10.10.10.10: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;trunk-context=mydomain.com@192.168.1.122: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;trunk-context=
mydomain.com@192.168.1.122:5076
DBG:core:tr_eval_re: Trying to apply regexp [/sip:*;tgrp/tgrp/g] on :
[sip:1234567890;tgrp=1098765432;trunk-context=
mydomain.com@192.168.1.122: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
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;trunk-context=mydomain.com@192.168.1.122:5076
<http://mydomain.com@192.168.1.122: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>

I am expecting to see the hash as
*tgrp=1098765432;trunk-context=mydomain.com@192.168.1.122:5076
<http://mydomain.com@192.168.1.122:5076>!*
that way it matches no matter what number is sent in the User field.

Thank you.

Kevin
_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to