[asterisk-commits] mmichelson: trunk r124121 - in /trunk: ./ apps/app_voicemail.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Jun 19 15:30:23 CDT 2008
Author: mmichelson
Date: Thu Jun 19 15:30:23 2008
New Revision: 124121
URL: http://svn.digium.com/view/asterisk?view=rev&rev=124121
Log:
Merged revisions 124112 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r124112 | mmichelson | 2008-06-19 15:28:41 -0500 (Thu, 19 Jun 2008) | 8 lines
Fix IMAP forwarding so that messages are sent to the proper mailbox.
(closes issue #12897)
Reported by: jaroth
Patches:
destination_forward.patch uploaded by jaroth (license 50)
........
Modified:
trunk/ (props changed)
trunk/apps/app_voicemail.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: trunk/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_voicemail.c?view=diff&rev=124121&r1=124120&r2=124121
==============================================================================
--- trunk/apps/app_voicemail.c (original)
+++ trunk/apps/app_voicemail.c Thu Jun 19 15:30:23 2008
@@ -144,6 +144,7 @@
static char *get_user_by_mailbox(char *mailbox, char *buf, size_t len);
static struct vm_state *get_vm_state_by_imapuser(char *user, int interactive);
static struct vm_state *get_vm_state_by_mailbox(const char *mailbox, int interactive);
+static struct vm_state *create_vm_state_from_user(struct ast_vm_user *vmu, char *mailbox);
static void vmstate_insert(struct vm_state *vms);
static void vmstate_delete(struct vm_state *vms);
static void set_update(MAILSTREAM * stream);
@@ -5328,7 +5329,11 @@
} /* by now vms->fn should have merged audio */
/* get destination mailbox */
- if ((dstvms = get_vm_state_by_mailbox(vmtmp->mailbox, 0))) {
+ dstvms = get_vm_state_by_mailbox(vmtmp->mailbox,0);
+ if (!dstvms) {
+ dstvms = create_vm_state_from_user(vmtmp, vmtmp->mailbox);
+ }
+ if (dstvms) {
init_mailstream(dstvms, 0);
if (!dstvms->mailstream) {
ast_log(AST_LOG_ERROR, "IMAP mailstream for %s is NULL\n", vmtmp->mailbox);
@@ -10928,6 +10933,27 @@
}
}
+static struct vm_state *create_vm_state_from_user(struct ast_vm_user *vmu, char *mailbox)
+{
+ struct vm_state *vms_p;
+
+ if (option_debug > 4)
+ ast_log(LOG_DEBUG,"Adding new vmstate for %s\n",vmu->imapuser);
+ 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->username, mailbox, sizeof(vms_p->username)); /* save for access from interactive entry point */
+ vms_p->mailstream = NIL; /* save for access from interactive entry point */
+ if (option_debug > 4)
+ ast_log(LOG_DEBUG,"Copied %s to %s\n",vmu->imapuser,vms_p->imapuser);
+ vms_p->updated = 1;
+ /* set mailbox to INBOX! */
+ ast_copy_string(vms_p->curbox, mbox(0), sizeof(vms_p->curbox));
+ init_vm_state(vms_p);
+ vmstate_insert(vms_p);
+ return vms_p;
+}
+
static struct vm_state *get_vm_state_by_imapuser(char *user, int interactive)
{
struct vmstate *vlist = NULL;
More information about the asterisk-commits
mailing list