42 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
43 |
|
|
44 |
reset_vbuf(); |
reset_vbuf(); |
45 |
|
|
46 |
do { |
do { |
47 |
receive_response(sock, buf); |
receive_response(sock, buf); |
48 |
check_vbuf(strlen(buf)); |
check_vbuf(strlen(buf)); |
77 |
int capability_response(int *sock, unsigned int tag) |
int capability_response(int *sock, unsigned int tag) |
78 |
{ |
{ |
79 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
80 |
|
|
81 |
reset_vbuf(); |
reset_vbuf(); |
82 |
|
|
83 |
do { |
do { |
84 |
receive_response(sock, buf); |
receive_response(sock, buf); |
85 |
check_vbuf(strlen(buf)); |
check_vbuf(strlen(buf)); |
86 |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
87 |
} while (!strcasestr(buf, ultostr(tag, 16))); |
} while (!strcasestr(buf, ultostr(tag, 16))); |
100 |
/* |
/* |
101 |
* Process the data that server sent due to IMAP NAMESPACE client request. |
* Process the data that server sent due to IMAP NAMESPACE client request. |
102 |
*/ |
*/ |
103 |
int namespace_response(int *sock, unsigned int tag, namesp_t *nsp) |
int namespace_response(int *sock, unsigned int tag, namesp_t * nsp) |
104 |
{ |
{ |
105 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
106 |
char *c, *d; |
char *c, *d; |
107 |
|
|
108 |
reset_vbuf(); |
reset_vbuf(); |
109 |
|
|
110 |
do { |
do { |
111 |
check_vbuf(strlen(buf)); |
check_vbuf(strlen(buf)); |
112 |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
113 |
receive_response(sock, buf); |
receive_response(sock, buf); |
114 |
} while (!strcasestr(buf, ultostr(tag, 16))); |
} while (!strcasestr(buf, ultostr(tag, 16))); |
115 |
|
|
141 |
char *c; |
char *c; |
142 |
|
|
143 |
exist = recent = unseen = 0; |
exist = recent = unseen = 0; |
144 |
|
|
145 |
reset_vbuf(); |
reset_vbuf(); |
146 |
|
|
147 |
do { |
do { |
186 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
187 |
|
|
188 |
reset_vbuf(); |
reset_vbuf(); |
189 |
|
|
190 |
do { |
do { |
191 |
receive_response(sock, buf); |
receive_response(sock, buf); |
192 |
check_vbuf(strlen(buf)); |
check_vbuf(strlen(buf)); |
210 |
unsigned int blen; |
unsigned int blen; |
211 |
|
|
212 |
reset_vbuf(); |
reset_vbuf(); |
213 |
|
|
214 |
do { |
do { |
215 |
receive_response(sock, buf); |
receive_response(sock, buf); |
216 |
check_vbuf(strlen(buf)); |
check_vbuf(strlen(buf)); |
219 |
|
|
220 |
if ((c = strcasestr(vbuf, "* SEARCH "))) { |
if ((c = strcasestr(vbuf, "* SEARCH "))) { |
221 |
blen = strlen(vbuf); |
blen = strlen(vbuf); |
222 |
|
|
223 |
m = *mesgs = (char *) xmalloc(blen + 1); |
m = *mesgs = (char *)xmalloc(blen + 1); |
224 |
|
|
225 |
c += 9; |
c += 9; |
226 |
|
|
227 |
while (*c && (isdigit(*c) || *c == ' ')) |
while (*c && (isdigit(*c) || *c == ' ')) |
228 |
*(m++) = *(c++); |
*(m++) = *(c++); |
229 |
|
|
230 |
*m = 0; |
*m = 0; |
231 |
} |
} |
|
|
|
232 |
return analyze_response(buf); |
return analyze_response(buf); |
233 |
} |
} |
234 |
|
|
247 |
s = 0; |
s = 0; |
248 |
return 0; |
return 0; |
249 |
} |
} |
|
|
|
250 |
i = 0; |
i = 0; |
251 |
|
|
252 |
receive_response(sock, buf); |
receive_response(sock, buf); |
253 |
|
|
254 |
b = buf; |
b = buf; |
255 |
|
|
256 |
if (!s) { |
if (!s) { |
257 |
b = strchr(b, '{'); |
b = strchr(b, '{'); |
258 |
b++; |
b++; |
259 |
s = atoi(b) - 2; |
s = atoi(b) - 2; |
260 |
b = strchr(b, '}'); |
b = strchr(b, '}'); |
261 |
b += 3; |
b += 3; |
262 |
} |
} |
|
|
|
263 |
while (*b && s--) |
while (*b && s--) |
264 |
fetch[i++] = *(b++); |
fetch[i++] = *(b++); |
265 |
|
|
266 |
fetch[i] = 0; |
fetch[i] = 0; |
267 |
|
|
268 |
return analyze_response(buf); |
return analyze_response(buf); |
269 |
} |
} |
270 |
|
|
277 |
{ |
{ |
278 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
279 |
char *c; |
char *c; |
280 |
|
|
281 |
*size = 0; |
*size = 0; |
282 |
|
|
283 |
reset_vbuf(); |
reset_vbuf(); |
284 |
|
|
285 |
do { |
do { |
286 |
receive_response(sock, buf); |
receive_response(sock, buf); |
287 |
check_vbuf(strlen(buf)); |
check_vbuf(strlen(buf)); |
288 |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
289 |
} while (!strcasestr(buf, ultostr(tag, 16))); |
} while (!strcasestr(buf, ultostr(tag, 16))); |
290 |
|
|
291 |
if ((c = strcasestr(vbuf, "FETCH (RFC822.SIZE "))) { |
if ((c = strcasestr(vbuf, "FETCH (RFC822.SIZE "))) { |
292 |
c += 19; |
c += 19; |
293 |
*size = strtoul(c, NULL, 10); |
*size = strtoul(c, NULL, 10); |
294 |
} |
} |
|
|
|
295 |
return analyze_response(buf); |
return analyze_response(buf); |
296 |
} |
} |
297 |
|
|
303 |
{ |
{ |
304 |
int r = RESPONSE_OK; |
int r = RESPONSE_OK; |
305 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
306 |
|
|
307 |
reset_vbuf(); |
reset_vbuf(); |
308 |
|
|
309 |
do { |
do { |
310 |
receive_response(sock, buf); |
receive_response(sock, buf); |
311 |
check_vbuf(strlen(buf)); |
check_vbuf(strlen(buf)); |
312 |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
313 |
} while (!strcasestr(buf, ultostr(tag, 16))); |
} while (!strcasestr(buf, ultostr(tag, 16))); |
314 |
|
|
315 |
if ((r = analyze_response(buf)) == RESPONSE_NO && |
if ((r = analyze_response(buf)) == RESPONSE_NO && |
316 |
strcasestr(vbuf, "[TRYCREATE]")) |
strcasestr(vbuf, "[TRYCREATE]")) |
317 |
return RESPONSE_TRYCREATE; |
return RESPONSE_TRYCREATE; |
327 |
{ |
{ |
328 |
int r = RESPONSE_OK; |
int r = RESPONSE_OK; |
329 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
330 |
|
|
331 |
reset_vbuf(); |
reset_vbuf(); |
332 |
|
|
333 |
do { |
do { |
334 |
receive_response(sock, buf); |
receive_response(sock, buf); |
335 |
check_vbuf(strlen(buf)); |
check_vbuf(strlen(buf)); |
336 |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
strncat(vbuf, buf, vbufs - strlen(vbuf)); |
337 |
} while (!strcasestr(buf, ultostr(tag, 16))); |
} while (!strcasestr(buf, ultostr(tag, 16))); |
338 |
|
|
364 |
strncat(result, buf + match[1].rm_so, |
strncat(result, buf + match[1].rm_so, |
365 |
min(match[1].rm_eo - match[1].rm_so, RESULT_BUF - 1)); |
min(match[1].rm_eo - match[1].rm_so, RESULT_BUF - 1)); |
366 |
|
|
367 |
if (!strncasecmp(buf + match[2].rm_so, "NO", 2)) |
if (!strcasecmp(buf + match[2].rm_so, "NO")) |
368 |
r = RESPONSE_NO; |
r = RESPONSE_NO; |
369 |
else if (!strncasecmp(buf + match[2].rm_so, "BAD", 3)) |
else if (!strcasecmp(buf + match[2].rm_so, "BAD")) |
370 |
r = RESPONSE_BAD; |
r = RESPONSE_BAD; |
371 |
|
|
372 |
verbose("Server response: %s\n", result); |
verbose("Server response: %s\n", result); |
373 |
} else |
} else |
374 |
r = RESPONSE_NONE; |
r = RESPONSE_NONE; |
375 |
|
|
376 |
regfree(&creg); |
regfree(&creg); |
377 |
|
|
378 |
return r; |
return r; |