[asterisk-users] Realtime SIP peers - reloading cached info

Rob Hillis rob at hillis.dyndns.org
Tue Feb 12 05:32:00 CST 2008


This /is/ implemented in the Asterisk Dialplan.

What we're doing is to write a custom "roaming extension" application 
that (among other things) alters the mailbox that the device looks at to 
set the MWI indicator to that of the "roaming" extension.  All the 
systems we sell have SIP peers stored in a realtime MySQL database.

For example, roaming extension 109 logs on to the device on extension 
900. (our client requires the device to always maintain it's own 
extension number)  As part of the login process, RealTimeUpdate is 
called to update the mailbox watched by the device from 900 to 109.  
While the update goes through fine, Asterisk itself has already cached 
the mailbox number as a result of having rtcachefriends set to "yes" in 
sip.conf.  Of course, this is required for the MWI indicator to work 
properly in the first place.

The point that I'm using the system calls is to flush the cached device 
details and reload them from MySQL.  I can't see any way of doing this 
through RealTimeUpdate or via any other application, so I'm left with 
the manager commands to flush the entry, followed by a "sip show XXX 
load" to re-cache the details.  Works nicely, but it seems a bit ugly to me.

Frankly, I'm surprised that RealTimeUpdate doesn't contain an option to 
flush and reload details, which would negate the need to employ other 
"hacks" to achieve this.


Atis Lezdins wrote:
> On 2/12/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
>   
>>  If this is the only real alternative, then in this instance I'll stick with
>> using the System command.  Writing an AGI to execute two manager commands in
>> this case is even greater overkill than using the System command.
>>
>>  I understand that normally anything that calls multiple manager commands
>> would usually be something complex enough to justify an AGI.  The exception
>> seems to be when you're dealing with cached realtime data. (is it just me,
>> or does that sound like a rather odd oxymoron?)
>>
>>
>>  ast guy wrote:
>>  > why don't you write an AGI which talks to asterisk manager API 5038 port
>> and executes the asterisk commands. You execute asterisk command via agi not
>> using system command
>>  >
>>  > -ag
>>  >
>>  > On Feb 11, 2008 11:24 AM, Rob Hillis <rob at hillis.dyndns.org
>> <mailto:rob at hillis.dyndns.org>> wrote:
>>  >
>>
>> Hi guys,
>>
>>  I've been working on a little dialplan fragment for roaming extensions,
>>  however the customer wants us to set the MWI indicator for the roaming
>>  extension that has just logged in.  We're using MySQL realtime, so I've
>>  figured out that RealTimeUpdate will happily update the realtime
>>  database with the correct mailbox.  My problem comes when I need to tell
>>  Asterisk to flush the realtime data for that extension and reload it so
>>  that the cached data is correct.  Running the commands "sip prune
>>  realtime peer XXX" followed by "sip show peer XXX load" work fine from
>>  the Asterisk manager interface and correctly update the cached data so
>>  the MWI indicator works fine.
>>
>>  What I want to know is if there is any better method of running manager
>>  API commands from within the dialplan than the horribly ugly
>>  System(asterisk -rx "sip prune realtime peer XXX")  It works, but from
>>  my point of view, it's a somewhat nasty hack.
>>
>>  Anyone have any suggestions?
>>     
>
> You could write dialplan application to do the same in chan_sip. Code
> should be very simple, just the processing of one argument and reusing
> existing functions. If you'll argument good enough why you need it, i
> think it could be included in asterisk.
>
> Regards,
> Atis
>
>
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080212/22f7e5cd/attachment.htm 


More information about the asterisk-users mailing list