[Kamailio-Users] rewriteuser with AVP

Samuel Muller sml at 720.fr
Wed Nov 5 13:16:02 CET 2008


Hello all,

I've a little question :
I got a username in an AVP by avp_load_radius, and I would rewrite the uri
with it.

The objectives is to replace the r-uri by an ipbx uri, then forward the call
to it by a new branch (to not loose the phone number requested).
in this case :  0123452000 is behind a spa9000. The user 0123452000 has an
AVP called "ipbx", that i'm using to do some groups and permissions (plus
the rewrite).

actually, it does not work, i tried many ways :

        # load radius attributes of the callee
        if (!avp_load_radius("callee"))
        {
                xlog("L_INFO","-> user unknown in radius usr db : $ru");
                route(15);      # route PSTN
        }

        # verify the AVPs we got (caller and callee)
        xlog("L_INFO", " -AVP------------------------------------- ");
        avp_print();
        xlog("L_INFO", " ----------------------------------------- ");

        # callee is behind an ipbx (avp ipbx) ?
        if (is_avp_set("$avp(s:callee_ipbx)"))
        {
                xlog("L_INFO", "-> callee is behind an ipbx :
$avp(s:callee_ipbx)");
                setflag(14);    # flag IPBX
                #subst_user('/$rU$/$avp(s:callee_ipbx)/');
                #rewriteuri("sip:$avp(s:callee_ipbx)@$rd"**);
                rewriteuser($avp(s:callee_ipbx));
        }

        # callee in usrloc ?
        if (lookup("location"))
        {
                append_hf("P-hint: usrloc applied\r\n");
                xlog("L_INFO","-> registered user called : $tu");
                route(7);       # route FORWARD
        }
        else
        {
                xlog("L_INFO","-> 480: local user not found in usrloc :
$tu");
                sl_send_reply("480","Temporarily Unavailable");
                drop;
        }

and in the debugs log :

Nov  5 13:04:51 ser0 kamailio[2930]:
-ROUTE--INBOUND--------------------------
Nov  5 13:04:51 ser0 kamailio[2930]: DBG:avp_radius:load_avp_user: rc_auth
Success
Nov  5 13:04:51 ser0 kamailio[2930]: DBG:avp_radius:load_avp_user: AVP
'callee_asserted_id'/0='0123452000'/0 has been added
Nov  5 13:04:51 ser0 kamailio[2930]: DBG:avp_radius:load_avp_user: AVP
'callee_ipbx'/0='spa9000'/0 has been added
Nov  5 13:04:51 ser0 kamailio[2930]:
-AVP-------------------------------------
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
p=0x7fb3d7e5cfe8, flags=0x0003
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
^I^I^Iname=<callee_ipbx>
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
^I^I^Ival_str=<spa9000 / 7>
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
p=0x7fb3d7e5cf88, flags=0x0003
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
^I^I^Iname=<callee_asserted_id>
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
^I^I^Ival_str=<0123452000 / 10>
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
p=0x7fb3d7e5ced8, flags=0x0003
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
^I^I^Iname=<caller_asserted_id>
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
^I^I^Ival_str=<0123451011 / 10>
Nov  5 13:04:51 ser0 kamailio[2930]: INFO:avpops:ops_print_avp:
p=0x7fb3d7e5ce38, flags=0x0003
Nov  5 13:04:51 ser0 kamailio[2930]:
-----------------------------------------
Nov  5 13:04:51 ser0 kamailio[2930]: -> callee is behind an ipbx : spa9000
Nov  5 13:04:51 ser0 kamailio[2930]: DBG:registrar:lookup: '$avp(
s at sip.720.fr' Not found in usrloc
Nov  5 13:04:51 ser0 kamailio[2930]: -> 480: local user not found in usrloc
: sip:0123452000 at sip.720.fr <sip%3A0123452000 at sip.720.fr>
Nov  5 13:04:51 ser0 kamailio[2930]: DBG:core:parse_headers:
flags=ffffffffffffffff
Nov  5 13:04:51 ser0 kamailio[2930]: DBG:core:check_via_address: params
77.246.81.162, 192.168.0.134, 0
Nov  5 13:04:51 ser0 kamailio[2930]: DBG:core:destroy_avp_list: destroying
list 0x7fb3d7e5d040
Nov  5 13:04:51 ser0 kamailio[2930]: DBG:core:receive_msg: cleaning up


-> But, if I did it by :

        if (uri =~ "^sip:012345200{1}")
        {
                rewriteuri("sip:spa9000 at sip.720.fr<sip%3Aspa9000 at sip.720.fr>
");
        }
        if (lookup("location"))
        {
                append_hf("P-hint: usrloc applied\r\n");
                xlog("L_INFO","-> registered user called : $tu");
                route(7);       # route FORWARD
        }

it works great, and the call is ok (the ipbx forward correctly the request
the phone behind him).


Anyone has an idea ? thanks in advance !


-- 
Samuel MULLER
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20081105/bd66a5e8/attachment.htm>


More information about the sr-users mailing list