[Serusers] Contact header during INVITE

samuel samu60 at gmail.com
Wed Apr 5 10:26:18 CEST 2006


I don't have much time so I can not detail it but you need to add a
reply_route and check if the reply comes from a nated end-poin, in
this case you should add fixed_nated_contact.

For details, check www.onsip.org and the getting started document...


Hope it helps.
Samuel


2006/4/4, PREVOT Paul <prevot at enseirb.fr>:
>
>
>
> Hello,
>
>
>
> I have an issue with the fix_nated_contact() function. OpenSer is supposed
> to change Contact header, but it only changes it in the INVITE message, but
> not in the OK response. As a consequence, ACK messages contain
> sip:test at 192.168.1.1:5060 and not the public ip. OpenSer doesn't know how to
> handle that ACK and forward it to 192.168.1.1:5060.
>
>
>
> The same issue occurs in CANCEL/487. Changes are done in CANCEL Contact
> header, but not in 487 reply. No problem for BYE, as OK response doesn't
> need an ACK
>
>
>
> I suppose I have something wrong in my cfg file, but I can't find it out.
>
>
>
> Regards,
>
> Paul
>
>
>
> Openser.Cfg:
>
>
>
> ...default loadmodules and modparam ...
>
>
>
> # main routing logic
>
>
>
> route{
>
>
>
>       # initial sanity checks -- messages with
>
>       # max_forwards==0, or excessively long requests
>
>       if (!mf_process_maxfwd_header("10")) {
>
>             sl_send_reply("483","Too Many Hops");
>
>             exit;
>
>       };
>
>
>
>       if (msg:len >=  2048 ) {
>
>             sl_send_reply("513", "Message too big");
>
>             exit;
>
>       };
>
>
>
>       # we record-route all messages -- to make sure that
>
>       # subsequent messages will go through our proxy; that's
>
>       # particularly good if upstream and downstream entities
>
>       # use different transport protocol
>
>       if (!method=="REGISTER"){
>
>             record_route();
>
>             force_rport();
>
>             fix_nated_register();
>
>             fix_nated_contact();
>
>       };
>
>
>
>       #if(search("Contact")){
>
>             #setflag(6);
>
>             #force_rport();
>
>             # fix_nated_contact();
>
>       #};
>
>
>
>       if(method!="REGISTER" && method!="ACK")
>
>       {
>
>             #record everything besides registers and acks
>
>             setflag(1);
>
>             setflag(3);
>
>       };
>
>
>
>
>
>       # subsequent messages withing a dialog should take the
>
>       # path determined by record-routing
>
>       if (loose_route()) {
>
>             # mark routing logic in request
>
>             append_hf("P-hint: rr-enforced\r\n");
>
>             route(1);
>
>       };
>
>
>
>       if (!uri==myself) {
>
>             # mark routing logic in request
>
>             append_hf("P-hint: outbound\r\n");
>
>             # if you have some interdomain connections via TLS
>
>             #if(uri=~"@tls_domain1.net") {
>
>             #
> t_relay_to_tls("IP_domain1","port_domain1");
>
>             #     exit;
>
>             #} else if(uri=~"@tls_domain2.net") {
>
>             #
> t_relay_to_tls("IP_domain2","port_domain2");
>
>             #     exit;
>
>             #}
>
>
>
>             route(1);
>
>       };
>
>
>
>
>
>       # if the request is for other domain use UsrLoc
>
>       # (in case, it does not work, use the following command
>
>       # with proper names and addresses in it)
>
>       if (uri==myself) {
>
>
>
>
>
>             if (method=="REGISTER") {
>
>
>
>                   #change contact field IP and port by those received really
> used after NAT rewritting by router
>
>                   #fix_nated_contact();
>
>                   #force openSer to respond on the port from which the
> request has been sent insteed of the port
>
>                   #in contact field.
>
>                   force_rport();
>
>                   # Uncomment this if you want to use digest authentication
>
>                   if (!www_authorize("mydomain", "subscriber")) {
>
>                         www_challenge("mydomain ", "0");
>
>                         exit;
>
>                   };
>
>                   setflag(1);
>
>                   setflag(3);
>
>                   fix_nated_register();
>
>                   save("location");
>
>                   exit;
>
>             };
>
>
>
>             lookup("aliases");
>
>             if (!uri==myself) {
>
>                   append_hf("P-hint: outbound alias\r\n");
>
>                   route(1);
>
>             };
>
>
>
>             # native SIP destinations are handled using our USRLOC DB
>
>             if (!lookup("location")) {
>
>                   sl_send_reply("404", "Not Found");
>
>                   exit;
>
>             };
>
>             append_hf("P-hint: usrloc applied\r\n");
>
>       };
>
>
>
>       route(1);
>
> }
>
>
>
>
>
> route[1] {
>
>       # send it out now; use stateful forwarding as it works reliably
>
>       # even for UDP2TCP
>
>       if (!t_relay()) {
>
>             sl_reply_error();
>
>       };
>
>       exit;
>
> }
>
>
>
>
>
>
> _______________________________________________
> Serusers mailing list
> serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
>
>
>




More information about the sr-users mailing list