aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-12-14 23:16:00 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-12-14 23:16:00 +0000
commite503798c9f168185d026d2b52f4fd8f00f00c515 (patch)
tree5ace186005618531535dc10da3a941fd34bb750b
parent18a4f74b964be21c04c434cf7fa152e37eaf3f85 (diff)
Allow greetings-only mailboxes for Voicemail.
(closes issue #15132) Reported by: floletarmo Patches: voicemail_changes.patch uploaded by floletarmo (license 784) (with some additional changes by me) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@234820 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--CHANGES2
-rw-r--r--apps/app_voicemail.c23
-rw-r--r--configs/voicemail.conf.sample3
3 files changed, 21 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index c1836b2ad..38d54f7c0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -88,6 +88,8 @@ Applications
exit the application.
* The Voicemail application has been improved to automatically ignore messages
that only contain silence.
+ * If you set maxmsg to 0 in voicemail.conf, Voicemail will consider the
+ associated mailbox(es) to be greetings-only.
* The ChanSpy application now has the 'S' option, which makes the application
automatically exit once it hits a point where no more channels are available
to spy on.
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 1c6666fd9..17afc5f9b 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -997,7 +997,8 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
ast_log(AST_LOG_WARNING, "Option 'maxmessage' has been deprecated in favor of 'maxsecs'. Please make that change in your voicemail config.\n");
} else if (!strcasecmp(var, "maxmsg")) {
vmu->maxmsg = atoi(value);
- if (vmu->maxmsg <= 0) {
+ /* Accept maxmsg=0 (Greetings only voicemail) */
+ if (vmu->maxmsg < 0) {
ast_log(AST_LOG_WARNING, "Invalid number of messages per folder maxmsg=%s. Using default value %d\n", value, MAXMSG);
vmu->maxmsg = MAXMSG;
} else if (vmu->maxmsg > MAXMSGLIMIT) {
@@ -5393,6 +5394,13 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
ast_set_flag(options, OPT_SILENT);
res = 0;
}
+ /* If maxmsg is zero, act as a "greetings only" voicemail: Exit successfully without recording */
+ if (vmu->maxmsg == 0) {
+ if (option_debug > 2)
+ ast_log(LOG_DEBUG, "Greetings only VM (maxmsg=0), Skipping voicemail recording\n");
+ pbx_builtin_setvar_helper(chan, "VMSTATUS", "SUCCESS");
+ goto leave_vm_out;
+ }
if (!res && !ast_test_flag(options, OPT_SILENT)) {
res = ast_stream_and_wait(chan, INTRO, ecodes);
if (res == '#') {
@@ -7403,10 +7411,12 @@ static int close_mailbox(struct vm_state *vms, struct ast_vm_user *vmu)
#endif
done:
- if (vms->deleted)
+ if (vms->deleted && vmu->maxmsg) {
memset(vms->deleted, 0, vmu->maxmsg * sizeof(int));
- if (vms->heard)
+ }
+ if (vms->heard && vmu->maxmsg) {
memset(vms->heard, 0, vmu->maxmsg * sizeof(int));
+ }
return 0;
}
@@ -9278,12 +9288,13 @@ static int vm_execmain(struct ast_channel *chan, const char *data)
vmstate_insert(&vms);
init_vm_state(&vms);
#endif
- if (!(vms.deleted = ast_calloc(vmu->maxmsg, sizeof(int)))) {
+ /* Avoid allocating a buffer of 0 bytes, because some platforms really don't like that. */
+ if (!(vms.deleted = ast_calloc(vmu->maxmsg ? vmu->maxmsg : 1, sizeof(int)))) {
ast_log(AST_LOG_ERROR, "Could not allocate memory for deleted message storage!\n");
cmd = ast_play_and_wait(chan, "an-error-has-occured");
return -1;
}
- if (!(vms.heard = ast_calloc(vmu->maxmsg, sizeof(int)))) {
+ if (!(vms.heard = ast_calloc(vmu->maxmsg ? vmu->maxmsg : 1, sizeof(int)))) {
ast_log(AST_LOG_ERROR, "Could not allocate memory for heard message storage!\n");
cmd = ast_play_and_wait(chan, "an-error-has-occured");
return -1;
@@ -10759,7 +10770,7 @@ static int load_config(int reload)
maxmsg = MAXMSG;
} else {
maxmsg = atoi(val);
- if (maxmsg <= 0) {
+ if (maxmsg < 0) {
ast_log(AST_LOG_WARNING, "Invalid number of messages per folder '%s'. Using default value %i\n", val, MAXMSG);
maxmsg = MAXMSG;
} else if (maxmsg > MAXMSGLIMIT) {
diff --git a/configs/voicemail.conf.sample b/configs/voicemail.conf.sample
index e748fdbd5..231ab1a6d 100644
--- a/configs/voicemail.conf.sample
+++ b/configs/voicemail.conf.sample
@@ -34,7 +34,8 @@ serveremail=asterisk
; Should the email contain the voicemail as an attachment
attach=yes
; Maximum number of messages per folder. If not specified, a default value
-; (100) is used. Maximum value for this option is 9999.
+; (100) is used. Maximum value for this option is 9999. If set to 0, a
+; mailbox will be greetings-only.
;maxmsg=100
; Maximum length of a voicemail message in seconds
;maxsecs=180