[Kamailio-Devel] registrar module enhancements

Daniel-Constantin Mierla miconda at gmail.com
Wed Oct 1 18:58:25 CEST 2008


Hello,

in the last time several enhancements were added to registrar module to 
help in dealing with user location records. This correlated with the new 
modue pv shall give lot of control over the destination set for calls.

To get the latest 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;
}

Testing and feedback is very much appreciated.

For the future:
- unregister() to get a $ulc(...) variable as parameter to unregister a specific contact
- drop a branch via pv module

Cheers,
Daniel
 

-- 
Daniel-Constantin Mierla
http://www.asipto.com




More information about the Devel mailing list