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@sip.720.fr' Not found in usrloc Nov 5 13:04:51 ser0 kamailio[2930]: -> 480: local user not found in usrloc : sip:0123452000@sip.720.fr sip%3A0123452000@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@sip.720.frsip%3Aspa9000@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 !