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 problem2016-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...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 EmerMobile: +55 11 96540-0044email: brunoemer@gmail.com2016-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.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?