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

Annotation of /imapfilter/imap.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.29 - (hide annotations)
Fri Feb 21 18:55:15 2003 UTC (21 years, 1 month ago) by lefcha
Branch: MAIN
Changes since 1.28: +0 -1 lines
File MIME type: text/plain
Remove unused variable.

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.28 fprintf(stderr, "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.28 return send_command(sock, cmd);
93     }
94    
95    
96     /*
97     * IMAP AUTHENTICATE: indicates authentication mechanism and performs an
98     * authentication protocol exchange.
99     */
100     int imap_authenticate(int *sock, char *auth)
101     {
102     char cmd[MEDIUM_CMD];
103    
104     verbose("Client request: AUTHENTICATE\n");
105    
106     snprintf(cmd, MEDIUM_CMD, "%X AUTHENTICATE %s\r\n", tag, auth);
107    
108 lefcha 1.24 return send_command(sock, cmd);
109 lefcha 1.1 }
110    
111    
112     /*
113     * IMAP LOGIN: identifies client to server.
114     */
115 lefcha 1.24 int imap_login(int *sock, char *user, char *pass)
116 lefcha 1.1 {
117 lefcha 1.23 int r;
118     char *cmd;
119 lefcha 1.25
120     cmd = (char *)smalloc(MEDIUM_CMD);
121 lefcha 1.1
122 lefcha 1.16 verbose("Client request: LOGIN\n");
123 lefcha 1.1
124 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X LOGIN \"%s\" \"%s\"\r\n", tag, user,
125 lefcha 1.13 pass);
126 lefcha 1.1
127 lefcha 1.24 r = send_command(sock, cmd);
128 lefcha 1.25
129 lefcha 1.23 sfree(cmd);
130    
131     return r;
132 lefcha 1.1 }
133    
134    
135     /*
136 lefcha 1.24 * IMAP LIST: returns a subset of names from the complete set of names
137     * available to the client.
138     *
139     int imap_list(int *sock, char *refer, char *mbox)
140     {
141     int r;
142     char cmd[BIG_CMD];
143 lefcha 1.25
144 lefcha 1.24 verbose("Client request: LIST\n");
145 lefcha 1.25
146 lefcha 1.24 snprintf(cmd, MEDIUM_CMD, "%X LIST \"%s\" \"%s\"\r\n", tag, refer,
147     mbox);
148 lefcha 1.25
149 lefcha 1.24 r = send_command(sock, cmd);
150 lefcha 1.25
151 lefcha 1.24 return r;
152     }*/
153    
154    
155     /*
156     * IMAP SUBSCRIBE: adds the specified mailbox name to the server's
157     * set of "active" or "subscribed" mailboxes.
158     */
159     int imap_subscribe(int *sock, char *mbox)
160     {
161     char cmd[MEDIUM_CMD];
162    
163     verbose("Client request: SUBSCRIBE\n");
164    
165     snprintf(cmd, MEDIUM_CMD, "%X SUBSCRIBE \"%s\"\r\n", tag, mbox);
166    
167     return send_command(sock, cmd);
168     }
169    
170    
171     /*
172 lefcha 1.13 * IMAP EXAMINE: access a mailbox in READ-ONLY mode.
173 lefcha 1.24 */
174     int imap_examine(int *sock, char *mbox)
175 lefcha 1.1 {
176 lefcha 1.13 char cmd[MEDIUM_CMD];
177 lefcha 1.1
178 lefcha 1.13 verbose("Client request: EXAMINE %s\n", mbox);
179 lefcha 1.1
180 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X EXAMINE \"%s\"\r\n", tag, mbox);
181 lefcha 1.1
182 lefcha 1.24 return send_command(sock, cmd);
183     }
184 lefcha 1.10
185 lefcha 1.13
186 lefcha 1.10 /*
187 lefcha 1.13 * IMAP SELECT: access a mailbox in READ-WRITE mode.
188 lefcha 1.10 */
189 lefcha 1.24 int imap_select(int *sock, char *mbox)
190 lefcha 1.10 {
191 lefcha 1.13 char cmd[SMALL_CMD];
192 lefcha 1.10
193 lefcha 1.16 verbose("Client request: SELECT\n");
194 lefcha 1.10
195 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X SELECT \"%s\"\r\n", tag, mbox);
196 lefcha 1.10
197 lefcha 1.24 return send_command(sock, cmd);
198 lefcha 1.1 }
199 lefcha 1.10
200 lefcha 1.1
201     /*
202 lefcha 1.13 * IMAP STATUS: requests status of the indicated mailbox.
203 lefcha 1.1 */
204 lefcha 1.24 int imap_status(int *sock, char *mbox, char *items)
205 lefcha 1.1 {
206 lefcha 1.13 char cmd[MEDIUM_CMD];
207 lefcha 1.1
208 lefcha 1.13 verbose("Client request: STATUS\n");
209 lefcha 1.1
210 lefcha 1.22 snprintf(cmd, MEDIUM_CMD, "%X STATUS \"%s\" (%s)\r\n", tag, mbox, items);
211 lefcha 1.5
212 lefcha 1.24 return send_command(sock, cmd);
213 lefcha 1.1 }
214    
215    
216     /*
217 lefcha 1.13 * IMAP CREATE: create mailbox.
218 lefcha 1.1 */
219 lefcha 1.24 int imap_create(int *sock, char *mbox)
220 lefcha 1.1 {
221 lefcha 1.9 char cmd[MEDIUM_CMD];
222 lefcha 1.1
223 lefcha 1.13 verbose("Client request: CREATE\n");
224 lefcha 1.1
225 lefcha 1.22 snprintf(cmd, MEDIUM_CMD, "%X CREATE \"%s\"\r\n", tag, mbox);
226 lefcha 1.1
227 lefcha 1.24 return send_command(sock, cmd);
228 lefcha 1.1 }
229    
230    
231     /*
232 lefcha 1.13 * IMAP SEARCH: searches the mailbox for messages that match certain criteria.
233 lefcha 1.1 */
234 lefcha 1.27 int imap_search(int *sock, char *charset, char *search)
235 lefcha 1.1 {
236 lefcha 1.13 char cmd[BIG_CMD];
237 lefcha 1.1
238 lefcha 1.13 verbose("Client request: SEARCH\n");
239 lefcha 1.1
240 lefcha 1.27 if (*charset)
241     snprintf(cmd, BIG_CMD, "%X SEARCH CHARSET \"%s\" %s\r\n", tag,
242     charset, search);
243     else
244     snprintf(cmd, BIG_CMD, "%X SEARCH %s\r\n", tag, search);
245 lefcha 1.1
246 lefcha 1.24 return send_command(sock, cmd);
247 lefcha 1.1 }
248    
249    
250     /*
251 lefcha 1.13 * IMAP FETCH: retrieves data associated with a message.
252 lefcha 1.1 */
253 lefcha 1.24 int imap_fetch(int *sock, char *mesg, char *items)
254 lefcha 1.1 {
255 lefcha 1.13 char cmd[MEDIUM_CMD];
256 lefcha 1.1
257 lefcha 1.16 verbose("Client request: FETCH\n");
258 lefcha 1.1
259 lefcha 1.13 snprintf(cmd, MEDIUM_CMD,
260 lefcha 1.24 "%X FETCH %s %s\r\n", tag, mesg, items);
261 lefcha 1.1
262 lefcha 1.24 return send_command(sock, cmd);
263 lefcha 1.1 }
264    
265    
266     /*
267 lefcha 1.13 * IMAP STORE: alters data associated with a message.
268 lefcha 1.1 */
269 lefcha 1.26 int imap_store(int *sock, char *mesg, unsigned int mode, char *flags)
270 lefcha 1.1 {
271 lefcha 1.13 char cmd[MEDIUM_CMD];
272 lefcha 1.1
273 lefcha 1.16 verbose("Client request: STORE\n");
274 lefcha 1.5
275 lefcha 1.26 snprintf(cmd, MEDIUM_CMD, "%X STORE %s %sFLAGS.SILENT (%s)\r\n", tag, mesg,
276     (mode == STORE_FLAG_REPLACE ? "" :
277     mode == STORE_FLAG_ADD ? "+" : "-"), flags);
278 lefcha 1.5
279 lefcha 1.24 return send_command(sock, cmd);
280 lefcha 1.5 }
281    
282    
283     /*
284 lefcha 1.13 * IMAP COPY: copy messages to mailbox.
285 lefcha 1.5 */
286 lefcha 1.24 int imap_copy(int *sock, char *mesg, char *mbox)
287 lefcha 1.5 {
288 lefcha 1.13 char cmd[MEDIUM_CMD];
289 lefcha 1.5
290 lefcha 1.13 verbose("Client request: COPY\n");
291 lefcha 1.5
292 lefcha 1.24 snprintf(cmd, MEDIUM_CMD, "%X COPY %s \"%s\"\r\n", tag, mesg, mbox);
293 lefcha 1.5
294 lefcha 1.24 return send_command(sock, cmd);
295 lefcha 1.5 }
296 lefcha 1.2
297    
298 lefcha 1.5 /*
299 lefcha 1.24 * IMAP APPEND: append message to the end of a mailbox.
300     */
301     int imap_append(int *sock, char *mbox, unsigned int size)
302     {
303     char cmd[MEDIUM_CMD];
304 lefcha 1.25
305 lefcha 1.24 verbose("Client request: APPEND\n");
306 lefcha 1.25
307 lefcha 1.24 snprintf(cmd, MEDIUM_CMD, "%X APPEND \"%s\" {%d}\r\n", tag, mbox, size);
308 lefcha 1.25
309 lefcha 1.24 return send_command(sock, cmd);
310     }
311    
312    
313    
314     /*
315 lefcha 1.13 * IMAP CLOSE: delete messages and return to authenticated state.
316 lefcha 1.5 */
317 lefcha 1.24 int imap_close(int *sock)
318 lefcha 1.5 {
319 lefcha 1.13 char cmd[SMALL_CMD];
320 lefcha 1.4
321 lefcha 1.13 verbose("Client request: CLOSE\n");
322 lefcha 1.5
323 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X CLOSE\r\n", tag);
324 lefcha 1.13
325 lefcha 1.24 return send_command(sock, cmd);
326 lefcha 1.5 }
327 lefcha 1.4
328 lefcha 1.1
329     /*
330 lefcha 1.13 * IMAP EXPUNGE: permanently removes any messages with the \Deleted flag set.
331 lefcha 1.25 */
332 lefcha 1.24 int imap_expunge(int *sock)
333 lefcha 1.1 {
334 lefcha 1.13 char cmd[SMALL_CMD];
335 lefcha 1.1
336 lefcha 1.13 verbose("Client request: EXPUNGE\n");
337 lefcha 1.1
338 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X EXPUNGE\r\n", tag);
339 lefcha 1.4
340 lefcha 1.24 return send_command(sock, cmd);
341 lefcha 1.25 }

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26