[Serusers] MWI - message waiting indication

harry gaillac gaillacharry at yahoo.fr
Sun Sep 4 00:42:34 CEST 2005


hello,

I read
http://www.voip-info.org/tiki-index.php?page=Asterisk+at+large


anybody could tell me more about this ?
Is it available with ARA ?

Regards
Harry


Method 3

Q: If you have your SIP phones registered with SER but
your voicemail is handled by asterisk, how do you get
the MWI (Message Waiting Indicator) light to function
on the phone?

A: In sip.conf create a section pointing at your SER
router.

 [ser]
 type=friend                ; We allow incoming and
outgoing calls. Use peer if you are only doing MWI
 context=ser                ; This is the context
incoming calls land in
 host=ser.server.tld        ; This is the hostname or
IP address of your SER server
 fromdomain=ser.server.rld  ; This is your SER_DOMAIN
 insecure=very              ; This allows incoming
calls from the phones routing through ser to be passed
into asterisk
 mailbox=user at context       ; This is where you list
the voicemail boxes to monitor

This tells asterisk that if a voicemail comes in to
"user" then it needs to send a SIP NOTIFY message to
the "ser.server.tld" phone. Well this is all well and
good except how does SER deliver this NOTIFY to the
phones? First thing is that you need to make a tiny
change to the asterisk code to pass the mailbox user
in the SIP NOTIFY packet.

--- channels/chan_sip.c.orig    Thu Jul 14 12:03:18
2005
+++ channels/chan_sip.c Thu Jul 14 12:05:26 2005
@@ -9710,6 +9710,7 @@
        /* Called with peerl lock, but releases it */
        struct sip_pvt *p;
        int newmsgs, oldmsgs;
+       char *s;

        /* Check for messages */
        ast_app_messagecount(peer->mailbox, &newmsgs,
&oldmsgs);
@@ -9735,6 +9736,10 @@
        /* Recalculate our side, and recalculate Call
ID */
        if
(ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
                memcpy(&p->ourip, &__ourip,
sizeof(p->ourip));
+       strcpy(p -> username, peer -> mailbox);  /*
Username = Mailbox name */
+       s = strchr(p -> username, '@');          /*
Remove the context part */
+       if (s != NULL)
+                *s = 0;
        build_via(p, p->via, sizeof(p->via));
        build_callid(p->callid, sizeof(p->callid),
p->ourip, p->fromdomain);
        /* Send MWI */



After this patch is applied, the MWI NOTIFY messages
coming from asterisk will have the URI
user at ser.server.tld. This can be then routed with ser
to the correct phone with normal SER routing rules.
ie. SER does a lookup("location") and then a
t_relay(). I don't believe this patch should effect
any non-ser controlled sip phones.

For me, this method was a lot easier then Method 2
listed above. You can add as may mailbox's as you like
into the mailbox= line in the asterisk sip.conf file.
One possible problem is if you have a mailbox called
1000 at cx1 and another called 1000 at cx2, this patch will
make the MWI indicator light up for phone
1000 at ser.server.tld when either mailbox gets a
message. A simple modification to the patch and SER
could be used to handle multiple contexts if required
however this simplification is sufficient for me.




	

	
		
___________________________________________________________________________ 
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger 
Téléchargez cette version sur http://fr.messenger.yahoo.com




More information about the sr-users mailing list