diff options
author | mogorman <mogorman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-01-03 23:32:03 +0000 |
---|---|---|
committer | mogorman <mogorman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-01-03 23:32:03 +0000 |
commit | 77ea45a5e15e3cecb712a1ab89008cfbc4d9052f (patch) | |
tree | 88c38b930bd8d22f0a8480e4f9bed82b0aa71747 /apps/app_voicemail.c | |
parent | 2d0d3ee053b9876a52f571e08c2f30854024c490 (diff) |
Merged revisions 49354 via svnmerge from
https://svn.digium.com/svn/asterisk/branches/1.2
........
r49354 | mogorman | 2007-01-03 17:22:47 -0600 (Wed, 03 Jan 2007) | 6 lines
When using ODBC_STORAGE VoicemailMain doesn't create the
subdirectories for a mailbox such as the INBOX directory.
this patch solves that problem, was written by anthony
be-125
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@49355 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_voicemail.c')
-rw-r--r-- | apps/app_voicemail.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 73bcf74b6..a43e331a2 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -1024,7 +1024,12 @@ static int retrieve_file(char *dir, int msgnum) else ast_copy_string(fn, dir, sizeof(fn)); snprintf(full_fn, sizeof(full_fn), "%s.txt", fn); - f = fopen(full_fn, "w+"); + + if (!(f = fopen(full_fn, "w+"))) { + ast_log(LOG_WARNING, "Failed to open/create '%s'\n", full_fn); + goto yuck; + } + snprintf(full_fn, sizeof(full_fn), "%s.%s", fn, fmt); res = SQLAllocHandle(SQL_HANDLE_STMT, obj->con, &stmt); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { @@ -2132,7 +2137,15 @@ static int invent_message(struct ast_channel *chan, char *context, char *ext, in { int res; char fn[256]; + char dest[256]; + snprintf(fn, sizeof(fn), "%s%s/%s/greet", VM_SPOOL_DIR, context, ext); + + if (!(res = create_dirpath(dest,256,context,ext,"greet"))) { + ast_log(LOG_WARNING, "Failed to make directory(%s)\n", fn); + return -1; + } + RETRIEVE(fn, -1); if (ast_fileexists(fn, NULL, NULL) > 0) { res = ast_stream_and_wait(chan, fn, chan->language, ecodes); @@ -2811,6 +2824,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_ int ousemacro = 0; int ouseexten = 0; char dir[256], tmpdir[260]; + char dest[256]; char fn[256]; char prefile[256]=""; char tempfile[256]=""; @@ -2847,17 +2861,23 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_ pbx_builtin_setvar_helper(chan, "VMSTATUS", "FAILED"); return res; } - /* Setup pre-file if appropriate */ if (strcmp(vmu->context, "default")) snprintf(ext_context, sizeof(ext_context), "%s@%s", ext, vmu->context); else ast_copy_string(ext_context, vmu->context, sizeof(ext_context)); - if (ast_test_flag(options, OPT_BUSY_GREETING)) + if (ast_test_flag(options, OPT_BUSY_GREETING)) { + res = create_dirpath(dest, 256, vmu->context, ext, "busy"); snprintf(prefile, sizeof(prefile), "%s%s/%s/busy", VM_SPOOL_DIR, vmu->context, ext); - else if (ast_test_flag(options, OPT_UNAVAIL_GREETING)) + } else if (ast_test_flag(options, OPT_UNAVAIL_GREETING)) { + res = create_dirpath(dest, 256, vmu->context, ext, "unavail"); snprintf(prefile, sizeof(prefile), "%s%s/%s/unavail", VM_SPOOL_DIR, vmu->context, ext); + } snprintf(tempfile, sizeof(tempfile), "%s%s/%s/temp", VM_SPOOL_DIR, vmu->context, ext); + if (!(res = create_dirpath(dest, 256, vmu->context, ext, "temp"))) { + ast_log(LOG_WARNING, "Failed to make directory (%s)\n", tempfile); + return -1; + } RETRIEVE(tempfile, -1); if (ast_fileexists(tempfile, NULL, NULL) > 0) ast_copy_string(prefile, tempfile, sizeof(prefile)); @@ -4059,8 +4079,7 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st /* Forward VoiceMail */ long duration = 0; - - RETRIEVE(dir, curmsg); + RETRIEVE(dir, curmsg); cmd = vm_forwardoptions(chan, sender, dir, curmsg, vmfmts, S_OR(context, "default"), record_gain, &duration, vms); if (!cmd) { AST_LIST_TRAVERSE_SAFE_BEGIN(&extensions, vmtmp, list) { @@ -5804,11 +5823,13 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms, char *fmtc, signed char record_gain) { + int res; int cmd = 0; int retries = 0; int duration = 0; char prefile[256]=""; unsigned char buf[256]; + char dest[256]; int bytes=0; if (ast_adsi_available(chan)) { @@ -5819,8 +5840,13 @@ static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, st bytes += ast_adsi_voice_mode(buf + bytes, 0); ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DISPLAY); } + snprintf(prefile, sizeof(prefile), "%s%s/%s/temp", VM_SPOOL_DIR, vmu->context, vms->username); - while (cmd >= 0 && cmd != 't') { + if (!(res = create_dirpath(dest, 256, vmu->context, vms->username, "temp"))) { + ast_log(LOG_WARNING, "Failed to create directory (%s).\n", prefile); + return -1; + } + while((cmd >= 0) && (cmd != 't')) { if (cmd) retries = 0; RETRIEVE(prefile, -1); |