imap: Code tidy up prior to adding support for the CAPABILITY command
authorSteve Holme <steve_holme@hotmail.com>
Sun, 30 Dec 2012 12:44:09 +0000 (12:44 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Sun, 30 Dec 2012 12:44:09 +0000 (12:44 +0000)
* Changing the order of the state machine to represent the order in
  which commands are sent to the server.

* Reworking the imap_endofresp() function as the FETCH response doesn't
  include the command id and shouldn't be part of the length comparison
  that takes into account the id string.

lib/curl_imap.h
lib/imap.c

index 9f509a7..ba6fe93 100644 (file)
@@ -31,10 +31,10 @@ typedef enum {
   IMAP_STOP,         /* do nothing state, stops the state machine */
   IMAP_SERVERGREET,  /* waiting for the initial greeting immediately after
                         a connect */
-  IMAP_LOGIN,
   IMAP_STARTTLS,
   IMAP_UPGRADETLS,   /* asynchronously upgrade the connection to SSL/TLS
                        (multi mode only) */
+  IMAP_LOGIN,
   IMAP_SELECT,
   IMAP_FETCH,
   IMAP_LOGOUT,
index eefdaf2..684c821 100644 (file)
@@ -329,15 +329,18 @@ static int imap_endofresp(struct pingpong *pp, int *resp)
   const char *id = imapc->idstr;
   size_t id_len = strlen(id);
 
+  /* Do we have a generic command response? */
   if(len >= id_len + 3) {
     if(!memcmp(id, line, id_len) && (line[id_len] == ' ') ) {
-      /* end of response */
       *resp = line[id_len+1]; /* O, N or B */
       return TRUE;
     }
-    else if((imapc->state == IMAP_FETCH) &&
-            !memcmp("* ", line, 2) ) {
-      /* FETCH response we're interested in */
+  }
+
+  /* Are we processing FETCH command responses? */
+  if(imapc->state == IMAP_FETCH) {
+    /* Do we have a valid response? */
+    if(len >= 2 && !memcmp("* ", line, 2)) {
       *resp = '*';
       return TRUE;
     }
@@ -356,9 +359,9 @@ static void state(struct connectdata *conn,
   static const char * const names[]={
     "STOP",
     "SERVERGREET",
-    "LOGIN",
     "STARTTLS",
     "UPGRADETLS",
+    "LOGIN",
     "SELECT",
     "FETCH",
     "LOGOUT",
@@ -687,14 +690,14 @@ static CURLcode imap_statemach_act(struct connectdata *conn)
       result = imap_state_servergreet_resp(conn, imapcode, imapc->state);
       break;
 
-    case IMAP_LOGIN:
-      result = imap_state_login_resp(conn, imapcode, imapc->state);
-      break;
-
     case IMAP_STARTTLS:
       result = imap_state_starttls_resp(conn, imapcode, imapc->state);
       break;
 
+    case IMAP_LOGIN:
+      result = imap_state_login_resp(conn, imapcode, imapc->state);
+      break;
+
     case IMAP_FETCH:
       result = imap_state_fetch_resp(conn, imapcode, imapc->state);
       break;