From 961dd9fe52f9c53a314dcf2cdfb7840d473da672 Mon Sep 17 00:00:00 2001 From: Sungtae Kim Date: Tue, 6 Mar 2018 15:14:54 +0100 Subject: voicemail: Fixed wrong voicemail message count Fixed wrong voicemail mailbox reference for Action: VoicemailUsersList. ASTERISK-27703 Change-Id: Ie6578ad80bba2bfaf34b84f0be978f59045ce6cd --- apps/app_voicemail.c | 74 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 17 deletions(-) (limited to 'apps') diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 72e3e59c1..1e7d09128 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -6089,22 +6089,33 @@ static int has_voicemail(const char *mailbox, const char *folder) return 0; } - +/*! + * \brief Check the given mailbox's message count. + * \param mailbox The @ delimited string for user@context. If no context is found, uses 'default' for the context. + * \param urgentmsgs urgent message count. + * \param newmsgs new message count. + * \param oldmsgs old message count pointer + * \return -1 if error occurred, 0 otherwise. + */ static int inboxcount2(const char *mailbox, int *urgentmsgs, int *newmsgs, int *oldmsgs) { char tmp[256]; char *context; /* If no mailbox, return immediately */ - if (ast_strlen_zero(mailbox)) + if (ast_strlen_zero(mailbox)) { return 0; + } - if (newmsgs) + if (newmsgs) { *newmsgs = 0; - if (oldmsgs) + } + if (oldmsgs) { *oldmsgs = 0; - if (urgentmsgs) + } + if (urgentmsgs) { *urgentmsgs = 0; + } if (strchr(mailbox, ',')) { int tmpnew, tmpold, tmpurgent; @@ -6114,15 +6125,18 @@ static int inboxcount2(const char *mailbox, int *urgentmsgs, int *newmsgs, int * mb = tmp; while ((cur = strsep(&mb, ", "))) { if (!ast_strlen_zero(cur)) { - if (inboxcount2(cur, urgentmsgs ? &tmpurgent : NULL, newmsgs ? &tmpnew : NULL, oldmsgs ? &tmpold : NULL)) + if (inboxcount2(cur, urgentmsgs ? &tmpurgent : NULL, newmsgs ? &tmpnew : NULL, oldmsgs ? &tmpold : NULL)) { return -1; - else { - if (newmsgs) + } else { + if (newmsgs) { *newmsgs += tmpnew; - if (oldmsgs) + } + if (oldmsgs) { *oldmsgs += tmpold; - if (urgentmsgs) + } + if (urgentmsgs) { *urgentmsgs += tmpurgent; + } } } } @@ -6131,17 +6145,21 @@ static int inboxcount2(const char *mailbox, int *urgentmsgs, int *newmsgs, int * ast_copy_string(tmp, mailbox, sizeof(tmp)); - if ((context = strchr(tmp, '@'))) + if ((context = strchr(tmp, '@'))) { *context++ = '\0'; - else + } else { context = "default"; + } - if (newmsgs) + if (newmsgs) { *newmsgs = __has_voicemail(context, tmp, "INBOX", 0); - if (oldmsgs) + } + if (oldmsgs) { *oldmsgs = __has_voicemail(context, tmp, "Old", 0); - if (urgentmsgs) + } + if (urgentmsgs) { *urgentmsgs = __has_voicemail(context, tmp, "Urgent", 0); + } return 0; } @@ -13241,7 +13259,10 @@ static void stop_poll_thread(void) poll_thread = AST_PTHREADT_NULL; } -/*! \brief Append vmu info string into given astman with event_name. */ +/*! + * \brief Append vmu info string into given astman with event_name. + * \return 0 failed. 1 otherwise. +*/ static int append_vmu_info_astman( struct mansession *s, struct ast_vm_user *vmu, @@ -13251,14 +13272,33 @@ static int append_vmu_info_astman( { int new; int old; + char *mailbox; + int ret; if((s == NULL) || (vmu == NULL) || (event_name == NULL) || (actionid == NULL)) { ast_log(LOG_ERROR, "Wrong input parameter."); return 0; } + /* create mailbox string */ + if (!ast_strlen_zero(vmu->context)) { + ret = ast_asprintf(&mailbox, "%s@%s", vmu->mailbox, vmu->context); + } else { + ret = ast_asprintf(&mailbox, "%s", vmu->mailbox); + } + if (ret == -1) { + ast_log(LOG_ERROR, "Could not create mailbox string. err[%s]\n", strerror(errno)); + return 0; + } + /* get mailbox count */ - inboxcount(vmu->mailbox, &new, &old); + ret = inboxcount(mailbox, &new, &old); + ast_free(mailbox); + if (ret == -1) { + ast_log(LOG_ERROR, "Could not get mailbox count. user[%s], context[%s]\n", + vmu->mailbox ?: "", vmu->context ?: ""); + return 0; + } astman_append(s, "Event: %s\r\n" -- cgit v1.2.3