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

Annotation of /imapfilter/imap.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.16 - (hide annotations)
Mon Oct 8 08:52:49 2001 UTC (22 years, 5 months ago) by lefcha
Branch: MAIN
CVS Tags: release-0_6_2
Branch point for: release-0_6_2-patches
Changes since 1.15: +39 -24 lines
File MIME type: text/plain
Fixes and improvements on IMAP4rev1 compliance.

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

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26