citadel.control
citadel.log
citserver.log
+citlogin
citmail
citserver
config.cache
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);
/*
* 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.
}
/*
- * 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;
}
/*
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;
}
}
}
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;
}
}
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,
* 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");
}
*/
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");
+ }
}
}
}
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, " ");
}
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, "");
#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 */