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 
     

2016-05-13 12:24 GMT-03:00 Bruno Emer <brunoemer@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

     

2016-04-01 17:37 GMT-03:00 Bruno Emer <brunoemer@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


2016-04-01 17:18 GMT-03:00 Bruno Emer <brunoemer@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

     

2016-04-01 17:07 GMT-03:00 Bruno Emer <brunoemer@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


2016-04-01 16:31 GMT-03:00 Bruno Emer <brunoemer@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