]> code.citadel.org Git - citadel.git/commitdiff
* imap
authorArt Cancro <ajc@citadel.org>
Sat, 24 Feb 2001 04:47:36 +0000 (04:47 +0000)
committerArt Cancro <ajc@citadel.org>
Sat, 24 Feb 2001 04:47:36 +0000 (04:47 +0000)
citadel/.cvsignore
citadel/imap_fetch.c
citadel/imap_search.c
citadel/imap_store.c
citadel/serv_imap.h

index 0d5a8a01515804e2c648e6f58f31fdf4f0bb8a6b..9aafd9f5f6fa22cf13974f6aba069f5fed231538 100644 (file)
@@ -7,6 +7,7 @@ citadel.config
 citadel.control
 citadel.log
 citserver.log
+citlogin
 citmail
 citserver
 config.cache
index 09a22bf1516849bb08888f89292fd74879bf6860..9355a8d2b9494c325ab2829cda111fca5b3a8cac 100644 (file)
@@ -672,7 +672,7 @@ void imap_do_fetch(int num_items, char **itemlist) {
 
        if (IMAP->num_msgs > 0)
         for (i = 0; i < IMAP->num_msgs; ++i)
-         if (IMAP->flags[i] & IMAP_FETCHED) {
+         if (IMAP->flags[i] & IMAP_SELECTED) {
                msg = CtdlFetchMessage(IMAP->msgids[i]);
                if (msg != NULL) {
                        imap_do_fetch_msg(i+1, msg, num_items, itemlist);
@@ -813,14 +813,14 @@ int imap_extract_data_items(char **argv, char *items) {
 /*
  * One particularly hideous aspect of IMAP is that we have to allow the client
  * to specify arbitrary ranges and/or sets of messages to fetch.  Citadel IMAP
- * handles this by setting the IMAP_FETCHED flag for each message specified in
+ * handles this by setting the IMAP_SELECTED flag for each message specified in
  * the ranges/sets, then looping through the message array, outputting messages
  * with the flag set.  We don't bother returning an error if an out-of-range
  * number is specified (we just return quietly) because any client braindead
  * enough to request a bogus message number isn't going to notice the
  * difference anyway.
  *
- * This function clears out the IMAP_FETCHED bits, then sets that bit for each
+ * This function clears out the IMAP_SELECTED bits, then sets that bit for each
  * message included in the specified range.
  *
  * Set is_uid to 1 to fetch by UID instead of sequence number.
@@ -844,10 +844,10 @@ void imap_pick_range(char *supplied_range, int is_uid) {
        }
 
        /*
-        * Clear out the IMAP_FETCHED flags for all messages.
+        * Clear out the IMAP_SELECTED flags for all messages.
         */
        for (i = 0; i < IMAP->num_msgs; ++i) {
-               IMAP->flags[i] = IMAP->flags[i] & ~IMAP_FETCHED;
+               IMAP->flags[i] = IMAP->flags[i] & ~IMAP_SELECTED;
        }
 
        /*
@@ -874,13 +874,13 @@ void imap_pick_range(char *supplied_range, int is_uid) {
                                if ( (IMAP->msgids[i-1]>=lo)
                                   && (IMAP->msgids[i-1]<=hi)) {
                                        IMAP->flags[i-1] =
-                                               IMAP->flags[i-1] | IMAP_FETCHED;
+                                               IMAP->flags[i-1] | IMAP_SELECTED;
                                }
                        }
                        else {          /* fetch by uid */
                                if ( (i>=lo) && (i<=hi)) {
                                        IMAP->flags[i-1] =
-                                               IMAP->flags[i-1] | IMAP_FETCHED;
+                                               IMAP->flags[i-1] | IMAP_SELECTED;
                                }
                        }
                }
@@ -892,7 +892,7 @@ void imap_pick_range(char *supplied_range, int is_uid) {
        for (i = 0; i < IMAP->num_msgs; ++i) {
                if (IMAP->flags[i] & IMAP_EXPUNGED) {
                        lprintf(9, "eliminating %d because expunged\n", i);
-                       IMAP->flags[i] = IMAP->flags[i] & ~IMAP_FETCHED;
+                       IMAP->flags[i] = IMAP->flags[i] & ~IMAP_SELECTED;
                }
        }
 
index 2ca9fb9afcc5db78bab578ca995d2fc76199ab8e..fc40923abb200a753887c7bbc426a5ec28a6add2 100644 (file)
@@ -82,7 +82,7 @@ void imap_do_search(int num_items, char **itemlist, int is_uid) {
        cprintf("* SEARCH ");
        if (IMAP->num_msgs > 0)
         for (i = 0; i < IMAP->num_msgs; ++i)
-         if (IMAP->flags[i] && IMAP_FETCHED) {
+         if (IMAP->flags[i] && IMAP_SELECTED) {
                msg = CtdlFetchMessage(IMAP->msgids[i]);
                if (msg != NULL) {
                        imap_do_search_msg(i+1, msg, num_items,
index fd3c5aac52940eeb0a4dda6b16095d5ad9ebc4f2..800af909966a4aaa04b49bbe9c8a244b5d1410bd 100644 (file)
  * imap_do_store() calls imap_do_store_msg() to output the deta of an
  * individual message, once it has been successfully loaded from disk.
  */
-void imap_do_store_msg(int seq, struct CtdlMessage *msg,
-                       int num_items, char **itemlist, int is_uid) {
-
+void imap_do_store_msg(int num, int num_items, char **itemlist) {
+       int i;
 
+       cprintf("* <%d> ", num);
+       for (i=0; i<num_items; ++i) cprintf("<%s> ", itemlist[i]);
+       cprintf("\r\n");
 }
 
 
@@ -64,19 +66,15 @@ void imap_do_store_msg(int seq, struct CtdlMessage *msg,
  */
 void imap_do_store(int num_items, char **itemlist, int is_uid) {
        int i;
-       struct CtdlMessage *msg;
-
-       if (IMAP->num_msgs > 0)
-        for (i = 0; i < IMAP->num_msgs; ++i)
-         if (IMAP->flags[i] && IMAP_FETCHED) {
-               msg = CtdlFetchMessage(IMAP->msgids[i]);
-               if (msg != NULL) {
-                       imap_do_store_msg(i+1, msg, num_items,
-                                       itemlist, is_uid);
-                       CtdlFreeMessage(msg);
-               }
+
+       if (IMAP->num_msgs > 0) {
+               for (i = 0; i < IMAP->num_msgs; ++i) {
+                       if (IMAP->flags[i] && IMAP_SELECTED) {
+                               imap_do_store_msg(i, num_items, itemlist);
+                       }
                else {
                        lprintf(1, "IMAP STORE internal error\n");
+                       }
                }
        }
 }
@@ -91,19 +89,22 @@ void imap_store(int num_parms, char *parms[]) {
        int num_items;
        int i;
 
-       if (num_parms < 3) {
+       if (num_parms < 4) {
                cprintf("%s BAD invalid parameters\r\n", parms[0]);
                return;
        }
 
-       for (i=1; i<num_parms; ++i) {
-               if (imap_is_message_set(parms[i])) {
-                       imap_pick_range(parms[2], 0);
-               }
+       if (imap_is_message_set(parms[2])) {
+               imap_pick_range(parms[2], 0);
+       }
+       else {
+               cprintf("%s BAD No message set specified to STORE\r\n",
+                       parms[0]);
+               return;
        }
 
        strcpy(items, "");
-       for (i=2; i<num_parms; ++i) {
+       for (i=3; i<num_parms; ++i) {
                strcat(items, parms[i]);
                if (i < (num_parms-1)) strcat(items, " ");
        }
@@ -127,15 +128,18 @@ void imap_uidstore(int num_parms, char *parms[]) {
        int num_items;
        int i;
 
-       if (num_parms < 4) {
+       if (num_parms < 5) {
                cprintf("%s BAD invalid parameters\r\n", parms[0]);
                return;
        }
 
-       for (i=1; i<num_parms; ++i) {
-               if (imap_is_message_set(parms[i])) {
-                       imap_pick_range(parms[2], 1);
-               }
+       if (imap_is_message_set(parms[2])) {
+               imap_pick_range(parms[2], 0);
+       }
+       else {
+               cprintf("%s BAD No message set specified to STORE\r\n",
+                       parms[0]);
+               return;
        }
 
        strcpy(items, "");
index 8f651ae48c095f9b1402768377fe017b84507ab0..6899c04d47b52fe2374aafe9cc34b4651ef4d132 100644 (file)
@@ -36,7 +36,7 @@ enum {
 #define IMAP_DELETED   4
 #define IMAP_DRAFT     8
 #define IMAP_SEEN      16
-#define IMAP_FETCHED   32      /* internal */
+#define IMAP_SELECTED  32      /* internal */
 #define IMAP_EXPUNGED  64      /* internal */