Index: apps/app_voicemail.c =================================================================== --- apps/app_voicemail.c (revision 170936) +++ apps/app_voicemail.c (working copy) @@ -574,6 +574,7 @@ #ifdef IMAP_STORAGE char imapuser[80]; /*!< IMAP server login */ char imappassword[80]; /*!< IMAP server password if authpassword not defined */ + char imapfolder[64]; /*!< IMAP voicemail folder */ #endif double volgain; /*!< Volume gain for voicemails sent via email */ AST_LIST_ENTRY(ast_vm_user) list; @@ -614,6 +615,7 @@ MAILSTREAM *mailstream; int vmArrayIndex; char imapuser[80]; /*!< IMAP server login */ + char imapfolder[64]; /*!< IMAP voicemail folder */ int interactive; char introfn[PATH_MAX]; /*!< Name of prepended file */ unsigned int quota_limit; @@ -854,6 +856,9 @@ if (maxdeletedmsg) vmu->maxdeletedmsg = maxdeletedmsg; vmu->volgain = volgain; +#ifdef IMAP_STORAGE + ast_copy_string(vmu->imapfolder, imapfolder, sizeof(vmu-imapfolder)); +#endif } /*! @@ -882,6 +887,8 @@ ast_copy_string(vmu->imapuser, value, sizeof(vmu->imapuser)); } else if (!strcasecmp(var, "imappassword") || !strcasecmp(var, "imapsecret")) { ast_copy_string(vmu->imappassword, value, sizeof(vmu->imappassword)); + } else if (!strcasecmp(var, "imapfolder")) { + ast_copy_string(vmu->imapfolder, value, sizeof(vmu->imapfolder)); #endif } else if (!strcasecmp(var, "delete") || !strcasecmp(var, "deletevoicemail")) { ast_set2_flag(vmu, ast_true(value), VM_DELETE); @@ -1114,6 +1121,8 @@ ast_copy_string(retval->imapuser, var->value, sizeof(retval->imapuser)); } else if (!strcasecmp(var->name, "imappassword") || !strcasecmp(var->name, "imapsecret")) { ast_copy_string(retval->imappassword, var->value, sizeof(retval->imappassword)); + } else if (!strcasecmp(var->name, "imapfolder")) { + ast_copy_string(retval->imapuser, var->value, sizeof(retval->imapfolder)); #endif } else apply_option(retval, var->name, var->value); @@ -2118,7 +2127,7 @@ /* End with username */ ast_build_string(&t, &left, "/user=%s}", vms->imapuser); if (box == NEW_FOLDER || box == OLD_FOLDER) - snprintf(spec, len, "%s%s", tmp, use_folder? imapfolder: "INBOX"); + snprintf(spec, len, "%s%s", tmp, use_folder? vms->imapfolder: "INBOX"); else if (box == GREETINGS_FOLDER) snprintf(spec, len, "%s%s", tmp, greetingfolder); else { /* Other folders such as Friends, Family, etc... */ @@ -2172,7 +2181,7 @@ } get_mailbox_delimiter(stream); /* update delimiter in imapfolder */ - for (cp = imapfolder; *cp; cp++) + for (cp = vms->imapfolder; *cp; cp++) if (*cp == '/') *cp = delimiter; } @@ -2203,6 +2212,7 @@ } ast_copy_string(vms->imapuser,vmu->imapuser, sizeof(vms->imapuser)); + ast_copy_string(vms->imapfolder, vmu->imapfolder, sizeof(vms->imapfolder)); ast_debug(3,"Before init_mailstream, user is %s\n",vmu->imapuser); if ((ret = init_mailstream(vms, box)) || !vms->mailstream) { @@ -2559,6 +2569,7 @@ if (!(vms_p = ast_calloc(1, sizeof(*vms_p)))) return NULL; ast_copy_string(vms_p->imapuser, vmu->imapuser, sizeof(vms_p->imapuser)); + ast_copy_string(vms_p->imapfolder, vmu->imapfolder, sizeof(vms_p->imapfolder)); ast_copy_string(vms_p->username, vmu->mailbox, sizeof(vms_p->username)); /* save for access from interactive entry point */ ast_copy_string(vms_p->context, vmu->context, sizeof(vms_p->context)); vms_p->mailstream = NIL; /* save for access from interactive entry point */ @@ -5136,7 +5147,7 @@ pbx_builtin_setvar_helper(chan, "VM_MESSAGEFILE", "IMAP_STORAGE"); /* Check if mailbox is full */ - check_quota(vms, imapfolder); + check_quota(vms, vmu->imapfolder); if (vms->quota_limit && vms->quota_usage >= vms->quota_limit) { ast_debug(1, "*** QUOTA EXCEEDED!! %u >= %u\n", vms->quota_usage, vms->quota_limit); ast_play_and_wait(chan, "vm-mailboxfull");