[svn-commits] jrose: branch 1.8 r332118 - /branches/1.8/channels/chan_sip.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Aug 16 12:38:24 CDT 2011


Author: jrose
Date: Tue Aug 16 12:38:19 2011
New Revision: 332118

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=332118
Log:
ASTERISK-18067 ASTERISK-15479 - White Space affects mailbox value, multiple MWI subs

Before, having multiple subscriptions to mailboxes on a sip peer set via the mailbox
setting in sip.conf would only result in updates being sent on whichever mailbox
triggered the mwi event.  Now all of them get counted regardless.  Also fixes a bug
involving parsing of the mailbox option in sip.conf so that trailing and leading
spaces before/after commas are trimmed.

(closes issue ASTERISK-18067)
Reported by: aragon

(closes issue ASTERISK-15479)
Reported by: Ben Winslow
Patches: chan_sip.c-mwi_multi_mailbox_fix-1.6.2.13.diff (License #5288) patch uploaded by Ben Winslow
 

Modified:
    branches/1.8/channels/chan_sip.c

Modified: branches/1.8/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/channels/chan_sip.c?view=diff&rev=332118&r1=332117&r2=332118
==============================================================================
--- branches/1.8/channels/chan_sip.c (original)
+++ branches/1.8/channels/chan_sip.c Tue Aug 16 12:38:19 2011
@@ -1253,7 +1253,7 @@
 static void copy_request(struct sip_request *dst, const struct sip_request *src);
 static void receive_message(struct sip_pvt *p, struct sip_request *req);
 static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req, char **name, char **number, int set_call_forward);
-static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *event, int cache_only);
+static int sip_send_mwi_to_peer(struct sip_peer *peer, int cache_only);
 
 /* Misc dialog routines */
 static int __sip_autodestruct(const void *data);
@@ -14003,7 +14003,7 @@
 	struct sip_peer *peer = userdata;
 
 	ao2_lock(peer);
-	sip_send_mwi_to_peer(peer, event, 0);
+	sip_send_mwi_to_peer(peer, 0);
 	ao2_unlock(peer);
 }
 
@@ -24235,7 +24235,7 @@
 			transmit_response(p, "200 OK", req);
 			if (p->relatedpeer) {	/* Send first notification */
 				ao2_lock(p->relatedpeer); /* was WRLOCK */
-				sip_send_mwi_to_peer(p->relatedpeer, NULL, 0);
+				sip_send_mwi_to_peer(p->relatedpeer, 0);
 				ao2_unlock(p->relatedpeer);
 			}
 		} else if (p->subscribed != CALL_COMPLETION) {
@@ -24948,7 +24948,7 @@
 }
 
 /*! \brief Send message waiting indication to alert peer that they've got voicemail */
-static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *event, int cache_only)
+static int sip_send_mwi_to_peer(struct sip_peer *peer, int cache_only)
 {
 	/* Called with peerl lock, but releases it */
 	struct sip_pvt *p;
@@ -24961,16 +24961,14 @@
 	if (ast_sockaddr_isnull(&peer->addr) && ast_sockaddr_isnull(&peer->defaddr))
 		return 0;
 
-	if (event) {
-		newmsgs = ast_event_get_ie_uint(event, AST_EVENT_IE_NEWMSGS);
-		oldmsgs = ast_event_get_ie_uint(event, AST_EVENT_IE_OLDMSGS);
-	} else if (!get_cached_mwi(peer, &newmsgs, &oldmsgs) && !cache_only) {
-		/* Fall back to manually checking the mailbox */
+	/* Attempt to use cached mwi to get message counts. */
+	if (!get_cached_mwi(peer, &newmsgs, &oldmsgs) && !cache_only) {
+		/* Fall back to manually checking the mailbox if not cache_only and get_cached_mwi failed */
 		struct ast_str *mailbox_str = ast_str_alloca(512);
 		peer_mailboxes_to_str(&mailbox_str, peer);
 		ast_app_inboxcount(mailbox_str->str, &newmsgs, &oldmsgs);
 	}
-	
+
 	if (peer->mwipvt) {
 		/* Base message on subscription */
 		p = dialog_ref(peer->mwipvt, "sip_send_mwi_to_peer: Setting dialog ptr p from peer->mwipvt-- should this be done?");
@@ -26452,7 +26450,8 @@
 	while ((mbox = context = strsep(&next, ","))) {
 		struct sip_mailbox *mailbox;
 		int duplicate = 0;
-
+		/* remove leading/trailing whitespace from mailbox string */
+		mbox = ast_strip(mbox);
 		strsep(&context, "@");
 
 		if (ast_strlen_zero(mbox)) {
@@ -27135,7 +27134,7 @@
 		/* Send MWI from the event cache only.  This is so we can send initial
 		 * MWI if app_voicemail got loaded before chan_sip.  If it is the other
 		 * way, then we will get events when app_voicemail gets loaded. */
-		sip_send_mwi_to_peer(peer, NULL, 1);
+		sip_send_mwi_to_peer(peer, 1);
 	}
 
 	peer->the_mark = 0;




More information about the svn-commits mailing list