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

Diff of /imapfilter/response.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.20 by lefcha, Tue Jun 18 21:21:47 2002 UTC revision 1.21 by lefcha, Sat Jul 13 22:40:07 2002 UTC
# Line 42  int server_response(int *sock, unsigned Line 42  int server_response(int *sock, unsigned
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));
# Line 77  int greeting_response(int *sock) Line 77  int greeting_response(int *sock)
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)));
# Line 100  int capability_response(int *sock, unsig Line 100  int capability_response(int *sock, unsig
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    
# Line 141  int status_response(int *sock, unsigned Line 141  int status_response(int *sock, unsigned
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 {
# Line 186  int select_response(int *sock, unsigned Line 186  int select_response(int *sock, unsigned
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));
# Line 210  int search_response(int *sock, unsigned Line 210  int search_response(int *sock, unsigned
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));
# Line 219  int search_response(int *sock, unsigned Line 219  int search_response(int *sock, unsigned
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    
# Line 248  int fetch_response(int *sock, int reset, Line 247  int fetch_response(int *sock, int reset,
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    
# Line 280  int fetchsize_response(int *sock, unsign Line 277  int fetchsize_response(int *sock, unsign
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    
# Line 307  int append_response(int *sock, unsigned Line 303  int append_response(int *sock, unsigned
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;
# Line 331  int copy_response(int *sock, unsigned in Line 327  int copy_response(int *sock, unsigned in
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    
# Line 368  int analyze_response(char *buf) Line 364  int analyze_response(char *buf)
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;

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.21

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26