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

Annotation of /imapfilter/imap.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (hide annotations)
Mon Sep 10 23:43:29 2001 UTC (22 years, 7 months ago) by lefcha
Branch: MAIN
Changes since 1.12: +75 -193 lines
File MIME type: text/plain
New imapfilter.

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

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26