[asterisk-commits] jpeeler: trunk r287016 - in /trunk: ./ apps/app_voicemail.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Sep 15 15:36:54 CDT 2010
Author: jpeeler
Date: Wed Sep 15 15:36:51 2010
New Revision: 287016
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=287016
Log:
Merged revisions 287015 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
................
r287015 | jpeeler | 2010-09-15 15:32:52 -0500 (Wed, 15 Sep 2010) | 21 lines
Merged revisions 286998 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2
................
r286998 | jpeeler | 2010-09-15 15:28:02 -0500 (Wed, 15 Sep 2010) | 14 lines
Merged revisions 286941 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r286941 | jpeeler | 2010-09-15 15:08:52 -0500 (Wed, 15 Sep 2010) | 7 lines
Ensure mailbox is not filled to capacity before doing message forwarding.
Specifically, before prompting to record a prepended message the capacity is
checked first. If the mailbox is full the extension will be reprompted.
ABE-2517
........
................
................
Modified:
trunk/ (props changed)
trunk/apps/app_voicemail.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.
Modified: trunk/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/trunk/apps/app_voicemail.c?view=diff&rev=287016&r1=287015&r2=287016
==============================================================================
--- trunk/apps/app_voicemail.c (original)
+++ trunk/apps/app_voicemail.c Wed Sep 15 15:36:51 2010
@@ -6906,7 +6906,7 @@
AST_LIST_HEAD_NOLOCK_STATIC(extensions, ast_vm_user);
char *stringp;
const char *s;
- int saved_messages = 0, found = 0;
+ int saved_messages = 0;
int valid_extensions = 0;
char *dir;
int curmsg;
@@ -7014,8 +7014,29 @@
valid_extensions = 1;
while (s) {
if ((is_new_message == 1 || strcmp(s, sender->mailbox)) && (receiver = find_user(NULL, context, s))) {
+ int oldmsgs;
+ int newmsgs;
+ int capacity;
+ if (inboxcount(s, &newmsgs, &oldmsgs)) {
+ ast_log(LOG_ERROR, "Problem in calculating number of voicemail messages available for extension %s\n", s);
+ /* Shouldn't happen, but allow trying another extension if it does */
+ res = ast_play_and_wait(chan, "pbx-invalid");
+ valid_extensions = 0;
+ break;
+ }
+ capacity = receiver->maxmsg - inprocess_count(receiver->mailbox, receiver->context, +1);
+ if ((newmsgs + oldmsgs) >= capacity) {
+ ast_log(LOG_NOTICE, "Mailbox '%s' is full with capacity of %d, prompting for another extension.\n", s, capacity);
+ res = ast_play_and_wait(chan, "vm-mailboxfull");
+ valid_extensions = 0;
+ while ((vmtmp = AST_LIST_REMOVE_HEAD(&extensions, list))) {
+ inprocess_count(vmtmp->mailbox, vmtmp->context, -1);
+ free_user(vmtmp);
+ }
+ inprocess_count(receiver->mailbox, receiver->context, -1);
+ break;
+ }
AST_LIST_INSERT_HEAD(&extensions, receiver, list);
- found++;
} else {
/* XXX Optimization for the future. When we encounter a single bad extension,
* bailing out on all of the extensions may not be the way to go. We should
@@ -7026,6 +7047,8 @@
free_user(receiver);
}
ast_log(LOG_NOTICE, "'%s' is not a valid mailbox\n", s);
+ /* "I am sorry, that's not a valid extension. Please try again." */
+ res = ast_play_and_wait(chan, "pbx-invalid");
valid_extensions = 0;
break;
}
@@ -7049,8 +7072,6 @@
/* break from the loop of reading the extensions */
if (valid_extensions)
break;
- /* "I am sorry, that's not a valid extension. Please try again." */
- res = ast_play_and_wait(chan, "pbx-invalid");
}
/* check if we're clear to proceed */
if (AST_LIST_EMPTY(&extensions) || !valid_extensions)
@@ -7111,6 +7132,7 @@
#endif
saved_messages++;
AST_LIST_REMOVE_CURRENT(list);
+ inprocess_count(vmtmp->mailbox, vmtmp->context, -1);
free_user(vmtmp);
if (res)
break;
@@ -7154,8 +7176,10 @@
}
/* If anything failed above, we still have this list to free */
- while ((vmtmp = AST_LIST_REMOVE_HEAD(&extensions, list)))
+ while ((vmtmp = AST_LIST_REMOVE_HEAD(&extensions, list))) {
+ inprocess_count(vmtmp->mailbox, vmtmp->context, -1);
free_user(vmtmp);
+ }
return res ? res : cmd;
}
More information about the asterisk-commits
mailing list