summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;