]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix for bug number 9786, wherein voicemails saved to IMAP storage using extensions...
authorMark Michelson <mmichelson@digium.com>
Tue, 5 Jun 2007 18:32:50 +0000 (18:32 +0000)
committerMark Michelson <mmichelson@digium.com>
Tue, 5 Jun 2007 18:32:50 +0000 (18:32 +0000)
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: https://origsvn.digium.com/svn/asterisk/branches/1.4@67424 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c

index 010a020a7a409f7d6ec1e1a8485799ca22a37260..f151c507aed366111c1723241a148cc439984b7c 100644 (file)
@@ -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)