[OpenSIPS-Users] Location table - how to use socket
Bogdan-Andrei Iancu
bogdan at opensips.org
Tue Jun 6 10:25:11 EDT 2017
Hi John,
I just tried your logic and it seems to work. I had 2 phones registered
under super_test at 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_test at opensips.org
Jun 6 16:20:19 voip opensips_proxy[2584]: test - R3 IN:
Req.type=INVITE
R-URI=sip:super_test at 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 at 12.34.56.245:5060 Br.cnt=1 Sock[0]=<null> Sock[1]=<null> Call-ID=41d17a02d29 at 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:bogdan at opensips.org]
> Sent: 29 May 2017 11:32
> To: john.quick at smartvox.co.uk; 'OpenSIPS users mailling list' <users at 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#idp5568288)
> 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:bogdan at opensips.org]
>> Sent: 26 May 2017 17:30
>> To: john.quick at smartvox.co.uk; OpenSIPS users mailling list
>> <users at 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 at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
More information about the Users
mailing list