Hi Matteo,

Whatever change you in request_route will propagate in all branches - 
this is your problem - when you set the PAI for the first destination, 
in request_route, the PAI will be present in all future branches.

To avoid this situation, avoid adding "per-branch" info from 
request_branch - do it from branch_route; branch_route and failure_route 
allows changes per branch (and not global ones).

Do something like:

request_route -> do_routing + arm branch_route
branch_route -> set PAI for the first branch
failure_route -> set PAI for the next branch

Regards,
Bogdan

mmarzu...@interfree.it wrote:
> Hi all. In my scenario I try to use dynamic routing and I have a problem with 
> the P-Asserted Identity field. When the proxy tries to send the INVITE to the 
> first gateway selected from DRouting module by the function do_routing, there 
> is only one PAI field, but if that gateway is down, at the second attempt to 
> next gateway, the INVITE contains two PAI fields identicals.
>
> This is a piece of code:
>
> ########################################################################
> # Request route 'base-outbound'
> ########################################################################
> route[2] {
>       if(is_present_hf("P-Asserted-Identity")) {
>               remove_hf("P-Asserted-Identity");
>       }
>       if(is_present_hf("Remote-Party-ID")) {
>               remove_hf("Remote-Party-ID");
>       }
>       if(is_avp_set("$avp(s:caller_cli)/s")) {
>               if(!isflagset(28)) {
>                       xlog("L_INFO", "Set caller CLI '$avp(s:caller_cli)' - 
> M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
>                       append_hf("P-Asserted-Identity: 
> <$avp(s:caller_cli)>\r\n");
>               }
>       }
>       
>       route(14);
>       
>       t_on_reply("1");
>       
>       if(!isflagset(21)) {
>               t_on_failure("1");      
>       }
>       if(is_present_hf("Proxy-Authorization")) {
>               consume_credentials();
>       }
>       
>       xlog("L_INFO", "Request leaving server, D-URI='$du' - M=$rm RURI=$ru 
> F=$fu T=$tu IP=$si ID=$ci\n");
>
>       if(!t_relay()) {
>               sl_reply_error();
>       }
>       exit;   
> }
>
> ########################################################################
> # Request route 'invite-to-external'
> ########################################################################
> route[6] {
>       if(isflagset(20)) {
>               xlog("L_INFO", "Call to foreign domain - M=$rm RURI=$ru F=$fu 
> T=$tu IP=$si ID=$ci\n");
>               route(2);
>               exit;
>       }
>       if(!isflagset(23)) {
>               # don't allow calls relaying from PSTN to PSTN, if not 
> explicitely forwarded
>               if(uri=~ "^sip:[0-9]+@") {
>                       xlog("L_INFO", "Call to PSTN\n");
>                       do_routing();
>                       xlog("L_INFO", "first attempt is $ru, attributes are 
> $avp(s:drattrs)\n");
>                       if(!goes_to_gw()) {
>                               xlog("L_ERR", "No PSTN gateways available - 
> M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
>                               sl_send_reply("503", "PSTN Termination 
> Currently Unavailable");
>                               exit;
>                       }
>                       setflag(21);
>                       t_on_failure("2");
>                       route(2);
>                       exit;   
>               }
>       }
>       
>       xlog("L_INFO", "Call to unknown user - M=$rm RURI=$ru F=$fu T=$tu 
> IP=$si ID=$ci\n");
>       sl_send_reply("404", "User Not Found");
>       exit;   
> }
>
> ########################################################################
> # Failure route 'pstn-failover'
> ########################################################################
> failure_route[2] {
>       xlog("L_INFO", "Failure route for PSTN entered - M=$rm RURI=$ru F=$fu 
> T=$tu IP=$si ID=$ci\n");
>       route(9);
>
>       if(!use_next_gw()) {
>               xlog("L_ERR", "Failed to select next PSTN gateway - M=$rm 
> RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
>               exit;
>       }
>       xlog("L_INFO", "selected next gateway $ru, attributes are 
> $avp(s:drattrs)\n");
>       t_on_failure("2");
>       route(2);
> }
>
>
> These are the INVITEs:
>
> U 10.10.45.172:5060 -> 10.10.45.86:5060
> INVITE sip:22230...@10.10.45.86 SIP/2.0.
> Record-Route: <sip:10.10.45.172;lr=on;ftag=2061433461944847689>.
> Via: SIP/2.0/UDP 10.10.45.172;branch=z9hG4bK8586.95959e37.0.
> Via: SIP/2.0/UDP 
> 10.10.45.102:1025;received=10.10.45.102;rport=1025;branch=z9hG4bK0a0a2d660000001549d9d2ae0ccb24110000004a.
> Content-Length: 366.
> Contact: <sip:1...@10.10.45.102:1025>.
> Call-ID: b998bb4a-1dd1-11b2-8cd3-d001388a8...@10.10.45.102.
> Content-Type: application/sdp.
> CSeq: 2 INVITE.
> From: "Sjphone laptop_User"<sip:1...@10.10.45.172>;tag=2061433461944847689.
> Max-Forwards: 69.
> To: <sip:30...@10.10.45.172>.
> User-Agent: SJphone/1.60.299a/L (SJ Labs).
> P-Asserted-Identity: <sip:003930...@10.10.45.172>.
> .
> v=0.
> o=- 3448000814 3448000814 IN IP4 10.10.45.102.
> s=SJphone.
> c=IN IP4 10.10.45.102.
> t=0 0.
> a=direction:active.
> m=audio 49154 RTP/AVP 3 97 98 110 8 0 101.
> a=rtpmap:3 GSM/8000.
> a=rtpmap:97 iLBC/8000.
> a=rtpmap:98 iLBC/8000.
> a=fmtp:98 mode=20.
> a=rtpmap:110 speex/8000.
> a=rtpmap:8 PCMA/8000.
> a=rtpmap:0 PCMU/8000.
> a=rtpmap:101 telephone-event/8000.
> a=fmtp:101 0-11,16.
>
>
> U 10.10.45.172:5060 -> 10.10.45.227:5060
> INVITE sip:22230...@10.10.45.227 SIP/2.0.
> Record-Route: <sip:10.10.45.172;lr=on;ftag=2061433461944847689>.
> Via: SIP/2.0/UDP 10.10.45.172;branch=z9hG4bK8586.95959e37.1.
> Via: SIP/2.0/UDP 
> 10.10.45.102:1025;received=10.10.45.102;rport=1025;branch=z9hG4bK0a0a2d660000001549d9d2ae0ccb24110000004a.
> Content-Length: 366.
> Contact: <sip:1...@10.10.45.102:1025>.
> Call-ID: b998bb4a-1dd1-11b2-8cd3-d001388a8...@10.10.45.102.
> Content-Type: application/sdp.
> CSeq: 2 INVITE.
> From: "Sjphone laptop_User"<sip:1...@10.10.45.172>;tag=2061433461944847689.
> Max-Forwards: 69.
> To: <sip:30...@10.10.45.172>.
> User-Agent: SJphone/1.60.299a/L (SJ Labs).
> P-Asserted-Identity: <sip:003930...@10.10.45.172>.
> P-Asserted-Identity: <sip:003930...@10.10.45.172>.
> .
> v=0.
> o=- 3448000814 3448000814 IN IP4 10.10.45.102.
> s=SJphone.
> c=IN IP4 10.10.45.102.
> t=0 0.
> a=direction:active.
> m=audio 49154 RTP/AVP 3 97 98 110 8 0 101.
> a=rtpmap:3 GSM/8000.
> a=rtpmap:97 iLBC/8000.
> a=rtpmap:98 iLBC/8000.
> a=fmtp:98 mode=20.
> a=rtpmap:110 speex/8000.
> a=rtpmap:8 PCMA/8000.
> a=rtpmap:0 PCMU/8000.
> a=rtpmap:101 telephone-event/8000.
> a=fmtp:101 0-11,16.
>
> Thanks in advance.
>
> Matteo Marzuola
>
>
> ----------------------------------------------------------------------------
> Vuoi essere presente online? 
> Vuoi dare voce alla tua attivita`? 
> Acquista un dominio su domini.interfree.it.
> A partire da 18,59 euro
> ----------------------------------------------------------------------------
>
>
> _______________________________________________
> Users mailing list
> Users@lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>   


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

Reply via email to