1 ///
2 module imap.defines;
3 import std.stdio;
4 import deimos.openssl.ssl;
5 import imap.socket;
6 import imap.sil : SILdoc;
7 import core.sys.posix.sys.stat;
8 
9 static if (is(size_t==uint))
10     alias ssize_t=int;
11 else 
12     alias ssize_t=long;
13 
14 
15 @SILdoc("IMAP protocol supported by the server")
16 enum ImapProtocol
17 {
18     none = 0,
19     imap4Rev1 = 1,
20     imap4 = 2,
21 }
22 
23 @SILdoc("Capabilities of mail server")
24 enum Capability
25 {
26 	none = 0x00,
27 
28 	@("NAMESPACE")
29     namespace = 0x01,
30 
31 	@("AUTH=CRAM-MD5")
32     cramMD5 = 0x02,
33 
34 	@("STARTTLS")
35     startTLS = 0x04,
36 
37 	@("CHILDREN")
38     children = 0x08,
39 
40 	@("IDLE")
41     idle = 0x10,
42 
43 	@("IMAP4rev1")
44 	imap4Rev1,
45 
46 	@("IMAP4")
47 	imap4,
48 
49 	@("LITERAL+")
50 	literalPlus,
51 
52 	@("ID")
53 	id,
54 
55 	@("ENABLE")
56 	enable,
57 
58 	@("ACL")
59 	acl,
60 
61 	@("RIGHTS=kxten")
62 	rightsKxTen,
63 
64 	@("QUOTA")
65 	quota,
66 
67 	@("MAILBOX-REFERRALS")
68 	mailboxReferrals,
69 
70 	@("UIDPLUS")
71 	uidPlus,
72 
73 	@("NO_ATOMIC_RENAME")
74 	noAtomicRename,
75 
76 	@("UNSELECT")
77 	unselect,
78 
79 	@("MULTIAPPEND")
80 	multiAppend,
81 
82 	@("MULTISEARCH")
83 	multiSearch,
84 
85 	@("BINARY")
86 	binary,
87 
88 	@("CATENATE")
89 	catenate,
90 
91 	@("CONDSTORE")
92 	condStore,
93 
94 	@("ESEARCH")
95 	esearch,
96 
97 	@("SEARCH=FUZZY")
98 	fuzzySearch,
99 
100 	@("SORT")
101 	sort,
102 
103 	@("SORT=MODSEQ")
104 	sortModSeq,
105 
106 	@("SORT=DISPLAY")
107 	sortDisplay,
108 
109 	@("SORT=UID")
110 	sortUID,
111 
112 	@("THREAD=ORDEREDSUBJECT")
113 	threadOrderedSubject,
114 
115 	@("THREAD=REFERENCES")
116 	threadReferences,
117 
118 	@("THREAD=REFS")
119 	threadRefs,
120 
121 	@("ANNOTATE-EXPERIMENT-1")
122 	annotateExperiment1,
123 
124 	@("METADATA")
125 	metadata,
126 
127 	@("LIST-EXTENDED")
128 	listExtended,
129 
130 	@("LIST-STATUS")
131 	listStatus,
132 
133 	@("LIST-MYRIGHTS")
134 	listMyRights,
135 
136 	@("LIST-METADATA")
137 	listMetadata,
138 
139 	@("WITHIN")
140 	within,
141 
142 	@("QRESYNC")
143 	qResync,
144 
145 	@("SCAN")
146 	scan,
147 
148 	@("XLIST")
149 	xlist,
150 
151 	@("MOVE")
152 	move,
153 
154 	@("SPECIAL-USE")
155 	specialUse,
156 
157 	@("CREATE-SPECIAL-USE")
158 	createSpecialUse,
159 
160 	@("DIGEST=SHA1")
161 	digestSHA1,
162 
163 	@("X-REPLICATION")
164 	xReplication,
165 
166 	@("STATUS=SIZE")
167 	statusSize,
168 
169 	@("OBJECTID")
170 	objectID,
171 
172 	@("SAVEDATE")
173 	saveDate,
174 
175 	@("X-CREATEDMODSEQ")
176 	xCreatedModSeq,
177 
178 	@("PREVIEW=FUZZY")
179 	previewFuzzy,
180 
181 	@("XAPPLEPUSHSERVICE")
182 	xApplePushService,
183 
184 	@("LOGINDISABLED")
185 	loginDisabled,
186 
187 	@("XCONVERSATIONS")
188 	xConversations,
189 
190 	@("COMPRESS=DEFLATE")
191 	compressDeflate,
192 
193 	@("X-QUOTA=STORAGE")
194 	xQuoteStorage,
195 
196 	@("X-QUOTA=MESSAGE")
197 	xQuotaMessage,
198 
199 	@("X-QUOTA=X-ANNOTATION-STORAGE")
200 	xQuotaXAnnotationStorage,
201 
202 	@("X-QUOTA=X-NUM-FOLDERS")
203 	xQuotaXNumFolders,
204 
205 	@("XMOVE")
206 	xMove,
207 }
208 
209 @SILdoc("Status responses and response codes")
210 enum ImapStatus
211 {
212     none = 0,
213 
214 	@("OK")
215     ok = 1,
216 
217 	@("NO")
218     no = 2,
219 
220 	@("BAD")
221     bad = 3,
222 
223     untagged = 4,
224     continue_ = 5,
225     bye = 6,
226     preAuth = 7,
227     readOnly = 8,
228     tryCreate = 9,
229     timeout = 10,
230 	unknown = -1,
231 }
232 
233 ///
234 enum ImapFlag
235 {
236 	@(`\Seen`)
237 	seen,
238 
239 	@(`\Answered`)
240 	answered,
241 
242 	@(`\Flagged`)
243 	flagged,
244 
245 	@(`\Deleted`)
246 	deleted,
247 
248 	@(`\Draft`)
249 	draft,
250 }
251 
252 
253