From 5cf59a4179072c9980ea6a2b90f9533af0e8bca0 Mon Sep 17 00:00:00 2001 From: mmichelson Date: Tue, 5 Jun 2007 18:32:50 +0000 Subject: Fix for bug number 9786, wherein voicemails saved to IMAP storage using extensions other than gsm were unable to be played over the phone. (Issue 9786, reporter: xmarksthespot, Patched by xmarksthe spot with revisions by me, reviewed by Russell Bryant). git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@67424 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_voicemail.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'apps') diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 010a020a7..f151c507a 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -4395,6 +4395,7 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc char category[32]; char todir[PATH_MAX]; int res = 0; + char *attachedfilefmt; char *temp; vms->starting = 0; @@ -4416,7 +4417,23 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc make_gsm_file(vms->fn, vms->imapuser, todir, vms->curmsg); mail_fetchstructure (vms->mailstream,vms->msgArray[vms->curmsg],&body); - save_body(body,vms,"3","gsm"); + + /* We have the body, now we extract the file name of the first attachment. */ + if (body->nested.part->next && body->nested.part->next->body.parameter->value) { + attachedfilefmt = ast_strdupa(body->nested.part->next->body.parameter->value); + } else { + ast_log(LOG_ERROR, "There is no file attached to this IMAP message.\n"); + return -1; + } + + /* Find the format of the attached file */ + + strsep(&attachedfilefmt, "."); + if (!attachedfilefmt) { + ast_log(LOG_ERROR, "File format could not be obtained from IMAP message attachment\n"); + return -1; + } + save_body(body, vms, "2", attachedfilefmt); adsi_message(chan, vms); if (!vms->curmsg) -- cgit v1.2.3