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

Annotation of /imapfilter/imap.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.23 - (hide annotations)
Tue Jan 29 21:23:41 2002 UTC (22 years, 2 months ago) by lefcha
Branch: MAIN
Changes since 1.22: +10 -3 lines
File MIME type: text/plain
Added secure memory allocation subsystem.

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.23
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.21 * 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 lefcha 1.21
58     return send_command(cmd);
59     }
60    
61    
62     /*
63     * 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 lefcha 1.16
74     return send_command(cmd);
75     }
76    
77    
78     /*
79 lefcha 1.1 * IMAP LOGOUT: informs server that client is done.
80     */
81     int imap_logout(void)
82     {
83 lefcha 1.9 char cmd[SMALL_CMD];
84 lefcha 1.1
85 lefcha 1.16 verbose("Client request: LOGOUT\n");
86 lefcha 1.1
87 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X LOGOUT\r\n", tag);
88 lefcha 1.1
89 lefcha 1.13 return send_command(cmd);
90 lefcha 1.1 }
91    
92    
93     /*
94     * IMAP LOGIN: identifies client to server.
95     */
96 lefcha 1.13 int imap_login(char *user, char *pass)
97 lefcha 1.1 {
98 lefcha 1.23 int r;
99     char *cmd;
100    
101     cmd = (char *) smalloc(MEDIUM_CMD);
102 lefcha 1.1
103 lefcha 1.16 verbose("Client request: LOGIN\n");
104 lefcha 1.1
105 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X LOGIN \"%s\" \"%s\"\r\n", tag, user,
106 lefcha 1.13 pass);
107 lefcha 1.1
108 lefcha 1.23 r = send_command(cmd);
109    
110     sfree(cmd);
111    
112     return r;
113 lefcha 1.1 }
114    
115    
116     /*
117 lefcha 1.13 * IMAP EXAMINE: access a mailbox in READ-ONLY mode.
118 lefcha 1.16 *
119 lefcha 1.13 int imap_examine(char *mbox)
120 lefcha 1.1 {
121 lefcha 1.13 char cmd[MEDIUM_CMD];
122 lefcha 1.1
123 lefcha 1.13 verbose("Client request: EXAMINE %s\n", mbox);
124 lefcha 1.1
125 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X EXAMINE \"%s\"\r\n", tag, mbox);
126 lefcha 1.1
127 lefcha 1.13 return send_command(cmd);
128 lefcha 1.16 }*/
129 lefcha 1.10
130 lefcha 1.13
131 lefcha 1.10 /*
132 lefcha 1.13 * IMAP SELECT: access a mailbox in READ-WRITE mode.
133 lefcha 1.10 */
134 lefcha 1.13 int imap_select(char *mbox)
135 lefcha 1.10 {
136 lefcha 1.13 char cmd[SMALL_CMD];
137 lefcha 1.10
138 lefcha 1.16 verbose("Client request: SELECT\n");
139 lefcha 1.10
140 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X SELECT \"%s\"\r\n", tag, mbox);
141 lefcha 1.10
142 lefcha 1.13 return send_command(cmd);
143 lefcha 1.1 }
144 lefcha 1.10
145 lefcha 1.1
146     /*
147 lefcha 1.13 * IMAP STATUS: requests status of the indicated mailbox.
148 lefcha 1.1 */
149 lefcha 1.13 int imap_status(char *mbox, char *items)
150 lefcha 1.1 {
151 lefcha 1.13 char cmd[MEDIUM_CMD];
152 lefcha 1.1
153 lefcha 1.13 verbose("Client request: STATUS\n");
154 lefcha 1.1
155 lefcha 1.22 snprintf(cmd, MEDIUM_CMD, "%X STATUS \"%s\" (%s)\r\n", tag, mbox, items);
156 lefcha 1.5
157 lefcha 1.13 return send_command(cmd);
158 lefcha 1.1 }
159    
160    
161     /*
162 lefcha 1.13 * IMAP CREATE: create mailbox.
163 lefcha 1.1 */
164 lefcha 1.13 int imap_create(char *mbox)
165 lefcha 1.1 {
166 lefcha 1.9 char cmd[MEDIUM_CMD];
167 lefcha 1.1
168 lefcha 1.13 verbose("Client request: CREATE\n");
169 lefcha 1.1
170 lefcha 1.22 snprintf(cmd, MEDIUM_CMD, "%X CREATE \"%s\"\r\n", tag, mbox);
171 lefcha 1.1
172 lefcha 1.13 return send_command(cmd);
173 lefcha 1.1 }
174    
175    
176     /*
177 lefcha 1.13 * IMAP SEARCH: searches the mailbox for messages that match certain criteria.
178 lefcha 1.1 */
179 lefcha 1.13 int imap_search(char *search)
180 lefcha 1.1 {
181 lefcha 1.13 char cmd[BIG_CMD];
182 lefcha 1.1
183 lefcha 1.13 verbose("Client request: SEARCH\n");
184 lefcha 1.1
185 lefcha 1.16 snprintf(cmd, BIG_CMD, "%X SEARCH %s\r\n", tag, search);
186 lefcha 1.1
187 lefcha 1.13 return send_command(cmd);
188 lefcha 1.1 }
189    
190    
191     /*
192 lefcha 1.13 * IMAP FETCH: retrieves data associated with a message.
193 lefcha 1.1 */
194 lefcha 1.16 int imap_fetch(char *mesg, char *headers, int peek)
195 lefcha 1.1 {
196 lefcha 1.13 char cmd[MEDIUM_CMD];
197 lefcha 1.1
198 lefcha 1.16 verbose("Client request: FETCH\n");
199 lefcha 1.1
200 lefcha 1.13 snprintf(cmd, MEDIUM_CMD,
201 lefcha 1.16 "%X FETCH %s BODY%s[HEADER.FIELDS (%s)]\r\n", tag, mesg,
202 lefcha 1.14 (peek ? ".PEEK" : ""), headers);
203 lefcha 1.1
204 lefcha 1.13 return send_command(cmd);
205 lefcha 1.1 }
206    
207    
208     /*
209 lefcha 1.13 * IMAP STORE: alters data associated with a message.
210 lefcha 1.1 */
211 lefcha 1.13 int imap_store(char *mesg, char *flags)
212 lefcha 1.1 {
213 lefcha 1.13 char cmd[MEDIUM_CMD];
214 lefcha 1.1
215 lefcha 1.16 verbose("Client request: STORE\n");
216 lefcha 1.5
217 lefcha 1.16 snprintf(cmd, MEDIUM_CMD, "%X STORE %s +FLAGS.SILENT (%s)\r\n", tag, mesg,
218 lefcha 1.13 flags);
219 lefcha 1.5
220 lefcha 1.13 return send_command(cmd);
221 lefcha 1.5 }
222    
223    
224     /*
225 lefcha 1.13 * IMAP COPY: copy messages to mailbox.
226 lefcha 1.5 */
227 lefcha 1.13 int imap_copy(char *mesg, char *mbox)
228 lefcha 1.5 {
229 lefcha 1.13 char cmd[MEDIUM_CMD];
230 lefcha 1.5
231 lefcha 1.13 verbose("Client request: COPY\n");
232 lefcha 1.5
233 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X COPY %s \"%s\"\r\n", tag, mesg, mbox);
234 lefcha 1.5
235 lefcha 1.13 return send_command(cmd);
236 lefcha 1.5 }
237 lefcha 1.2
238    
239 lefcha 1.5 /*
240 lefcha 1.13 * IMAP CLOSE: delete messages and return to authenticated state.
241 lefcha 1.5 */
242 lefcha 1.13 int imap_close(void)
243 lefcha 1.5 {
244 lefcha 1.13 char cmd[SMALL_CMD];
245 lefcha 1.4
246 lefcha 1.13 verbose("Client request: CLOSE\n");
247 lefcha 1.5
248 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X CLOSE\r\n", tag);
249 lefcha 1.13
250     return send_command(cmd);
251 lefcha 1.5 }
252 lefcha 1.4
253 lefcha 1.1
254     /*
255 lefcha 1.13 * IMAP EXPUNGE: permanently removes any messages with the \Deleted flag set.
256 lefcha 1.19 *
257 lefcha 1.13 int imap_expunge(void)
258 lefcha 1.1 {
259 lefcha 1.13 char cmd[SMALL_CMD];
260 lefcha 1.1
261 lefcha 1.13 verbose("Client request: EXPUNGE\n");
262 lefcha 1.1
263 lefcha 1.16 snprintf(cmd, SMALL_CMD, "%X EXPUNGE\r\n", tag);
264 lefcha 1.4
265 lefcha 1.13 return send_command(cmd);
266 lefcha 1.19 }*/

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26