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

Diff of /imapfilter/response.c

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

revision 1.5 by lefcha, Mon Oct 1 11:48:51 2001 UTC revision 1.6 by lefcha, Tue Oct 2 13:33:58 2001 UTC
# Line 48  int receive_response(char *buf) Line 48  int receive_response(char *buf)
48              return analyze_response(buf);              return analyze_response(buf);
49          }          }
50      }      }
   
51      fcntl(sock, F_SETFL, flags);      fcntl(sock, F_SETFL, flags);
52        
53      fatal(ERROR_NETWORK, "imapfilter: waiting input from socket; %s\n",      fatal(ERROR_NETWORK, "imapfilter: waiting input from socket; %s\n",
54            strerror(errno));            strerror(errno));
55        
56      return ERROR_NETWORK;      return ERROR_NETWORK;
57  }  }
58    
# Line 65  int server_response(char *cmd) Line 64  int server_response(char *cmd)
64  {  {
65      int r;      int r;
66      char buf[RESPONSE_BUF];      char buf[RESPONSE_BUF];
67        
68      do      do
69          r = receive_response(buf);          r = receive_response(buf);
70      while (*cmd && !strstr(buf, cmd));      while (*cmd && !strstr(buf, cmd));
71        
72      return r;      return r;
73  }  }
74    
# Line 92  int status_response(void) Line 91  int status_response(void)
91      sscanf(buf, "* STATUS %*s (MESSAGES %d RECENT %d UNSEEN %d)", &exist,      sscanf(buf, "* STATUS %*s (MESSAGES %d RECENT %d UNSEEN %d)", &exist,
92             &recent, &unseen);             &recent, &unseen);
93    
94      info("%d messages exist, %d recent, %d unseen,", exist, recent,      info(" %d messages exist, %d recent, %d unseen.\n", exist, recent,
95           unseen);           unseen);
96    
97      return r;      return r;
# Line 126  int fetch_response(void) Line 125  int fetch_response(void)
125      char buf[RESPONSE_BUF];      char buf[RESPONSE_BUF];
126      char *pos;      char *pos;
127      char headers[HEADERS_BUF];      char headers[HEADERS_BUF];
128        
129      headers[0] = 0;      headers[0] = 0;
130        
131      do      do
132          r = receive_response(buf);          r = receive_response(buf);
133      while (!strstr(buf, "FETCH"));      while (!strstr(buf, "FETCH"));
134        
135      pos = buf;      pos = buf;
136    
137      while((pos = strchr(pos, '{'))) {      while ((pos = strchr(pos, '{'))) {
138          s = atoi(pos + 1);          s = atoi(pos + 1);
139          pos = strchr(pos, '}');          pos = strchr(pos, '}');
140    
141          for (i = 0; i < HEADERS_BUF - 1 && i < s - 2; i++)          for (i = 0; i < HEADERS_BUF - 1 && i < s - 2; i++)
142              headers[i] = *(pos + 3 + i);              headers[i] = *(pos + 3 + i);
143            
144          headers[i] = 0;          headers[i] = 0;
145    
146            if ((options & OPTION_HEADERS))
147                info("%s\n", headers);
148                    
149          info("\n%s", headers);          if (*headers)
150          log_info(LOG_WRITE, headers);              log_info(LOG_WRITE, headers);
151            else
152                log_info(LOG_WRITE, NULL);
153      }      }
154        
155      return r;      return r;
156  }  }
157    
# Line 186  int analyze_response(char *buf) Line 190  int analyze_response(char *buf)
190      result[0] = 0;      result[0] = 0;
191    
192      regcomp(&creg, reg, REG_EXTENDED);      regcomp(&creg, reg, REG_EXTENDED);
193        
194      if (!regexec(&creg, buf, 3, match, 0)) {      if (!regexec(&creg, buf, 3, match, 0)) {
195          strncat(result, buf + match[1].rm_so,          strncat(result, buf + match[1].rm_so,
196                  min(match[1].rm_eo - match[1].rm_so, RESULT_BUF - 1));                  min(match[1].rm_eo - match[1].rm_so, RESULT_BUF - 1));
# Line 195  int analyze_response(char *buf) Line 199  int analyze_response(char *buf)
199              r = 1;              r = 1;
200          else if (!strncmp(buf + match[2].rm_so, "BAD", 3))          else if (!strncmp(buf + match[2].rm_so, "BAD", 3))
201              r = -1;              r = -1;
202            
203          verbose("Server response: %s\n", result);          verbose("Server response: %s\n", result);
204      }      }
   
205      regfree(&creg);      regfree(&creg);
206        
207      return r;      return r;
208  }  }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26