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

Annotation of /imapfilter/imap.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.26 - (hide annotations)
Sat Jul 13 21:19:52 2002 UTC (21 years, 8 months ago) by lefcha
Branch: MAIN
CVS Tags: release-0_8
Branch point for: release-0_8-patches
Changes since 1.25: +4 -3 lines
File MIME type: text/plain
Added action flag.

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

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26