[OpenSER-Users] record_route_preset("x.x.x.x:5060; nat=yes"); and search("^Route:.*; nat=yes")

Bogdan-Andrei Iancu bogdan at voice-system.ro
Fri Sep 14 10:47:51 CEST 2007


Hi Halomoan,

loose_route() only marks the Route hdr to be deleted when the message is 
sent out (it does not actually delete the hdr). So, the search after 
loose_route() should work, but it look a bit broken to me, as it will 
check all the Route hdrs and not only the one belonging to the server.

regards,
bogdan

Halomoan Chow wrote:
> I copy and paste the logic example generated from sipwise below.
> I can see for first request, it marked the sender is behind nat with 
> record_route(";nat=yes")
>
> In the loose route block, it tries to identify sender if they are 
> behind nat with search("^Route:.*;nat=yes").
>
> In one sip proxy architecture, after you enter loose_route() function, 
> the Via with ;nat has gone, right? and the search("^Route:.*;nat=yes") 
> test would always return false.
> Please correct me if i'm wrong. Thank you.
>
>
>         if(!is_method("REGISTER"))
>         {
>                 if(nat_uac_test("19"))
>                 {
>                         record_route(";nat=yes");
>                 }
>                 else
>                 {
>                         record_route();
>                 }
>         }
>         if(is_method("CANCEL") || is_method("BYE"))
>         {
>                 end_media_session();
>         }
>
>         if(loose_route())
>         {
>                 if(!has_totag())
>                 {
>
>                         xlog("L_INFO", "Initial loose-routing rejected 
> - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
>                         sl_send_reply("403", "Initial Loose-Routing 
> Rejected");
>                         exit;
>                 }
>                 if(nat_uac_test("19") || search("^Route:.*;nat=yes"))
>                 {
>                         fix_nated_contact();
>                         setbflag(6);
>                 }
>
>                 route(3);
>         }
>
>
> On 9/12/07, *Bogdan-Andrei Iancu* <bogdan at voice-system.ro 
> <mailto:bogdan at voice-system.ro>> wrote:
>
>     Hi Halomoan,
>
>     Mainly because the NAT detection on SIP replied is very poor - you can
>     check only if the contact address is a private one or not. The
>     other nat
>     test are not applicable for replies (but only for requests).
>
>     Anthow, when you process the request, you learn that the calee is
>     behind
>     NAT, so you can simple remember this (in RR) than detecting it
>     each time
>     when receiving a reply.
>
>     regards,
>     bogdan
>
>     Halomoan Chow wrote:
>     > Dear All
>     >
>     > I don't understand why in the Openser+MediaProxy i need
>     > record_route_preset("x.x.x.x:5060;nat=yes"); and
>     > search("^Route:.*;nat=yes")
>     > What is the purpose while I can do client_nat_test to see if the
>     > request is come from a nat-ed client.
>     >
>     > If I remove search("^Route:.*;nat=yes") from below statement, I
>     can do
>     > re-INVITE without any problem because it still have
>     client_nat_test to
>     > find out the nat in between.
>     >
>     > if (client_nat_test("3") || search("^Route:.*;nat=yes")) {
>     >    setbflag(6);
>     >    use_media_proxy();
>     > };
>     >
>     >
>     > Hope someone can give me a clue.
>     >
>     > Thank you.
>     >
>     > Regards,
>     >
>     > Halomoan
>     >
>     ------------------------------------------------------------------------
>     >
>     > _______________________________________________
>     > Users mailing list
>     > Users at openser.org <mailto:Users at openser.org>
>     > http://openser.org/cgi-bin/mailman/listinfo/users
>     >
>
>





More information about the Users mailing list