diff options
-rw-r--r-- | channels/chan_sip.c | 23 |
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; |