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

Atis Lezdins atis at iq-labs.net
Tue Feb 12 06:03:51 CST 2008


On 2/12/08, Rob Hillis <rob at hillis.dyndns.org> wrote:
>
>  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.

By RealTimeUpdate do you mean func_realtime? It shouldn't care, as
cache is not implemented in realtime level, but higher (chan_sip).

Are you sure you need "sip show XXX load". If you "sip prune" peer
data, it should be re-loaded on next access.

What i was suggesting - to dig into chan_sip and create dialplan
application SipPrune(peer) that would prune the peer directly, by
using corresponding function - sip_prune_peer() in chan_sip.c - that
way you will gain some extra performance, as there's no manager/cli
overhead.

However if you're uncomfortable with C, the app_system shouldn't cause
any troubles :)

Regards,
Atis


>
>
>
>  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
>
>
>
>
> _______________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>
> http://lists.digium.com/mailman/listinfo/asterisk-users
>


-- 
Atis Lezdins
VoIP Developer,
IQ Labs Inc.
atis at iq-labs.net
Skype: atis.lezdins
Cell Phone: +371 28806004
Work phone: +1 800 7502835



More information about the asterisk-users mailing list