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
    ........
  ................
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@287016 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Jeff Peeler 15 years ago
parent 41b95ee887
commit f129ce3b09

@ -6906,7 +6906,7 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
AST_LIST_HEAD_NOLOCK_STATIC(extensions, ast_vm_user); AST_LIST_HEAD_NOLOCK_STATIC(extensions, ast_vm_user);
char *stringp; char *stringp;
const char *s; const char *s;
int saved_messages = 0, found = 0; int saved_messages = 0;
int valid_extensions = 0; int valid_extensions = 0;
char *dir; char *dir;
int curmsg; int curmsg;
@ -7014,8 +7014,29 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
valid_extensions = 1; valid_extensions = 1;
while (s) { while (s) {
if ((is_new_message == 1 || strcmp(s, sender->mailbox)) && (receiver = find_user(NULL, context, 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); AST_LIST_INSERT_HEAD(&extensions, receiver, list);
found++;
} else { } else {
/* XXX Optimization for the future. When we encounter a single bad extension, /* 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 * bailing out on all of the extensions may not be the way to go. We should
@ -7026,6 +7047,8 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
free_user(receiver); free_user(receiver);
} }
ast_log(LOG_NOTICE, "'%s' is not a valid mailbox\n", s); 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; valid_extensions = 0;
break; break;
} }
@ -7049,8 +7072,6 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
/* break from the loop of reading the extensions */ /* break from the loop of reading the extensions */
if (valid_extensions) if (valid_extensions)
break; 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 */ /* check if we're clear to proceed */
if (AST_LIST_EMPTY(&extensions) || !valid_extensions) if (AST_LIST_EMPTY(&extensions) || !valid_extensions)
@ -7111,6 +7132,7 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
#endif #endif
saved_messages++; saved_messages++;
AST_LIST_REMOVE_CURRENT(list); AST_LIST_REMOVE_CURRENT(list);
inprocess_count(vmtmp->mailbox, vmtmp->context, -1);
free_user(vmtmp); free_user(vmtmp);
if (res) if (res)
break; break;
@ -7154,8 +7176,10 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
} }
/* If anything failed above, we still have this list to free */ /* 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); free_user(vmtmp);
}
return res ? res : cmd; return res ? res : cmd;
} }

Loading…
Cancel
Save