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

Annotation of /imapfilter/imap.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.24 - (hide annotations)
Tue Jun 18 21:13:50 2002 UTC (21 years, 9 months ago) by lefcha
Branch: MAIN
Changes since 1.23: +90 -37 lines
File MIME type: text/plain
Added SUBSCRIBE, LIST, APPEND and the socket where each command is send.

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

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26