[dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-sync-parse.c, 1.15, 1.16 mbox-sync-private.h, 1.19, 1.20 mbox-sync.c, 1.51, 1.52

cras at procontrol.fi cras at procontrol.fi
Wed Jun 23 21:33:24 EEST 2004


Update of /home/cvs/dovecot/src/lib-storage/index/mbox
In directory talvi:/tmp/cvs-serv6214/lib-storage/index/mbox

Modified Files:
	mbox-sync-parse.c mbox-sync-private.h mbox-sync.c 
Log Message:
Added a framework for getting POP3 UIDL strings from mail-storage. The
default still is uidvalidity.uid. Added beginnings of overriding it from
X-UIDL header in mbox.



Index: mbox-sync-parse.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync-parse.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- mbox-sync-parse.c	20 Jun 2004 13:48:34 -0000	1.15
+++ mbox-sync-parse.c	23 Jun 2004 18:33:22 -0000	1.16
@@ -223,6 +223,21 @@
 	return TRUE;
 }
 
+static int parse_x_uidl(struct mbox_sync_mail_context *ctx,
+			struct message_header_line *hdr)
+{
+	size_t i;
+
+	for (i = 0; i < hdr->full_value_len; i++) {
+		if (IS_LWSP_LF(hdr->full_value[i]))
+			break;
+	}
+
+	str_truncate(ctx->uidl, 0);
+	str_append_n(ctx->uidl, hdr->full_value, i);
+	return TRUE;
+}
+
 static int parse_content_length(struct mbox_sync_mail_context *ctx,
 				struct message_header_line *hdr)
 {
@@ -259,6 +274,7 @@
 	{ "X-Keywords", parse_x_keywords },
 	{ "X-Status", parse_x_status },
 	{ "X-UID", parse_x_uid },
+	{ "X-UIDL", parse_x_uidl },
 	{ NULL, NULL }
 };
 

Index: mbox-sync-private.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync-private.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- mbox-sync-private.h	20 Jun 2004 13:48:34 -0000	1.19
+++ mbox-sync-private.h	23 Jun 2004 18:33:22 -0000	1.20
@@ -54,7 +54,7 @@
 	uoff_t from_offset, hdr_offset, body_offset;
 
 	size_t header_first_change, header_last_change;
-	string_t *header;
+	string_t *header, *uidl;
 
 	uoff_t content_length;
 
@@ -80,7 +80,7 @@
 	struct mail_index_transaction *t;
 	const struct mail_index_header *hdr;
 
-	string_t *header, *from_line;
+	string_t *header, *uidl, *from_line;
 
 	/* header state: */
 	uint32_t base_uid_validity, base_uid_last;

Index: mbox-sync.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -d -r1.51 -r1.52
--- mbox-sync.c	23 Jun 2004 03:31:52 -0000	1.51
+++ mbox-sync.c	23 Jun 2004 18:33:22 -0000	1.52
@@ -198,6 +198,8 @@
 	mail_ctx->sync_ctx = sync_ctx;
 	mail_ctx->seq = ++sync_ctx->seq;
 	mail_ctx->header = sync_ctx->header;
+	mail_ctx->uidl = sync_ctx->uidl;
+	str_truncate(mail_ctx->uidl, 0);
 
 	mail_ctx->from_offset =
 		istream_raw_mbox_get_start_offset(sync_ctx->input);
@@ -403,9 +405,10 @@
 }
 
 static int mbox_sync_update_index(struct mbox_sync_context *sync_ctx,
-				  struct mbox_sync_mail *mail,
+                                  struct mbox_sync_mail_context *mail_ctx,
 				  const struct mail_index_record *rec)
 {
+	struct mbox_sync_mail *mail = &mail_ctx->mail;
 	keywords_mask_t idx_keywords;
 	uint8_t idx_flags, mbox_flags;
 
@@ -416,6 +419,12 @@
 		mail_index_update_flags(sync_ctx->t, sync_ctx->idx_seq,
 					MODIFY_REPLACE, mbox_flags,
 					mail->keywords);
+		if (str_len(mail_ctx->uidl) > 0) {
+			/*FIXME:mail_cache_add(sync_ctx->cache_trans,
+				       MAIL_CACHE_UID_STRING,
+				       str_data(mail_ctx->uidl),
+				       str_len(mail_ctx->uidl));*/
+		}
 	} else {
 		/* see if flags changed */
 		idx_flags = rec->flags;
@@ -785,7 +794,7 @@
 		}
 
 		if (!expunged && !mail_ctx->pseudo) {
-			if (mbox_sync_update_index(sync_ctx, &mail_ctx->mail,
+			if (mbox_sync_update_index(sync_ctx, mail_ctx,
 						   rec) < 0)
 				return -1;
 		}
@@ -1129,6 +1138,7 @@
 	sync_ctx.ibox = ibox;
 	sync_ctx.from_line = str_new(default_pool, 256);
 	sync_ctx.header = str_new(default_pool, 4096);
+	sync_ctx.uidl = str_new(default_pool, 128);
 	sync_ctx.lock_id = lock_id;
 
 	sync_ctx.index_sync_ctx = index_sync_ctx;
@@ -1227,6 +1237,7 @@
 			ret = -1;
 	}
 
+	str_free(sync_ctx.uidl);
 	str_free(sync_ctx.header);
 	str_free(sync_ctx.from_line);
 	buffer_free(sync_ctx.mails);



More information about the dovecot-cvs mailing list