imapext-2007

view src/c-client/imap4r1.h @ 0:ada5e610ab86

imap-2007e
author yuuji@gentei.org
date Mon, 14 Sep 2009 15:17:45 +0900
parents
children
line source
1 /* ========================================================================
2 * Copyright 1988-2007 University of Washington
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 *
11 * ========================================================================
12 */
14 /*
15 * Program: Interactive Mail Access Protocol 4rev1 (IMAP4R1) routines
16 *
17 * Author: Mark Crispin
18 * Networks and Distributed Computing
19 * Computing & Communications
20 * University of Washington
21 * Administration Building, AG-44
22 * Seattle, WA 98195
23 * Internet: MRC@CAC.Washington.EDU
24 *
25 * Date: 14 October 1988
26 * Last Edited: 5 September 2007
27 */
30 /* This include file is provided for applications which need to look under
31 * the covers at the IMAP driver and in particular want to do different
32 * operations depending upon the IMAP server's protocol level and
33 * capabilities. It is NOT included in the normal c-client.h application
34 * export, and most applications do NOT need the definitions in this file.
35 *
36 * As of October 15, 2003, it is believed that:
37 *
38 * Version RFC Status Known Implementations
39 * ------- --- ------ ---------------------
40 * IMAP1 none extinct experimental TOPS-20 server
41 * IMAP2 1064 extinct old TOPS-20, SUMEX servers
42 * IMAP2 1176 rare TOPS-20, old UW servers
43 * IMAP2bis expired I-D uncommon old UW, Cyrus servers
44 * IMAP3 1203 extinct none (never implemented)
45 * IMAP4 1730 rare old UW, Cyrus, Netscape servers
46 * IMAP4rev1 2060, 3501 ubiquitous UW, Cyrus, and many others
47 *
48 * Most client implementations will only interoperate with an IMAP4rev1
49 * server. c-client based client implementations can interoperate with IMAP2,
50 * IMAP2bis, IMAP4, and IMAP4rev1 servers, but only if they are very careful.
51 *
52 * The LEVELxxx() macros in this file enable the client to determine the
53 * server protocol level and capabilities. This file also contains a few
54 * backdoor calls into the IMAP driver.
55 */
57 /* Server protocol level and capabilities */
59 typedef struct imap_cap {
60 unsigned int rfc1176 : 1; /* server is RFC-1176 IMAP2 */
61 unsigned int imap2bis : 1; /* server is IMAP2bis */
62 unsigned int imap4 : 1; /* server is IMAP4 (RFC 1730) */
63 unsigned int imap4rev1 : 1; /* server is IMAP4rev1 */
64 unsigned int acl : 1; /* server has ACL (RFC 2086) */
65 unsigned int quota : 1; /* server has QUOTA (RFC 2087) */
66 unsigned int litplus : 1; /* server has LITERAL+ (RFC 2088) */
67 unsigned int idle : 1; /* server has IDLE (RFC 2177) */
68 unsigned int mbx_ref : 1; /* server has mailbox referrals (RFC 2193) */
69 unsigned int log_ref : 1; /* server has login referrals (RFC 2221) */
70 unsigned int authanon : 1; /* server has anonymous SASL (RFC 2245) */
71 unsigned int namespace :1; /* server has NAMESPACE (RFC 2342) */
72 unsigned int uidplus : 1; /* server has UIDPLUS (RFC 2359) */
73 unsigned int starttls : 1; /* server has STARTTLS (RFC 2595) */
74 /* server disallows LOGIN command (RFC 2595) */
75 unsigned int logindisabled : 1;
76 unsigned int id : 1; /* server has ID (RFC 2971) */
77 unsigned int children : 1; /* server has CHILDREN (RFC 3348) */
78 unsigned int multiappend : 1; /* server has multi-APPEND (RFC 3502) ;*/
79 unsigned int binary : 1; /* server has BINARY (RFC 3516) */
80 unsigned int unselect : 1; /* server has UNSELECT */
81 unsigned int sasl_ir : 1; /* server has SASL-IR initial response */
82 unsigned int sort : 1; /* server has SORT */
83 unsigned int scan : 1; /* server has SCAN */
84 unsigned int urlauth : 1; /* server has URLAUTH (RFC 4467) */
85 unsigned int catenate : 1; /* server has CATENATE (RFC 4469) */
86 unsigned int condstore : 1; /* server has CONDSTORE (RFC 4551) */
87 unsigned int esearch : 1; /* server has ESEARCH (RFC 4731) */
88 unsigned int within : 1; /* server has WITHIN (RFC 5032) */
89 unsigned int extlevel; /* extension data level supported by server */
90 /* supported authenticators */
91 unsigned int auth : MAXAUTHENTICATORS;
92 THREADER *threader; /* list of threaders */
93 } IMAPCAP;
95 /* IMAP4rev1 level or better */
97 #define LEVELIMAP4rev1(stream) imap_cap (stream)->imap4rev1
99 #define LEVELSTATUS LEVELIMAP4rev1
102 /* IMAP4 level or better (not including RFC 1730 design mistakes) */
104 #define LEVELIMAP4(stream) (imap_cap (stream)->imap4rev1 || \
105 imap_cap (stream)->imap4)
108 /* IMAP4 RFC-1730 level */
110 #define LEVEL1730(stream) imap_cap (stream)->imap4
113 /* IMAP2bis level or better */
115 #define LEVELIMAP2bis(stream) imap_cap (stream)->imap2bis
118 /* IMAP2 RFC-1176 level or better */
120 #define LEVEL1176(stream) imap_cap (stream)->rfc1176
123 /* IMAP2 RFC-1064 or better */
125 #define LEVEL1064(stream) 1
127 /* Has ACL extension */
129 #define LEVELACL(stream) imap_cap (stream)->acl
132 /* Has QUOTA extension */
134 #define LEVELQUOTA(stream) imap_cap (stream)->quota
137 /* Has LITERALPLUS extension */
139 #define LEVELLITERALPLUS(stream) imap_cap (stream)->litplus
142 /* Has IDLE extension */
144 #define LEVELIDLE(stream) imap_cap (stream)->idle
147 /* Has mailbox referrals */
149 #define LEVELMBX_REF(stream) imap_cap (stream)->mbx_ref
152 /* Has login referrals */
154 #define LEVELLOG_REF(stream) imap_cap (stream)->log_ref
157 /* Has AUTH=ANONYMOUS extension */
159 #define LEVELANONYMOUS(stream) imap_cap (stream)->authanon
162 /* Has NAMESPACE extension */
164 #define LEVELNAMESPACE(stream) imap_cap (stream)->namespace
167 /* Has UIDPLUS extension */
169 #define LEVELUIDPLUS(stream) imap_cap (stream)->uidplus
172 /* Has STARTTLS extension */
174 #define LEVELSTARTTLS(stream) imap_cap (stream)->starttls
177 /* Has LOGINDISABLED extension */
179 #define LEVELLOGINDISABLED(stream) imap_cap (stream)->logindisabled
181 /* Has ID extension */
183 #define LEVELID(stream) imap_cap (stream)->id
186 /* Has CHILDREN extension */
188 #define LEVELCHILDREN(stream) imap_cap (stream)->children
191 /* Has MULTIAPPEND extension */
193 #define LEVELMULTIAPPEND(stream) imap_cap (stream)->multiappend
196 /* Has BINARY extension */
198 #define LEVELBINARY(stream) imap_cap (stream)->binary
201 /* Has UNSELECT extension */
203 #define LEVELUNSELECT(stream) imap_cap (stream)->unselect
206 /* Has SASL initial response extension */
208 #define LEVELSASLIR(stream) imap_cap (stream)->sasl_ir
211 /* Has SORT extension */
213 #define LEVELSORT(stream) imap_cap (stream)->sort
216 /* Has at least one THREAD extension */
218 #define LEVELTHREAD(stream) ((imap_cap (stream)->threader) ? T : NIL)
221 /* Has SCAN extension */
223 #define LEVELSCAN(stream) imap_cap (stream)->scan
226 /* Has URLAUTH extension */
228 #define LEVELURLAUTH(stream) imap_cap (stream)->urlauth
231 /* Has CATENATE extension */
233 #define LEVELCATENATE(stream) imap_cap (stream)->catenate
236 /* Has CONDSTORE extension */
238 #define LEVELCONDSTORE(stream) imap_cap (stream)->condstore
241 /* Has ESEARCH extension */
243 #define LEVELESEARCH(stream) imap_cap (stream)->esearch
246 /* Has WITHIN extension */
248 #define LEVELWITHIN(stream) imap_cap (stream)->within
250 /* Body structure extension levels */
252 /* These are in BODYSTRUCTURE order. Note that multipart bodies do not have
253 * body-fld-md5. This is alright, since all subsequent body structure
254 * extensions are in both singlepart and multipart bodies. If that ever
255 * changes, this will have to be split.
256 */
258 #define BODYEXTMD5 1 /* body-fld-md5 */
259 #define BODYEXTDSP 2 /* body-fld-dsp */
260 #define BODYEXTLANG 3 /* body-fld-lang */
261 #define BODYEXTLOC 4 /* body-fld-loc */
264 /* Function prototypes */
266 IMAPCAP *imap_cap (MAILSTREAM *stream);
267 char *imap_host (MAILSTREAM *stream);
268 long imap_cache (MAILSTREAM *stream,unsigned long msgno,char *seg,
269 STRINGLIST *stl,SIZEDTEXT *text);
272 /* Temporary */
274 long imap_setacl (MAILSTREAM *stream,char *mailbox,char *id,char *rights);
275 long imap_deleteacl (MAILSTREAM *stream,char *mailbox,char *id);
276 long imap_getacl (MAILSTREAM *stream,char *mailbox);
277 long imap_listrights (MAILSTREAM *stream,char *mailbox,char *id);
278 long imap_myrights (MAILSTREAM *stream,char *mailbox);
279 long imap_setquota (MAILSTREAM *stream,char *qroot,STRINGLIST *limits);
280 long imap_getquota (MAILSTREAM *stream,char *qroot);
281 long imap_getquotaroot (MAILSTREAM *stream,char *mailbox);

UW-IMAP'd extensions by yuuji