To get the latest Kamailio (OpenSER) devel version, check out the latest svn:
svn co https://openser.svn.sourceforge.net/svnroot/openser/trunk kamailio
The news in registrar module are:
- ability to unregister all contacts for a SIP addres - there is a new function: unregister(table, uri)
- ability to store and maintain single contact per user - the save() function accepts a new value for flags parameter (0x04) to restrict to one single record in location table
- ability to access the attributes of all contacts for a user - there are two new functions: reg_fetch_contacts(table, uri, profile) and reg_free_contacts(profile) to make available/release the contacts for a SIP uri. After fetching the contacts, the attributes can be accessed via pseudo variable $ulc(profile=>attr).
For more details see the README:
http://www.kamailio.org/docs/modules/devel/registrar.html
Here are couple of use cases:
1) only one contact per user
save("location", "0x04");
Note that if you have couple of phones registering for same user, the one that sent last REGISTER message will be the only ringing.
2) check if a user is calling from a registered device and if not, deny the call
if(!reg_fetch_contacts("location", "$fu", "caller"))
{
sl_send_reply("403", "Please register first");
exit;
}
$var(i) = 0;
$var(found) = 0;
$var(contact) = $(ct{nameaddr.uri});
while($var(found) == 0 && $var(i) < $(ulc(caller=>count)))
{
$if($var(contact)==$(ulc(caller=>addr)[$var(i)]))
$var(found) = 1;
else
$var(i) = $var(i) + 1;
}
if($var(found) == 0)
{
sl_send_reply("403", "Please register first");
exit;
}
For the future:
- unregister() to get a $ulc(...) variable as parameter to unregister a specific contact
- drop a branch via pv module
No comments:
Post a Comment