[OpenSIPS-Users] [SR-Users] [NOT Solved]Creating RURI ($ru) from Contact ($ct)

Aft nix aftnix at gmail.com
Tue May 29 10:39:04 CEST 2012


Hi,

Sorry guyz, the problem is not solved as i thought. The script worked
perfectly in my lab where i did'nt know that the wifi router is a so
called "sip friendly router". It fixes broken contacts so it worked
perfectly in my lab.

But in my production server it did'nt work.

Problem is when i put "contact" in hash table entry like following :

sht(a=>$ci) = $ct;

it puts the broken contact adress( I mean contact address with private
IP) into the hashtable.

At first i put my code after the execution of "fix_nated_contact()".
But it did'nt work. Then i put a xlog() to print $ct. And to my
surprise i saw that its printing the private IP instead of the public
one. After searching through mailing list archives i came across this
:

http://lists.iptel.org/pipermail/serusers/2006-September/030511.html

According to this although the contact is fixed with received IP and
port, its not applied to the message buffer and kept in temporary
storage. when the message is about to be sent over sockets this
temporary storage is applied over the the original message buffer.
pseudo variables like $ct will always reference to the original
message, not the modified one after fix_nated_contact().

So to populate my hashtable, i have to choices:

1. I can reference src_ip and src_port , put a ":" between them  like
following :

sht(a=>$ci) = $fU + src_ip + ":" + src_port (Please help with the
correct syntax for string concatenation).

2. Or if possible i reference the changed contact from the temporary
storage, and put this into my hashtable.

Please direct me which way should i go.

Cheers.

On Mon, May 28, 2012 at 8:25 PM, Aft nix <aftnix at gmail.com> wrote:
> Hi all,
> I'm posting the script which worked. In future if anybody faces the
> same problem can get a solution out of this.
>
> In request_route:
>
>  #!ifdef WITH_HASH
>         if (is_method("INVITE") && !has_totag()){
>                 xdbg ("Contact [$ct] with Callid [$ci]");
>                 $sht(a=>$ci) = $ct;
>         }
>  #!endif
>
> in route[WITHINDLG]
>
> #!ifdef WITH_HASH
>                                 xdbg ("ruri [$ru]");
>                                 if ($(sht(a=>$ci){nameaddr.uri}) != $ru){
>                                         xdbg ("hash table entry
> [$sht(a=>$ci)]");
>                                         $ru = $(sht(a=>$ci){nameaddr.uri});
>                                         sht_rm_name_re("ha=>$ci");
>                                         xdbg ("rewriting ruri to [$ru]");
>                                 }
>  #!endif
>
>
> Thanks everyone for the help. I'm marking this thread as solved.
> --
> -aft
>
>
> --
> -aft



-- 
-aft



More information about the Users mailing list