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);
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);
}
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) {
}
/*! \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;
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?");
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)) {
/* 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;