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