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

Annotation of /imapfilter/imap.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.20.2.1 - (hide annotations)
Wed Dec 5 09:55:12 2001 UTC (22 years, 3 months ago) by lefcha
Branch: release-0_7-patches
Changes since 1.20: +20 -3 lines
File MIME type: text/plain
Take into consideration namespace.

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.13 static unsigned int tag = 0xF00000; /* Every IMAP command is prefixed
13     with a unique [:alnum:] string. */
14 lefcha 1.1
15     /*
16 lefcha 1.13 * Send to server data; a command.
17 lefcha 1.1 */
18 lefcha 1.16 unsigned int send_command(char *cmd)
19 lefcha 1.1 {
20     #ifdef DEBUG
21 lefcha 1.9 printf("debug: sending command: %s", cmd);
22 lefcha 1.1 #endif
23 lefcha 1.18
24 lefcha 1.17 socket_write(cmd);
25 lefcha 1.1
26 lefcha 1.16 return tag++;
27 lefcha 1.1 }
28    
29    
30     #ifdef DEBUG
31     /*
32     * IMAP NOOP: does nothing always succeeds.
33     */
34     int imap_noop(void)
35     {
36 lefcha 1.9 char cmd[SMALL_CMD];
37 lefcha 1.1
38 lefcha 1.16 verbose("Client request: NOOP\n");
39 lefcha 1.1
40 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X NOOP\r\n", tag);
41 lefcha 1.1
42 lefcha 1.13 return send_command(cmd);
43 lefcha 1.1 }
44     #endif
45    
46    
47     /*
48 lefcha 1.20.2.1 * IMAP CAPABILITY: requests listing of capabilities that the server supports.
49 lefcha 1.16 */
50     int imap_capability(void)
51     {
52     char cmd[SMALL_CMD];
53    
54     verbose("Client request: CAPABILITY\n");
55    
56     snprintf(cmd, SMALL_CMD, "%X CAPABILITY\r\n", tag);
57    
58     return send_command(cmd);
59     }
60    
61    
62     /*
63 lefcha 1.20.2.1 * IMAP NAMESPACE: discovers the prefix and delimeter of namespaces used by
64     * the server for mailboxes (RFC 2342).
65     */
66     int imap_namespace(void)
67     {
68     char cmd[SMALL_CMD];
69    
70     verbose("Client request: NAMESPACE\n");
71    
72     snprintf(cmd, SMALL_CMD, "%X NAMESPACE\r\n", tag);
73    
74     return send_command(cmd);
75     }
76    
77    
78    
79     /*
80 lefcha 1.1 * IMAP LOGOUT: informs server that client is done.
81     */
82     int imap_logout(void)
83     {
84 lefcha 1.9 char cmd[SMALL_CMD];
85 lefcha 1.1
86 lefcha 1.16 verbose("Client request: LOGOUT\n");
87 lefcha 1.1
88 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X LOGOUT\r\n", tag);
89 lefcha 1.1
90 lefcha 1.13 return send_command(cmd);
91 lefcha 1.1 }
92    
93    
94     /*
95     * IMAP LOGIN: identifies client to server.
96     */
97 lefcha 1.13 int imap_login(char *user, char *pass)
98 lefcha 1.1 {
99 lefcha 1.9 char cmd[MEDIUM_CMD];
100 lefcha 1.1
101 lefcha 1.16 verbose("Client request: LOGIN\n");
102 lefcha 1.1
103 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X LOGIN \"%s\" \"%s\"\r\n", tag, user,
104 lefcha 1.13 pass);
105 lefcha 1.1
106 lefcha 1.13 return send_command(cmd);
107 lefcha 1.1 }
108    
109    
110     /*
111 lefcha 1.13 * IMAP EXAMINE: access a mailbox in READ-ONLY mode.
112 lefcha 1.16 *
113 lefcha 1.13 int imap_examine(char *mbox)
114 lefcha 1.1 {
115 lefcha 1.13 char cmd[MEDIUM_CMD];
116 lefcha 1.1
117 lefcha 1.13 verbose("Client request: EXAMINE %s\n", mbox);
118 lefcha 1.1
119 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X EXAMINE \"%s\"\r\n", tag, mbox);
120 lefcha 1.1
121 lefcha 1.13 return send_command(cmd);
122 lefcha 1.16 }*/
123 lefcha 1.10
124 lefcha 1.13
125 lefcha 1.10 /*
126 lefcha 1.13 * IMAP SELECT: access a mailbox in READ-WRITE mode.
127 lefcha 1.10 */
128 lefcha 1.13 int imap_select(char *mbox)
129 lefcha 1.10 {
130 lefcha 1.13 char cmd[SMALL_CMD];
131 lefcha 1.10
132 lefcha 1.16 verbose("Client request: SELECT\n");
133 lefcha 1.10
134 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X SELECT \"%s\"\r\n", tag, mbox);
135 lefcha 1.10
136 lefcha 1.13 return send_command(cmd);
137 lefcha 1.1 }
138 lefcha 1.10
139 lefcha 1.1
140     /*
141 lefcha 1.13 * IMAP STATUS: requests status of the indicated mailbox.
142 lefcha 1.1 */
143 lefcha 1.13 int imap_status(char *mbox, char *items)
144 lefcha 1.1 {
145 lefcha 1.13 char cmd[MEDIUM_CMD];
146 lefcha 1.1
147 lefcha 1.13 verbose("Client request: STATUS\n");
148 lefcha 1.1
149 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X STATUS %s (%s)\r\n", tag, mbox, items);
150 lefcha 1.5
151 lefcha 1.13 return send_command(cmd);
152 lefcha 1.1 }
153    
154    
155     /*
156 lefcha 1.13 * IMAP CREATE: create mailbox.
157 lefcha 1.1 */
158 lefcha 1.13 int imap_create(char *mbox)
159 lefcha 1.1 {
160 lefcha 1.9 char cmd[MEDIUM_CMD];
161 lefcha 1.1
162 lefcha 1.13 verbose("Client request: CREATE\n");
163 lefcha 1.1
164 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X CREATE %s\r\n", tag, mbox);
165 lefcha 1.1
166 lefcha 1.13 return send_command(cmd);
167 lefcha 1.1 }
168    
169    
170     /*
171 lefcha 1.13 * IMAP SEARCH: searches the mailbox for messages that match certain criteria.
172 lefcha 1.1 */
173 lefcha 1.13 int imap_search(char *search)
174 lefcha 1.1 {
175 lefcha 1.13 char cmd[BIG_CMD];
176 lefcha 1.1
177 lefcha 1.13 verbose("Client request: SEARCH\n");
178 lefcha 1.1
179 lefcha 1.16 snprintf(cmd, BIG_CMD, "%X SEARCH %s\r\n", tag, search);
180 lefcha 1.1
181 lefcha 1.13 return send_command(cmd);
182 lefcha 1.1 }
183    
184    
185     /*
186 lefcha 1.13 * IMAP FETCH: retrieves data associated with a message.
187 lefcha 1.1 */
188 lefcha 1.16 int imap_fetch(char *mesg, char *headers, int peek)
189 lefcha 1.1 {
190 lefcha 1.13 char cmd[MEDIUM_CMD];
191 lefcha 1.1
192 lefcha 1.16 verbose("Client request: FETCH\n");
193 lefcha 1.1
194 lefcha 1.13 snprintf(cmd, MEDIUM_CMD,
195 lefcha 1.16 "%X FETCH %s BODY%s[HEADER.FIELDS (%s)]\r\n", tag, mesg,
196 lefcha 1.14 (peek ? ".PEEK" : ""), headers);
197 lefcha 1.1
198 lefcha 1.13 return send_command(cmd);
199 lefcha 1.1 }
200    
201    
202     /*
203 lefcha 1.13 * IMAP STORE: alters data associated with a message.
204 lefcha 1.1 */
205 lefcha 1.13 int imap_store(char *mesg, char *flags)
206 lefcha 1.1 {
207 lefcha 1.13 char cmd[MEDIUM_CMD];
208 lefcha 1.1
209 lefcha 1.16 verbose("Client request: STORE\n");
210 lefcha 1.5
211 lefcha 1.20.2.1 snprintf(cmd, MEDIUM_CMD, "%X STORE %s +FLAGS.SILENT (%s)\r\n", tag,
212     mesg, flags);
213 lefcha 1.5
214 lefcha 1.13 return send_command(cmd);
215 lefcha 1.5 }
216    
217    
218     /*
219 lefcha 1.13 * IMAP COPY: copy messages to mailbox.
220 lefcha 1.5 */
221 lefcha 1.13 int imap_copy(char *mesg, char *mbox)
222 lefcha 1.5 {
223 lefcha 1.13 char cmd[MEDIUM_CMD];
224 lefcha 1.5
225 lefcha 1.13 verbose("Client request: COPY\n");
226 lefcha 1.5
227 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X COPY %s \"%s\"\r\n", tag, mesg, mbox);
228 lefcha 1.5
229 lefcha 1.13 return send_command(cmd);
230 lefcha 1.5 }
231 lefcha 1.2
232    
233 lefcha 1.5 /*
234 lefcha 1.13 * IMAP CLOSE: delete messages and return to authenticated state.
235 lefcha 1.5 */
236 lefcha 1.13 int imap_close(void)
237 lefcha 1.5 {
238 lefcha 1.13 char cmd[SMALL_CMD];
239 lefcha 1.4
240 lefcha 1.13 verbose("Client request: CLOSE\n");
241 lefcha 1.5
242 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X CLOSE\r\n", tag);
243 lefcha 1.13
244     return send_command(cmd);
245 lefcha 1.5 }
246 lefcha 1.4
247 lefcha 1.1
248     /*
249 lefcha 1.13 * IMAP EXPUNGE: permanently removes any messages with the \Deleted flag set.
250 lefcha 1.19 *
251 lefcha 1.13 int imap_expunge(void)
252 lefcha 1.1 {
253 lefcha 1.13 char cmd[SMALL_CMD];
254 lefcha 1.1
255 lefcha 1.13 verbose("Client request: EXPUNGE\n");
256 lefcha 1.1
257 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X EXPUNGE\r\n", tag);
258 lefcha 1.4
259 lefcha 1.13 return send_command(cmd);
260 lefcha 1.19 }*/

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26