summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2011-08-16 17:53:23 +0000
committerJonathan Rose <jrose@digium.com>2011-08-16 17:53:23 +0000
commit269082f035ff0b653d82429e6c9908a46e072f5c (patch)
treec6163a64013622bd7034764d5882341ac17d761f
parent3ad6dccac89ac21b040d9fa7a414e2aeec8a6660 (diff)
Merged revisions 332119 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10 ................ r332119 | jrose | 2011-08-16 12:45:38 -0500 (Tue, 16 Aug 2011) | 23 lines Merged revisions 332118 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r332118 | jrose | 2011-08-16 12:38:19 -0500 (Tue, 16 Aug 2011) | 16 lines 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 ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@332120 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--channels/chan_sip.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index a8058438a..1a5c07980 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1269,7 +1269,7 @@ static int send_request(struct sip_pvt *p, struct sip_request *req, enum xmittyp
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, struct ast_sockaddr *addr, const char *e);
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);
@@ -14325,7 +14325,7 @@ static void mwi_event_cb(const struct ast_event *event, void *userdata)
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);
}
@@ -14685,7 +14685,7 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock
sched_yield();
}
if (!res) {
- sip_send_mwi_to_peer(peer, NULL, 0);
+ sip_send_mwi_to_peer(peer, 0);
ast_devstate_changed(AST_DEVICE_UNKNOWN, "SIP/%s", peer->name);
}
if (res < 0) {
@@ -24884,7 +24884,7 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
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) {
@@ -25597,7 +25597,7 @@ static int get_cached_mwi(struct sip_peer *peer, int *new, int *old)
/*! \brief Send message waiting indication to alert peer that they've got voicemail
* \returns -1 on failure, 0 on success
*/
-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;
@@ -25612,11 +25612,9 @@ static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *e
return -1;
}
- 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);
/* if there is no mailbox do nothing */
@@ -27132,7 +27130,8 @@ static void add_peer_mailboxes(struct sip_peer *peer, const char *value)
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)) {
@@ -27822,7 +27821,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
/* 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;