2 * Copyright notice from original mutt:
3 * Copyright (C) 1996-9 Brandon Long <blong@fiction.net>
4 * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>
6 * This file is part of mutt-ng, see http://www.muttng.org/.
7 * It's licensed under the GNU General Public License,
8 * please see the file GPL in the top level source directory.
11 #ifndef _IMAP_PRIVATE_H
12 #define _IMAP_PRIVATE_H 1
17 #include "mutt_socket.h"
21 #define IMAP_SSL_PORT 993
24 #define IMAP_LOG_CMD 2
25 #define IMAP_LOG_LTRL 4
26 #define IMAP_LOG_PASS 5
28 /* IMAP command responses. Used in IMAP_COMMAND.state too */
30 #define IMAP_CMD_OK (0)
32 #define IMAP_CMD_BAD (-1)
34 #define IMAP_CMD_NO (-2)
36 #define IMAP_CMD_CONTINUE (1)
38 #define IMAP_CMD_RESPOND (2)
40 /* number of entries in the hash table */
41 #define IMAP_CACHE_LEN 10
45 #define IMAP_REOPEN_ALLOW (1<<0)
46 #define IMAP_EXPUNGE_EXPECTED (1<<1)
47 #define IMAP_EXPUNGE_PENDING (1<<2)
48 #define IMAP_NEWMAIL_PENDING (1<<3)
49 #define IMAP_FLAGS_PENDING (1<<4)
51 /* imap_exec flags (see imap_exec) */
52 #define IMAP_CMD_FAIL_OK (1<<0)
53 #define IMAP_CMD_PASS (1<<1)
63 IMAP_DISCONNECTED = 0,
76 /* ACL Rights are moved to ../mx.h */
78 /* Capabilities we are interested in */
83 ACL, /* RFC 2086: IMAP4 ACL extension */
84 NAMESPACE, /* RFC 2342: IMAP4 Namespace */
85 ACRAM_MD5, /* RFC 2195: CRAM-MD5 authentication */
86 AGSSAPI, /* RFC 1731: GSSAPI authentication */
87 AUTH_ANON, /* AUTH=ANONYMOUS */
88 STARTTLS, /* RFC 2595: STARTTLS */
89 LOGINDISABLED, /* LOGINDISABLED */
94 /* imap_conn_find flags */
95 #define M_IMAP_CONN_NONEW (1<<0)
96 #define M_IMAP_CONN_NOSELECT (1<<1)
98 /* -- data structures -- */
110 /* We get these when we check if namespace exists - cache them */
113 } IMAP_NAMESPACE_INFO;
115 /* IMAP command structure */
117 char seq[SEQLEN + 1];
124 /* This data is specific to a CONNECTION to an IMAP server */
127 unsigned char status;
128 /* let me explain capstr: SASL needs the capability string (not bits).
130 * 1. rerun CAPABILITY inside SASL function.
131 * 2. build appropriate CAPABILITY string by reverse-engineering from bits.
132 * 3. keep a copy until after authentication.
133 * I've chosen (3) for now. (2) might not be too bad, but it involves
134 * tracking all possible capabilities. bah. (1) I don't like because
135 * it's just no fun to get the same information twice */
137 unsigned char capabilities[(CAPMAX + 7) / 8];
139 time_t lastread; /* last time we read a command for the server */
140 /* who knows, one day we may run multiple commands in parallel */
143 /* The following data is all specific to the currently SELECTED mbox */
147 unsigned short check_status;
148 unsigned char reopen;
149 unsigned char rights[(RIGHTSMAX + 7) / 8];
150 unsigned int newMailCount;
151 IMAP_CACHE cache[IMAP_CACHE_LEN];
153 unsigned long uid_validity;
156 /* all folder flags - system flags AND keywords */
160 /* I wish that were called IMAP_CONTEXT :( */
163 #define CTX_DATA ((IMAP_DATA *) ctx->data)
165 /* -- private IMAP functions -- */
167 int imap_create_mailbox (IMAP_DATA * idata, char *mailbox);
168 int imap_rename_mailbox (IMAP_DATA * idata, IMAP_MBOX * mx,
169 const char *newname);
170 int imap_make_msg_set (IMAP_DATA * idata, BUFFER * buf, int flag,
172 int imap_open_connection (IMAP_DATA * idata);
173 IMAP_DATA *imap_conn_find (const ACCOUNT * account, int flags);
174 int imap_parse_list_response (IMAP_DATA * idata, char **name, int *noselect,
175 int *noinferiors, char *delim);
176 int imap_read_literal (FILE * fp, IMAP_DATA * idata, long bytes);
177 void imap_expunge_mailbox (IMAP_DATA * idata);
178 int imap_reconnect (CONTEXT * ctx);
179 void imap_logout (IMAP_DATA * idata);
180 int imap_sync_message (IMAP_DATA*, HEADER*, BUFFER*, int*);
183 int imap_authenticate (IMAP_DATA * idata);
186 int imap_cmd_start (IMAP_DATA * idata, const char *cmd);
187 int imap_cmd_step (IMAP_DATA * idata);
188 void imap_cmd_finish (IMAP_DATA * idata);
189 int imap_code (const char *s);
190 int imap_exec (IMAP_DATA * idata, const char *cmd, int flags);
193 void imap_add_keywords (char *s, HEADER * keywords, LIST * mailbox_flags,
195 void imap_free_header_data (void **data);
196 int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend);
197 char *imap_set_flags (IMAP_DATA * idata, HEADER * h, char *s);
200 int imap_continue (const char *msg, const char *resp);
201 void imap_error (const char *where, const char *msg);
202 IMAP_DATA *imap_new_idata (void);
203 void imap_free_idata (IMAP_DATA ** idata);
204 char *imap_fix_path (IMAP_DATA * idata, char *mailbox, char *path,
206 int imap_get_literal_count (const char *buf, long *bytes);
207 char *imap_get_qualifier (char *buf);
208 char *imap_next_word (char *s);
209 time_t imap_parse_date (char *s);
210 void imap_qualify_path (char *dest, size_t len, IMAP_MBOX * mx, char *path);
211 void imap_quote_string (char *dest, size_t slen, const char *src);
212 void imap_unquote_string (char *s);
213 void imap_munge_mbox_name (char *dest, size_t dlen, const char *src);
214 void imap_unmunge_mbox_name (char *s);
215 int imap_wordcasecmp (const char *a, const char *b);
218 void imap_utf7_encode (char **s);
219 void imap_utf7_decode (char **s);