Skip to content
Snippets Groups Projects
Commit 0cef7b9d authored by Alexei Gradinari's avatar Alexei Gradinari
Browse files

app_voicemail: IMAP connection control

A new global option "imap_poll_logout" was added to specify whether need to
disconnect from the IMAP server after polling of mailboxes.

ASTERISK-27068 #close

Closing IMAP connection after loading mailbox from voicemail.conf

ASTERISK-24052 #close

Change-Id: Ib7558ba04516240a32b65f42e9be64372a0ae12a
parent 975e271b
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,12 @@ app_queue
--- Functionality changes from Asterisk 14.5.0 to Asterisk 14.6.0 ------------
------------------------------------------------------------------------------
app_voicemail
------------------
* A new global option "imap_poll_logout" was added to specify whether need to
disconnect from the IMAP server after polling of mailboxes.
Default: no
res_pjsip
------------------
* A new endpoint option "refer_blind_progress" was added to turn off notifying
......
......@@ -505,6 +505,7 @@ static int imapversion = 1;
 
static int expungeonhangup = 1;
static int imapgreetings = 0;
static int imap_poll_logout = 0;
static char delimiter = '\0';
 
/* mail_open cannot be protected on a stream basis */
......@@ -542,6 +543,8 @@ static int imap_retrieve_file (const char *dir, const int msgnum, const char *ma
static int imap_delete_old_greeting (char *dir, struct vm_state *vms);
static void check_quota(struct vm_state *vms, char *mailbox);
static int open_mailbox(struct vm_state *vms, struct ast_vm_user *vmu, int box);
static void imap_logout(const char *mailbox_id);
struct vmstate {
struct vm_state *vms;
AST_LIST_ENTRY(vmstate) list;
......@@ -12303,6 +12306,9 @@ static int append_mailbox(const char *context, const char *box, const char *data
strcat(mailbox_full, context);
 
inboxcount2(mailbox_full, &urgent, &new, &old);
#ifdef IMAP_STORAGE
imap_logout(mailbox_full);
#endif
queue_mwi_event(NULL, mailbox_full, urgent, new, old);
 
return 0;
......@@ -13055,6 +13061,12 @@ static void poll_subscribed_mailbox(struct mwi_sub *mwi_sub)
 
inboxcount2(mwi_sub->mailbox, &urgent, &new, &old);
 
#ifdef IMAP_STORAGE
if (imap_poll_logout) {
imap_logout(mwi_sub->mailbox);
}
#endif
if (urgent != mwi_sub->old_urgent || new != mwi_sub->old_new || old != mwi_sub->old_old) {
mwi_sub->old_urgent = urgent;
mwi_sub->old_new = new;
......@@ -13775,6 +13787,11 @@ static int actual_load_config(int reload, struct ast_config *cfg, struct ast_con
} else {
ast_copy_string(greetingfolder, imapfolder, sizeof(greetingfolder));
}
if ((val = ast_variable_retrieve(cfg, "general", "imap_poll_logout"))) {
imap_poll_logout = ast_true(val);
} else {
imap_poll_logout = 0;
}
 
/* There is some very unorthodox casting done here. This is due
* to the way c-client handles the argument passed in. It expects a
......
......@@ -227,6 +227,9 @@ pagerdateformat=%A, %B %d, %Y at %r
;imapclosetimeout=60 ; The TCP close timeout (in seconds)
;imapreadtimeout=60 ; The TCP read timeout (in seconds)
;imapwritetimeout=60 ; The TCP write timeout (in seconds)
;imap_poll_logout=no ; If pollmailboxes=yes, then specify whether need to
; disconnect from the IMAP server after polling.
; Default: no
; -----------------------------------------------------------------------------
;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment