/[imapfilter]/imapfilter/imap.c
ViewVC logotype

Annotation of /imapfilter/imap.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.31 - (hide annotations)
Fri Mar 7 14:03:50 2003 UTC (21 years ago) by lefcha
Branch: MAIN
Changes since 1.30: +2 -2 lines
File MIME type: text/plain
Function imap_examine() is not needed for now.

1 lefcha 1.1 #include <stdio.h>
2     #include <string.h>
3     #include <stdlib.h>
4     #include <unistd.h>
5     #include <errno.h>
6    
7     #include "config.h"
8     #include "imapfilter.h"
9 lefcha 1.13 #include "data.h"
10 lefcha 1.1
11    
12 lefcha 1.24 extern int sockpri;
13    
14 lefcha 1.30 static unsigned int tag = 0xA00000; /* Every IMAP command is prefixed with
15     * a unique [:alnum:] string. */
16 lefcha 1.1
17     /*
18 lefcha 1.13 * Send to server data; a command.
19 lefcha 1.1 */
20 lefcha 1.30 unsigned int
21     send_command(int *sock, char *cmd)
22 lefcha 1.1 {
23     #ifdef DEBUG
24 lefcha 1.30 fprintf(stderr, "debug: sending command: %s", cmd);
25 lefcha 1.1 #endif
26 lefcha 1.18
27 lefcha 1.30 socket_write(sock, cmd);
28 lefcha 1.25
29 lefcha 1.30 return tag++;
30 lefcha 1.1 }
31    
32    
33     #ifdef DEBUG
34     /*
35     * IMAP NOOP: does nothing always succeeds.
36     */
37 lefcha 1.30 int
38     imap_noop(int *sock)
39 lefcha 1.1 {
40 lefcha 1.30 char cmd[SMALL_CMD];
41 lefcha 1.1
42 lefcha 1.30 verbose("Client request: NOOP\n");
43 lefcha 1.1
44 lefcha 1.30 snprintf(cmd, SMALL_CMD, "%X NOOP\r\n", tag);
45 lefcha 1.1
46 lefcha 1.30 return send_command(sock, cmd);
47 lefcha 1.1 }
48 lefcha 1.25
49 lefcha 1.1 #endif
50    
51    
52     /*
53 lefcha 1.21 * IMAP CAPABILITY: requests listing of capabilities that the server supports.
54 lefcha 1.16 */
55 lefcha 1.30 int
56     imap_capability(int *sock)
57 lefcha 1.16 {
58 lefcha 1.30 char cmd[SMALL_CMD];
59 lefcha 1.16
60 lefcha 1.30 verbose("Client request: CAPABILITY\n");
61 lefcha 1.16
62 lefcha 1.30 snprintf(cmd, SMALL_CMD, "%X CAPABILITY\r\n", tag);
63 lefcha 1.21
64 lefcha 1.30 return send_command(sock, cmd);
65 lefcha 1.21 }
66    
67    
68     /*
69     * IMAP NAMESPACE: discovers the prefix and delimeter of namespaces used by
70     * the server for mailboxes (RFC 2342).
71     */
72 lefcha 1.30 int
73     imap_namespace(int *sock)
74 lefcha 1.21 {
75 lefcha 1.30 char cmd[SMALL_CMD];
76 lefcha 1.21
77 lefcha 1.30 verbose("Client request: NAMESPACE\n");
78 lefcha 1.21
79 lefcha 1.30 snprintf(cmd, SMALL_CMD, "%X NAMESPACE\r\n", tag);
80 lefcha 1.16
81 lefcha 1.30 return send_command(sock, cmd);
82 lefcha 1.16 }
83    
84    
85     /*
86 lefcha 1.1 * IMAP LOGOUT: informs server that client is done.
87     */
88 lefcha 1.30 int
89     imap_logout(int *sock)
90 lefcha 1.1 {
91 lefcha 1.30 char cmd[SMALL_CMD];
92 lefcha 1.1
93 lefcha 1.30 verbose("Client request: LOGOUT\n");
94 lefcha 1.1
95 lefcha 1.30 snprintf(cmd, SMALL_CMD, "%X LOGOUT\r\n", tag);
96 lefcha 1.1
97 lefcha 1.30 return send_command(sock, cmd);
98 lefcha 1.28 }
99    
100    
101     /*
102     * IMAP AUTHENTICATE: indicates authentication mechanism and performs an
103     * authentication protocol exchange.
104     */
105 lefcha 1.30 int
106     imap_authenticate(int *sock, char *auth)
107 lefcha 1.28 {
108 lefcha 1.30 char cmd[MEDIUM_CMD];
109    
110     verbose("Client request: AUTHENTICATE\n");
111    
112     snprintf(cmd, MEDIUM_CMD, "%X AUTHENTICATE %s\r\n", tag, auth);
113    
114     return send_command(sock, cmd);
115 lefcha 1.1 }
116    
117    
118     /*
119     * IMAP LOGIN: identifies client to server.
120     */
121 lefcha 1.30 int
122     imap_login(int *sock, char *user, char *pass)
123 lefcha 1.1 {
124 lefcha 1.30 int r;
125     char *cmd;
126 lefcha 1.25
127 lefcha 1.30 cmd = (char *)smalloc(MEDIUM_CMD);
128 lefcha 1.1
129 lefcha 1.30 verbose("Client request: LOGIN\n");
130 lefcha 1.1
131 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X LOGIN \"%s\" \"%s\"\r\n", tag, user,
132     pass);
133 lefcha 1.1
134 lefcha 1.30 r = send_command(sock, cmd);
135 lefcha 1.25
136 lefcha 1.30 sfree(cmd);
137 lefcha 1.23
138 lefcha 1.30 return r;
139 lefcha 1.1 }
140    
141    
142     /*
143 lefcha 1.24 * IMAP LIST: returns a subset of names from the complete set of names
144     * available to the client.
145     *
146     int imap_list(int *sock, char *refer, char *mbox)
147     {
148     int r;
149     char cmd[BIG_CMD];
150 lefcha 1.25
151 lefcha 1.24 verbose("Client request: LIST\n");
152 lefcha 1.25
153 lefcha 1.24 snprintf(cmd, MEDIUM_CMD, "%X LIST \"%s\" \"%s\"\r\n", tag, refer,
154     mbox);
155 lefcha 1.25
156 lefcha 1.24 r = send_command(sock, cmd);
157 lefcha 1.25
158 lefcha 1.24 return r;
159     }*/
160    
161    
162     /*
163     * IMAP SUBSCRIBE: adds the specified mailbox name to the server's
164     * set of "active" or "subscribed" mailboxes.
165     */
166 lefcha 1.30 int
167     imap_subscribe(int *sock, char *mbox)
168 lefcha 1.24 {
169 lefcha 1.30 char cmd[MEDIUM_CMD];
170 lefcha 1.24
171 lefcha 1.30 verbose("Client request: SUBSCRIBE\n");
172 lefcha 1.24
173 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X SUBSCRIBE \"%s\"\r\n", tag, mbox);
174 lefcha 1.24
175 lefcha 1.30 return send_command(sock, cmd);
176 lefcha 1.24 }
177    
178    
179     /*
180 lefcha 1.13 * IMAP EXAMINE: access a mailbox in READ-ONLY mode.
181 lefcha 1.31 *
182 lefcha 1.30 int
183     imap_examine(int *sock, char *mbox)
184 lefcha 1.1 {
185 lefcha 1.30 char cmd[MEDIUM_CMD];
186 lefcha 1.1
187 lefcha 1.30 verbose("Client request: EXAMINE %s\n", mbox);
188 lefcha 1.1
189 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X EXAMINE \"%s\"\r\n", tag, mbox);
190 lefcha 1.1
191 lefcha 1.30 return send_command(sock, cmd);
192 lefcha 1.31 }*/
193 lefcha 1.10
194 lefcha 1.13
195 lefcha 1.10 /*
196 lefcha 1.13 * IMAP SELECT: access a mailbox in READ-WRITE mode.
197 lefcha 1.10 */
198 lefcha 1.30 int
199     imap_select(int *sock, char *mbox)
200 lefcha 1.10 {
201 lefcha 1.30 char cmd[SMALL_CMD];
202 lefcha 1.10
203 lefcha 1.30 verbose("Client request: SELECT\n");
204 lefcha 1.10
205 lefcha 1.30 snprintf(cmd, SMALL_CMD, "%X SELECT \"%s\"\r\n", tag, mbox);
206 lefcha 1.10
207 lefcha 1.30 return send_command(sock, cmd);
208 lefcha 1.1 }
209 lefcha 1.10
210 lefcha 1.1
211     /*
212 lefcha 1.13 * IMAP STATUS: requests status of the indicated mailbox.
213 lefcha 1.1 */
214 lefcha 1.30 int
215     imap_status(int *sock, char *mbox, char *items)
216 lefcha 1.1 {
217 lefcha 1.30 char cmd[MEDIUM_CMD];
218 lefcha 1.1
219 lefcha 1.30 verbose("Client request: STATUS\n");
220 lefcha 1.1
221 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X STATUS \"%s\" (%s)\r\n", tag, mbox, items);
222 lefcha 1.5
223 lefcha 1.30 return send_command(sock, cmd);
224 lefcha 1.1 }
225    
226    
227     /*
228 lefcha 1.13 * IMAP CREATE: create mailbox.
229 lefcha 1.1 */
230 lefcha 1.30 int
231     imap_create(int *sock, char *mbox)
232 lefcha 1.1 {
233 lefcha 1.30 char cmd[MEDIUM_CMD];
234 lefcha 1.1
235 lefcha 1.30 verbose("Client request: CREATE\n");
236 lefcha 1.1
237 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X CREATE \"%s\"\r\n", tag, mbox);
238 lefcha 1.1
239 lefcha 1.30 return send_command(sock, cmd);
240 lefcha 1.1 }
241    
242    
243     /*
244 lefcha 1.13 * IMAP SEARCH: searches the mailbox for messages that match certain criteria.
245 lefcha 1.1 */
246 lefcha 1.30 int
247     imap_search(int *sock, char *charset, char *search)
248 lefcha 1.1 {
249 lefcha 1.30 char cmd[BIG_CMD];
250 lefcha 1.1
251 lefcha 1.30 verbose("Client request: SEARCH\n");
252 lefcha 1.1
253 lefcha 1.30 if (*charset)
254     snprintf(cmd, BIG_CMD, "%X SEARCH CHARSET \"%s\" %s\r\n", tag,
255     charset, search);
256     else
257     snprintf(cmd, BIG_CMD, "%X SEARCH %s\r\n", tag, search);
258 lefcha 1.1
259 lefcha 1.30 return send_command(sock, cmd);
260 lefcha 1.1 }
261    
262    
263     /*
264 lefcha 1.13 * IMAP FETCH: retrieves data associated with a message.
265 lefcha 1.1 */
266 lefcha 1.30 int
267     imap_fetch(int *sock, char *mesg, char *items)
268 lefcha 1.1 {
269 lefcha 1.30 char cmd[MEDIUM_CMD];
270 lefcha 1.1
271 lefcha 1.30 verbose("Client request: FETCH\n");
272 lefcha 1.1
273 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X FETCH %s %s\r\n", tag, mesg, items);
274 lefcha 1.1
275 lefcha 1.30 return send_command(sock, cmd);
276 lefcha 1.1 }
277    
278    
279     /*
280 lefcha 1.13 * IMAP STORE: alters data associated with a message.
281 lefcha 1.1 */
282 lefcha 1.30 int
283     imap_store(int *sock, char *mesg, unsigned int mode, char *flags)
284 lefcha 1.1 {
285 lefcha 1.30 char cmd[MEDIUM_CMD];
286 lefcha 1.1
287 lefcha 1.30 verbose("Client request: STORE\n");
288 lefcha 1.5
289 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X STORE %s %sFLAGS.SILENT (%s)\r\n", tag,
290     mesg, (mode == STORE_FLAG_REPLACE ? "" :
291     mode == STORE_FLAG_ADD ? "+" : "-"), flags);
292 lefcha 1.5
293 lefcha 1.30 return send_command(sock, cmd);
294 lefcha 1.5 }
295    
296    
297     /*
298 lefcha 1.13 * IMAP COPY: copy messages to mailbox.
299 lefcha 1.5 */
300 lefcha 1.30 int
301     imap_copy(int *sock, char *mesg, char *mbox)
302 lefcha 1.5 {
303 lefcha 1.30 char cmd[MEDIUM_CMD];
304 lefcha 1.5
305 lefcha 1.30 verbose("Client request: COPY\n");
306 lefcha 1.5
307 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X COPY %s \"%s\"\r\n", tag, mesg, mbox);
308 lefcha 1.5
309 lefcha 1.30 return send_command(sock, cmd);
310 lefcha 1.5 }
311 lefcha 1.2
312    
313 lefcha 1.5 /*
314 lefcha 1.24 * IMAP APPEND: append message to the end of a mailbox.
315     */
316 lefcha 1.30 int
317     imap_append(int *sock, char *mbox, unsigned int size)
318 lefcha 1.24 {
319 lefcha 1.30 char cmd[MEDIUM_CMD];
320 lefcha 1.25
321 lefcha 1.30 verbose("Client request: APPEND\n");
322 lefcha 1.25
323 lefcha 1.30 snprintf(cmd, MEDIUM_CMD, "%X APPEND \"%s\" {%d}\r\n", tag, mbox, size);
324 lefcha 1.25
325 lefcha 1.30 return send_command(sock, cmd);
326 lefcha 1.24 }
327    
328    
329    
330     /*
331 lefcha 1.13 * IMAP CLOSE: delete messages and return to authenticated state.
332 lefcha 1.5 */
333 lefcha 1.30 int
334     imap_close(int *sock)
335 lefcha 1.5 {
336 lefcha 1.30 char cmd[SMALL_CMD];
337 lefcha 1.4
338 lefcha 1.30 verbose("Client request: CLOSE\n");
339 lefcha 1.5
340 lefcha 1.30 snprintf(cmd, SMALL_CMD, "%X CLOSE\r\n", tag);
341 lefcha 1.13
342 lefcha 1.30 return send_command(sock, cmd);
343 lefcha 1.5 }
344 lefcha 1.4
345 lefcha 1.1
346     /*
347 lefcha 1.13 * IMAP EXPUNGE: permanently removes any messages with the \Deleted flag set.
348 lefcha 1.25 */
349 lefcha 1.30 int
350     imap_expunge(int *sock)
351 lefcha 1.1 {
352 lefcha 1.30 char cmd[SMALL_CMD];
353 lefcha 1.1
354 lefcha 1.30 verbose("Client request: EXPUNGE\n");
355 lefcha 1.1
356 lefcha 1.30 snprintf(cmd, SMALL_CMD, "%X EXPUNGE\r\n", tag);
357 lefcha 1.4
358 lefcha 1.30 return send_command(sock, cmd);
359 lefcha 1.25 }

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26