]> granicus.if.org Git - uw-imap/commitdiff
add files for 2007-09-06T23:06:34Z
authorUnknown <>
Thu, 6 Sep 2007 23:06:34 +0000 (23:06 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Fri, 7 Sep 2018 00:02:37 +0000 (00:02 +0000)
src/c-client/imap4r1.h [new file with mode: 0644]

diff --git a/src/c-client/imap4r1.h b/src/c-client/imap4r1.h
new file mode 100644 (file)
index 0000000..8ee8a18
--- /dev/null
@@ -0,0 +1,281 @@
+/* ========================================================================
+ * Copyright 1988-2007 University of Washington
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 
+ * ========================================================================
+ */
+
+/*
+ * Program:    Interactive Mail Access Protocol 4rev1 (IMAP4R1) routines
+ *
+ * Author:     Mark Crispin
+ *             Networks and Distributed Computing
+ *             Computing & Communications
+ *             University of Washington
+ *             Administration Building, AG-44
+ *             Seattle, WA  98195
+ *             Internet: MRC@CAC.Washington.EDU
+ *
+ * Date:       14 October 1988
+ * Last Edited:        5 September 2007
+ */
+
+
+/* This include file is provided for applications which need to look under
+ * the covers at the IMAP driver and in particular want to do different
+ * operations depending upon the IMAP server's protocol level and
+ * capabilities.  It is NOT included in the normal c-client.h application
+ * export, and most applications do NOT need the definitions in this file.
+ *
+ * As of October 15, 2003, it is believed that:
+ *
+ * Version     RFC             Status          Known Implementations
+ * -------     ---             ------          ---------------------
+ * IMAP1       none            extinct         experimental TOPS-20 server
+ * IMAP2       1064            extinct         old TOPS-20, SUMEX servers
+ * IMAP2       1176            rare            TOPS-20, old UW servers
+ * IMAP2bis    expired I-D     uncommon        old UW, Cyrus servers
+ * IMAP3       1203            extinct         none (never implemented)
+ * IMAP4       1730            rare            old UW, Cyrus, Netscape servers
+ * IMAP4rev1   2060, 3501      ubiquitous      UW, Cyrus, and many others
+ *
+ * Most client implementations will only interoperate with an IMAP4rev1
+ * server.  c-client based client implementations can interoperate with IMAP2,
+ * IMAP2bis, IMAP4, and IMAP4rev1 servers, but only if they are very careful.
+ *
+ * The LEVELxxx() macros in this file enable the client to determine the
+ * server protocol level and capabilities.  This file also contains a few
+ * backdoor calls into the IMAP driver.
+ */
+\f
+/* Server protocol level and capabilities */
+
+typedef struct imap_cap {
+  unsigned int rfc1176 : 1;    /* server is RFC-1176 IMAP2 */
+  unsigned int imap2bis : 1;   /* server is IMAP2bis */
+  unsigned int imap4 : 1;      /* server is IMAP4 (RFC 1730) */
+  unsigned int imap4rev1 : 1;  /* server is IMAP4rev1 */
+  unsigned int acl : 1;                /* server has ACL (RFC 2086) */
+  unsigned int quota : 1;      /* server has QUOTA (RFC 2087) */
+  unsigned int litplus : 1;    /* server has LITERAL+ (RFC 2088) */
+  unsigned int idle : 1;       /* server has IDLE (RFC 2177) */
+  unsigned int mbx_ref : 1;    /* server has mailbox referrals (RFC 2193) */
+  unsigned int log_ref : 1;    /* server has login referrals (RFC 2221) */
+  unsigned int authanon : 1;   /* server has anonymous SASL (RFC 2245) */
+  unsigned int namespace :1;   /* server has NAMESPACE (RFC 2342) */
+  unsigned int uidplus : 1;    /* server has UIDPLUS (RFC 2359) */
+  unsigned int starttls : 1;   /* server has STARTTLS (RFC 2595) */
+                               /* server disallows LOGIN command (RFC 2595) */
+  unsigned int logindisabled : 1;
+  unsigned int id : 1;         /* server has ID (RFC 2971) */
+  unsigned int children : 1;   /* server has CHILDREN (RFC 3348) */
+  unsigned int multiappend : 1;        /* server has multi-APPEND (RFC 3502) ;*/
+  unsigned int binary : 1;     /* server has BINARY (RFC 3516) */
+  unsigned int unselect : 1;   /* server has UNSELECT */
+  unsigned int sasl_ir : 1;    /* server has SASL-IR initial response */
+  unsigned int sort : 1;       /* server has SORT */
+  unsigned int scan : 1;       /* server has SCAN */
+  unsigned int urlauth : 1;    /* server has URLAUTH (RFC 4467) */
+  unsigned int catenate : 1;   /* server has CATENATE (RFC 4469) */
+  unsigned int condstore : 1;  /* server has CONDSTORE (RFC 4551) */
+  unsigned int esearch : 1;    /* server has ESEARCH (RFC 4731) */
+  unsigned int within : 1;     /* server has WITHIN (RFC 5032) */
+  unsigned int extlevel;       /* extension data level supported by server */
+                               /* supported authenticators */
+  unsigned int auth : MAXAUTHENTICATORS;
+  THREADER *threader;          /* list of threaders */
+} IMAPCAP;
+\f
+/* IMAP4rev1 level or better */
+
+#define LEVELIMAP4rev1(stream) imap_cap (stream)->imap4rev1
+
+#define LEVELSTATUS LEVELIMAP4rev1
+
+
+/* IMAP4 level or better (not including RFC 1730 design mistakes) */
+
+#define LEVELIMAP4(stream) (imap_cap (stream)->imap4rev1 || \
+                           imap_cap (stream)->imap4)
+
+
+/* IMAP4 RFC-1730 level */
+
+#define LEVEL1730(stream) imap_cap (stream)->imap4
+
+
+/* IMAP2bis level or better */
+
+#define LEVELIMAP2bis(stream) imap_cap (stream)->imap2bis
+
+
+/* IMAP2 RFC-1176 level or better */
+
+#define LEVEL1176(stream) imap_cap (stream)->rfc1176
+
+
+/* IMAP2 RFC-1064 or better */
+
+#define LEVEL1064(stream) 1
+\f
+/* Has ACL extension */
+
+#define LEVELACL(stream) imap_cap (stream)->acl
+
+
+/* Has QUOTA extension */
+
+#define LEVELQUOTA(stream) imap_cap (stream)->quota
+
+
+/* Has LITERALPLUS extension */
+
+#define LEVELLITERALPLUS(stream) imap_cap (stream)->litplus
+
+
+/* Has IDLE extension */
+
+#define LEVELIDLE(stream) imap_cap (stream)->idle
+
+
+/* Has mailbox referrals */
+
+#define LEVELMBX_REF(stream) imap_cap (stream)->mbx_ref
+
+
+/* Has login referrals */
+
+#define LEVELLOG_REF(stream) imap_cap (stream)->log_ref
+
+
+/* Has AUTH=ANONYMOUS extension */
+
+#define LEVELANONYMOUS(stream) imap_cap (stream)->authanon
+
+
+/* Has NAMESPACE extension */
+
+#define LEVELNAMESPACE(stream) imap_cap (stream)->namespace
+
+
+/* Has UIDPLUS extension */
+
+#define LEVELUIDPLUS(stream) imap_cap (stream)->uidplus
+
+
+/* Has STARTTLS extension */
+
+#define LEVELSTARTTLS(stream) imap_cap (stream)->starttls
+
+
+/* Has LOGINDISABLED extension */
+
+#define LEVELLOGINDISABLED(stream) imap_cap (stream)->logindisabled
+\f
+/* Has ID extension */
+
+#define LEVELID(stream) imap_cap (stream)->id
+
+
+/* Has CHILDREN extension */
+
+#define LEVELCHILDREN(stream) imap_cap (stream)->children
+
+
+/* Has MULTIAPPEND extension */
+
+#define LEVELMULTIAPPEND(stream) imap_cap (stream)->multiappend
+
+
+/* Has BINARY extension */
+
+#define LEVELBINARY(stream) imap_cap (stream)->binary
+
+
+/* Has UNSELECT extension */
+
+#define LEVELUNSELECT(stream) imap_cap (stream)->unselect
+
+
+/* Has SASL initial response extension */
+
+#define LEVELSASLIR(stream) imap_cap (stream)->sasl_ir
+
+
+/* Has SORT extension */
+
+#define LEVELSORT(stream) imap_cap (stream)->sort
+
+
+/* Has at least one THREAD extension */
+
+#define LEVELTHREAD(stream) ((imap_cap (stream)->threader) ? T : NIL)
+
+
+/* Has SCAN extension */
+
+#define LEVELSCAN(stream) imap_cap (stream)->scan
+
+
+/* Has URLAUTH extension */
+
+#define LEVELURLAUTH(stream) imap_cap (stream)->urlauth
+
+
+/* Has CATENATE extension */
+
+#define LEVELCATENATE(stream) imap_cap (stream)->catenate
+
+
+/* Has CONDSTORE extension */
+
+#define LEVELCONDSTORE(stream) imap_cap (stream)->condstore
+
+
+/* Has ESEARCH extension */
+
+#define LEVELESEARCH(stream) imap_cap (stream)->esearch
+
+
+/* Has WITHIN extension */
+
+#define LEVELWITHIN(stream) imap_cap (stream)->within
+\f
+/* Body structure extension levels */
+
+/* These are in BODYSTRUCTURE order.  Note that multipart bodies do not have
+ * body-fld-md5.  This is alright, since all subsequent body structure
+ * extensions are in both singlepart and multipart bodies.  If that ever
+ * changes, this will have to be split.
+ */
+
+#define BODYEXTMD5 1           /* body-fld-md5 */
+#define BODYEXTDSP 2           /* body-fld-dsp */
+#define BODYEXTLANG 3          /* body-fld-lang */
+#define BODYEXTLOC 4           /* body-fld-loc */
+
+
+/* Function prototypes */
+
+IMAPCAP *imap_cap (MAILSTREAM *stream);
+char *imap_host (MAILSTREAM *stream);
+long imap_cache (MAILSTREAM *stream,unsigned long msgno,char *seg,
+                STRINGLIST *stl,SIZEDTEXT *text);
+
+
+/* Temporary */
+
+long imap_setacl (MAILSTREAM *stream,char *mailbox,char *id,char *rights);
+long imap_deleteacl (MAILSTREAM *stream,char *mailbox,char *id);
+long imap_getacl (MAILSTREAM *stream,char *mailbox);
+long imap_listrights (MAILSTREAM *stream,char *mailbox,char *id);
+long imap_myrights (MAILSTREAM *stream,char *mailbox);
+long imap_setquota (MAILSTREAM *stream,char *qroot,STRINGLIST *limits);
+long imap_getquota (MAILSTREAM *stream,char *qroot);
+long imap_getquotaroot (MAILSTREAM *stream,char *mailbox);