Hi Bogdan,

Thanks for testing that. However, something must be different between your test 
and mine. I didn't make this up!
Were you using db_mode=3?   Were you using v2.2.x ?

By the way, I have moved on with this problem by creating a location table for 
each site. This works well, but I had to add a record to the 'version' table 
for each new location table as otherwise OpenSIPS fails during module 
initialisation with "wrong table version". It must be pre-scanning the script, 
looking at the argument passed to the save and lookup functions - how else 
could it know the name of the location table during initialisation.

Another observation, but of little importance: Some records in the old location 
table were not deleted when they expired. Does OpenSIPS internally create a 
timer task (to clear expired records) at run-time when the save() function is 
called? As I say, this is out of curiosity only and is not important.

John Quick
Smartvox Limited


-----Original Message-----
From: Bogdan-Andrei Iancu [mailto:bog...@opensips.org] 
Sent: 06 June 2017 15:25
To: john.qu...@smartvox.co.uk; 'OpenSIPS users mailling list' 
<users@lists.opensips.org>
Subject: Re: [OpenSIPS-Users] Location table - how to use socket

Hi John,

I just tried your logic and it seems to work. I had 2 phones registered under 
super_t...@opensips.org and made a call to that account:

Jun  6 16:20:19 voip opensips_proxy[2584]: test - 1 branches found while 
routing INVITE to sip:super_t...@opensips.org Jun  6 16:20:19 voip 
opensips_proxy[2584]: test - R3 IN: 
Req.type=INVITE
R-URI=sip:super_test@10.0.0.30:59565;rinstance=f5b110f9258cd910;transport=UDP
Br.cnt=1  Sock[0]=udp:172.16.36.74:5060 Sock[1]=<null> 
Call-ID=313439363735383831383130383437-mw5gjx27ee3d

The first registration was uploaded directly into the SIP msg (as RURI, DURI, 
etc), while the additional one was pushed as branch (see the "test
- 1 branches found" log). Printing the Sock[0] seems to provide the correct 
value.

Best regards,

Bogdan-Andrei Iancu
   OpenSIPS Founder and Developer
   http://www.opensips-solutions.com

OpenSIPS Bootcamp 2017, Houston, US
   http://opensips.org/training/OpenSIPS_Bootcamp_2017.html

On 05/31/2017 01:01 PM, John Quick wrote:
> Hello Bogdan,
>
> Here is the code I used to check $(branch(socket)[N]):
>
>     if (lookup("location")) {
>          set_count("$branch(uri)", "$var(brcnt)");
>          if ($var(brcnt) > 0) {
>              # More than one contact - not possible to check socket data
>              xlog("L_WARN", "    R3 IN: Req.type=$rm  R-URI=$ru  
> Br.cnt=$var(brcnt)  Sock[0]=$(branch(socket)[0]) Sock[1]=$(branch(socket)[1]) 
>  Call-ID=$ci\n");
>          } else  ...
>
> And here is the log file output when I have two registrations on the 
> same username
>
> R3 IN: Req.type=INVITE  R-URI=sip:01NNNNNN@12.34.56.245:5060  Br.cnt=1  
> Sock[0]=<null> Sock[1]=<null>  
> Call-ID=41d17a02...@sip1.mysipdomain.com
>
> The records in the location table both have data in the socket field.  
> This is running on version 2.2.4 of OpenSIPS
>
> John Quick
> Smartvox Limited
> Tel:   01727-221221
>
>
> -----Original Message-----
> From: Bogdan-Andrei Iancu [mailto:bog...@opensips.org]
> Sent: 29 May 2017 11:32
> To: john.qu...@smartvox.co.uk; 'OpenSIPS users mailling list' 
> <users@lists.opensips.org>
> Subject: Re: [OpenSIPS-Users] Location table - how to use socket
>
> Hi John,
>
> the only way to share records via DB is to use DB only - the other modes are 
> using the DB just for restart persistence reason (they do not read from DB at 
> runtime, only once, at startup). In DB-only mode, all reads and writes 
> (related to contacts) are done against the DB.
>
> In regards to $(branch(socket)[N]) - do you use it after a
> lookup(location) ? are you sure that the N'th branch exists and have a socket 
> ?
>
> You may consider saving some extra attributes next to the contact ( 
> see
> http://www.opensips.org/html/docs/modules/2.2.x/registrar.html#idp5568
> 288) to identify the pop/host which produced that record.
>
> Best regards,
>
> Bogdan-Andrei Iancu
>     OpenSIPS Founder and Developer
>     http://www.opensips-solutions.com
>
> OpenSIPS Bootcamp 2017, Huston, US
>     http://opensips.org/training/OpenSIPS_Bootcamp_2017.html
>
> On 05/26/2017 07:38 PM, John Quick wrote:
>> Hi Bogdan,
>>
>> Yes. I tried with db_mode=1 and it behaved very strangely so I changed it to 
>> db_mode=3 (DB only).
>>
>> Also tried $(branch(socket)[N]) to read the socket data within my script, 
>> but it always returns <null>.
>>
>> I am now thinking it will be necessary to have one location table per site, 
>> but perhaps you could consider adding options in future releases to allow 
>> the lookup function to only select contacts where the socket matches one 
>> that this server is listening on.
>>
>> John Quick
>> Smartvox Limited
>>
>>
>> -----Original Message-----
>> From: Bogdan-Andrei Iancu [mailto:bog...@opensips.org]
>> Sent: 26 May 2017 17:30
>> To: john.qu...@smartvox.co.uk; OpenSIPS users mailling list 
>> <users@lists.opensips.org>
>> Subject: Re: [OpenSIPS-Users] Location table - how to use socket
>>
>> Hi John,
>>
>> I suppose you are using usrloc with DB-only to share registrations between 
>> multiples sites, otherwise the socket filter will not make sense, right ?
>>
>> Best regards,
>>
>> Bogdan-Andrei Iancu
>>      OpenSIPS Founder and Developer
>>      http://www.opensips-solutions.com
>>
>> OpenSIPS Bootcamp 2017, Huston, US
>>      http://opensips.org/training/OpenSIPS_Bootcamp_2017.html
>>
>> On 05/25/2017 06:16 PM, John Quick wrote:
>>> The socket field in the location table sometimes contains very 
>>> useful information such as:
>>> - to see which server received the Registration in a dual site 
>>> scenario
>>> - to see if the UA registered over UDP, TCP or TLS
>>>
>>> However, there does not seem to be any mechanism for using the 
>>> socket information in the USRLOC or REGISTRAR modules.
>>> For example, it is not possible to call lookup and filter for 
>>> contacts made on the local server's socket or for contacts that used TLS.
>>>
>>> Please could the developers look at options to leverage this useful 
>>> data, especially for the lookup function.
>>>
>>> Are there any tricks I could employ to achieve the same result. For 
>>> example, if I set a branch flag to indicate which site received this 
>>> registration would it then be possible to filter the results 
>>> returned by lookup and extract the registrations received at site A 
>>> while discarding those received at site B?
>>>
>>> To give a practical example: Dual site; Shared location table; 
>>> User's device is registered at site B; Call arrives at site A so I 
>>> want to use 302 redirect to send it over to site B, but I cannot 
>>> tell from the results of a lookup whether the registration was made 
>>> at A or B even though the data is there in the socket field.
>>>
>>> John Quick
>>> Smartvox Limited
>>>
>>>
>>>
>>> _______________________________________________
>>> 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