[SR-Users] Multiple Registrations - Overwrite oldest contact

Bruno Emer brunoemer at gmail.com
Tue May 17 19:30:48 CEST 2016


Hello, David.

Sorry for the time to reply you. I was a little busy here in the last few
days.

I am not sure about the "==". We had tried it here, but it only worked when
we used with =~. We are currently running kamailio 4.2, so it may be a
problem with our version.

About the $hdr variable, it is used to get information from the SIP
Headers. I am not sure, but I dont think that there is an header with
Instance-ID, so you must try to find how can you get this ID in kamailio,
as I don't know where is it saved.



*Bruno Emer*

Mobile: +55 11 96540-0044
email: brunoemer at gmail.com
<https://www.facebook.com/bruno.emer.5>
<https://www.linkedin.com/profile/view?id=86461237&trk=spm_pic>
<https://twitter.com/brunoemer_>
<https://www.flickr.com/photos/122070309@N03/>
<http://google.com/+BrunoEmer>  <http://instagram.com/brunoemer_>

2016-05-13 12:24 GMT-03:00 Bruno Emer <brunoemer at gmail.com>:

> Hello all!
>
> After some time I was able to get this working here, and now I am coming
> back to share my configuration with you guys (in case someone needs to get
> this working).
>
> Here is what we have done:
>
> route[REGISTRAR] {
>         if (is_method("REGISTER"))
>         {
>                 if(isflagset(FLT_NATS))
>                 {
>                         setbflag(FLB_NATB);
>                         # uncomment next line to do SIP NAT pinging
>                         ## setbflag(FLB_NATSIPPING);
>                 }
>
>                 xlog("L_INFO", "checking $tu registered with
> User-Agent:$hdr(User-Agent)\n");
>                 if(reg_fetch_contacts("location", "$tu", "caller"))
>                 {
>                         xlog("L_INFO", "$(ulc(caller=>count)) records
> found for $tu\n");
>                         $var(i) = 0;
>                         while($var(i) < $(ulc(caller=>count)))
>                         {
>
>                                 xlog("L_INFO", "record $var(i) with
> ruid:$(ulc(caller=>ruid)[$var(i)]) -
> User-Agent:$(ulc(caller=>user_agent)[$var(i)])");
>                                 if
> ($hdr(User-Agent)=~$(ulc(caller=>user_agent)[$var(i)]))
>                                 {
>                                         $var(ruid) =
> $(ulc(caller=>ruid)[$var(i)]);
>                                         xlog("L_INFO", "unregistering $tu
> ruid:$var(ruid)");
>                                         unregister("location", "$tu",
> "$var(ruid)");
>                                 }
>                                 $var(i) = $var(i) + 1;
>                         }
>                 }
>                 if (!save("location", "0x00"))
>                         sl_reply_error();
>
>                 exit;
>         }
> }
>
>
> There are some logs over there because we used it to see what was going on
> while testing the configurations.
>
>
> With this we can get just one register per User-Agent.
>
>
> And again, thanks Olle for your help in this problem
>
> *Bruno Emer*
>
> Mobile: +55 11 96540-0044
> email: brunoemer at gmail.com
> <https://www.facebook.com/bruno.emer.5>
> <https://www.linkedin.com/profile/view?id=86461237&trk=spm_pic>
> <https://twitter.com/brunoemer_>
> <https://www.flickr.com/photos/122070309@N03/>
> <http://google.com/+BrunoEmer>  <http://instagram.com/brunoemer_>
>
> 2016-04-01 17:37 GMT-03:00 Bruno Emer <brunoemer at gmail.com>:
>
>> Sure it is!
>>
>> This is exactly what I was looking for! Actually I wasn't able to see
>> that there was a way to perform this action!
>>
>> Thanks for your help, Olle!
>>
>> I will try to create this, and when I have it done, I will post my script
>> here, so if someone else need the same problem I can help.
>>
>> Now, I have just one more question about my scenario: when I register a
>> user, is there a way to create something like a "custom field" on the
>> location? To explain better: If possible, I can add something like a custom
>> header that says if the user is registered from a phone device or the web
>> interface, then I can perform the loop and replace only the oldest contact
>> using that device...
>>
>>
>>
>> *Bruno Emer*
>>
>> Mobile: +55 11 96540-0044
>> email: brunoemer at gmail.com
>>
>> 2016-04-01 17:18 GMT-03:00 Bruno Emer <brunoemer at gmail.com>:
>>
>>> This is my problem... I want to have 2 contacts for AOR, and not only
>>> one.
>>>
>>> When the 3rd arrives, it must remove the oldest and continue with 2...
>>>
>>> *If I am using the 0x04 parameter, it will save just one contact, and
>>> the user will not be able to get the Invite both, in the mobile device and
>>> web interface.*
>>>
>>> *Bruno Emer*
>>>
>>> Mobile: +55 11 96540-0044
>>> email: brunoemer at gmail.com
>>> <https://www.facebook.com/bruno.emer.5>
>>> <https://www.linkedin.com/profile/view?id=86461237&trk=spm_pic>
>>> <https://twitter.com/brunoemer_>
>>> <https://www.flickr.com/photos/122070309@N03/>
>>> <http://google.com/+BrunoEmer>  <http://instagram.com/brunoemer_>
>>>
>>> 2016-04-01 17:07 GMT-03:00 Bruno Emer <brunoemer at gmail.com>:
>>>
>>>> Hello, *Olle!*
>>>>
>>>> *Thanks for your help in this case, and don't worry about the time
>>>> (actually I wasn't even expecting to get an answer today).*
>>>>
>>>>
>>>> *I know the max_contacts parameter. But the problem is that if I set
>>>> the max_contacts to 2, when the user tries to register again, he gets an
>>>> error message 503. The point is that I want to get the user registered, and
>>>> replace the oldest location entry for the newest one.*
>>>>
>>>>
>>>>
>>>> *Bruno Emer*
>>>>
>>>> Mobile: +55 11 96540-0044
>>>> email: brunoemer at gmail.com
>>>>
>>>> 2016-04-01 16:31 GMT-03:00 Bruno Emer <brunoemer at gmail.com>:
>>>>
>>>>> Hello all.
>>>>>
>>>>> I have problem here and I tried to find a solution and search over
>>>>> internet, but without success.
>>>>>
>>>>> My scenario is the following: I have an application that must be
>>>>> registered in Kamailio when a user logs in the web interface, so he can get
>>>>> calls (something like a web softphone using webrtc). At this point, we are
>>>>> OK, and everything is working fine.
>>>>>
>>>>> To get these register functions I am using the parameter
>>>>> "save("location", "0x04")" as described in the REGISTRAR module
>>>>> documentation, so if a user logs in another web browser or computer, only
>>>>> the last one will continue registered and all calls will be forwarded to
>>>>> him.
>>>>>
>>>>> The point is that now we are creating a phone app that will do almost
>>>>> the same thing as the web interface, allowing users to receive calls using
>>>>> the mobile device, and here is my problem: I want to allow my users to be
>>>>> registered on two devices at the same time, but if a user logs into another
>>>>> device, I don't want to reply with a 503. I want to allow the user to
>>>>> register again, deregistering the oldest contact.
>>>>>
>>>>> I saw that there is a module named "ims_usrloc_scscf" and on its
>>>>> description it says "implemented overwrite oldest contact behaviour",
>>>>> but I couldn't find any documentation about it.
>>>>>
>>>>> So, is there a way to get this working today?
>>>>>
>>>>>
>>>>> *Bruno Emer*
>>>>>
>>>>> Mobile: +55 11 96540-0044
>>>>> email: brunoemer at gmail.com
>>>>>
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20160517/794d03e6/attachment.html>


More information about the sr-users mailing list