[dovecot-cvs] dovecot/src/lib-storage Makefile.am, 1.10,
1.11 mail-copy.c, NONE, 1.1 mail-copy.h, NONE, 1.1 mail-save.c,
1.12, NONE mail-save.h, 1.3, NONE mail-storage-private.h, 1.7,
1.8 mail-storage.c, 1.28, 1.29 mail-storage.h, 1.76,
1.77 proxy-mailbox.c, 1.9, 1.10
cras at dovecot.org
cras at dovecot.org
Sun Aug 22 12:17:11 EEST 2004
- Previous message: [dovecot-cvs] dovecot/src/imap cmd-append.c,1.41,1.42
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-copy.c,
1.31, 1.32 maildir-save.c, 1.37, 1.38 maildir-storage.c, 1.82,
1.83 maildir-storage.h, 1.26, 1.27 maildir-transaction.c, 1.2, 1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /home/cvs/dovecot/src/lib-storage
In directory talvi:/tmp/cvs-serv2400/lib-storage
Modified Files:
Makefile.am mail-storage-private.h mail-storage.c
mail-storage.h proxy-mailbox.c
Added Files:
mail-copy.c mail-copy.h
Removed Files:
mail-save.c mail-save.h
Log Message:
Changed mail saving API to be nonblocking.
Index: Makefile.am
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/Makefile.am,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- Makefile.am 27 Apr 2004 20:25:54 -0000 1.10
+++ Makefile.am 22 Aug 2004 09:17:08 -0000 1.11
@@ -8,7 +8,7 @@
-I$(top_srcdir)/src/lib-imap
libstorage_a_SOURCES = \
- mail-save.c \
+ mail-copy.c \
mail-search.c \
mail-storage.c \
mailbox-tree.c \
@@ -17,7 +17,7 @@
proxy-mailbox.c
noinst_HEADERS = \
- mail-save.h \
+ mail-copy.h \
mail-search.h \
mail-storage.h \
mail-storage-private.h \
--- NEW FILE: mail-copy.c ---
/* Copyright (C) 2004 Timo Sirainen */
#include "lib.h"
#include "istream.h"
#include "mail-storage.h"
#include "mail-copy.h"
int mail_storage_copy(struct mailbox_transaction_context *t, struct mail *mail,
struct mail **dest_mail_r)
{
struct mail_save_context *ctx;
struct istream *input;
const char *from_envelope;
input = mail->get_stream(mail, NULL, NULL);
if (input == NULL)
return -1;
from_envelope = mail->get_special(mail, MAIL_FETCH_FROM_ENVELOPE);
ctx = mailbox_save_init(t, mail->get_flags(mail),
mail->get_received_date(mail),
0, from_envelope, input, dest_mail_r != NULL);
while (i_stream_read(input) != -1) {
if (mailbox_save_continue(ctx) < 0)
break;
}
if (input->stream_errno != 0) {
mailbox_save_cancel(ctx);
return -1;
}
return mailbox_save_finish(ctx, dest_mail_r);
}
--- NEW FILE: mail-copy.h ---
#ifndef __MAIL_COPY_H
#define __MAIL_COPY_H
int mail_storage_copy(struct mailbox_transaction_context *t, struct mail *mail,
struct mail **dest_mail_r);
#endif
--- mail-save.c DELETED ---
--- mail-save.h DELETED ---
Index: mail-storage-private.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-storage-private.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- mail-storage-private.h 22 Jul 2004 21:20:00 -0000 1.7
+++ mail-storage-private.h 22 Aug 2004 09:17:08 -0000 1.8
@@ -102,11 +102,16 @@
int (*search_deinit)(struct mail_search_context *ctx);
struct mail *(*search_next)(struct mail_search_context *ctx);
- int (*save)(struct mailbox_transaction_context *t,
- const struct mail_full_flags *flags,
- time_t received_date, int timezone_offset,
- const char *from_envelope, struct istream *data,
- struct mail **dest_mail_r);
+ struct mail_save_context *
+ (*save_init)(struct mailbox_transaction_context *t,
+ const struct mail_full_flags *flags,
+ time_t received_date, int timezone_offset,
+ const char *from_envelope, struct istream *input,
+ int want_mail);
+ int (*save_continue)(struct mail_save_context *ctx);
+ int (*save_finish)(struct mail_save_context *ctx, struct mail **mail_r);
+ void (*save_cancel)(struct mail_save_context *ctx);
+
int (*copy)(struct mailbox_transaction_context *t, struct mail *mail,
struct mail **dest_mail_r);
@@ -125,6 +130,10 @@
struct mailbox *box;
};
+struct mail_save_context {
+ struct mailbox *box;
+};
+
struct mailbox_sync_context {
struct mailbox *box;
};
Index: mail-storage.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-storage.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- mail-storage.c 22 Jul 2004 21:20:00 -0000 1.28
+++ mail-storage.c 22 Aug 2004 09:17:08 -0000 1.29
@@ -413,14 +413,30 @@
t->box->transaction_rollback(t);
}
-int mailbox_save(struct mailbox_transaction_context *t,
- const struct mail_full_flags *flags,
- time_t received_date, int timezone_offset,
- const char *from_envelope, struct istream *data,
- struct mail **mail_r)
+struct mail_save_context *
+mailbox_save_init(struct mailbox_transaction_context *t,
+ const struct mail_full_flags *flags,
+ time_t received_date, int timezone_offset,
+ const char *from_envelope, struct istream *input,
+ int want_mail)
{
- return t->box->save(t, flags, received_date, timezone_offset,
- from_envelope, data, mail_r);
+ return t->box->save_init(t, flags, received_date, timezone_offset,
+ from_envelope, input, want_mail);
+}
+
+int mailbox_save_continue(struct mail_save_context *ctx)
+{
+ return ctx->box->save_continue(ctx);
+}
+
+int mailbox_save_finish(struct mail_save_context *ctx, struct mail **mail_r)
+{
+ return ctx->box->save_finish(ctx, mail_r);
+}
+
+void mailbox_save_cancel(struct mail_save_context *ctx)
+{
+ ctx->box->save_cancel(ctx);
}
int mailbox_copy(struct mailbox_transaction_context *t, struct mail *mail,
Index: mail-storage.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-storage.h,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -d -r1.76 -r1.77
--- mail-storage.h 15 Aug 2004 03:52:09 -0000 1.76
+++ mail-storage.h 22 Aug 2004 09:17:08 -0000 1.77
@@ -319,14 +319,19 @@
minutes in which received_date was originally given with. To use
current time, set received_date to (time_t)-1.
- If mail_r is non-NULL, the saved message can be accessed using it.
- Note that setting it non-NULL may require mailbox syncing, so don't give
- give it unless you need it. */
-int mailbox_save(struct mailbox_transaction_context *t,
- const struct mail_full_flags *flags,
- time_t received_date, int timezone_offset,
- const char *from_envelope, struct istream *data,
- struct mail **mail_r);
+ If want_mail is TRUE, mail_r will be set in mailbox_save_finish() and
+ the saved message can be accessed using it. Note that setting it may
+ require mailbox syncing, so don't set it unless you need it. */
+struct mail_save_context *
+mailbox_save_init(struct mailbox_transaction_context *t,
+ const struct mail_full_flags *flags,
+ time_t received_date, int timezone_offset,
+ const char *from_envelope, struct istream *input,
+ int want_mail);
+int mailbox_save_continue(struct mail_save_context *ctx);
+int mailbox_save_finish(struct mail_save_context *ctx, struct mail **mail_r);
+void mailbox_save_cancel(struct mail_save_context *ctx);
+
/* Copy given message. If dest_mail_r is non-NULL, the copied message can be
accessed using it. Note that setting it non-NULL may require mailbox
syncing, so don't give give it unless you need it. */
Index: proxy-mailbox.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/proxy-mailbox.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- proxy-mailbox.c 18 Jul 2004 02:25:07 -0000 1.9
+++ proxy-mailbox.c 22 Aug 2004 09:17:08 -0000 1.10
@@ -115,18 +115,19 @@
pbox->box->transaction_rollback(pt->ctx);
}
-static int _save(struct mailbox_transaction_context *t,
- const struct mail_full_flags *flags,
- time_t received_date, int timezone_offset,
- const char *from_envelope, struct istream *data,
- struct mail **mail_r)
+static struct mail_save_context *
+_save_init(struct mailbox_transaction_context *t,
+ const struct mail_full_flags *flags,
+ time_t received_date, int timezone_offset,
+ const char *from_envelope, struct istream *input, int want_mail)
{
struct proxy_mailbox_transaction_context *pt =
(struct proxy_mailbox_transaction_context *)t;
struct proxy_mailbox *pbox = (struct proxy_mailbox *)t->box;
- return pbox->box->save(pt->ctx, flags, received_date, timezone_offset,
- from_envelope, data, mail_r);
+ return pbox->box->save_init(pt->ctx, flags, received_date,
+ timezone_offset, from_envelope, input,
+ want_mail);
}
static int _copy(struct mailbox_transaction_context *t, struct mail *mail,
@@ -176,7 +177,10 @@
pb->transaction_commit = _transaction_commit;
pb->transaction_rollback = _transaction_rollback;
- pb->save = _save;
+ pb->save_init = _save_init;
+ pb->save_continue = box->save_continue;
+ pb->save_finish = box->save_finish;
+ pb->save_cancel = box->save_cancel;
pb->copy = _copy;
pb->is_inconsistent = _is_inconsistent;
- Previous message: [dovecot-cvs] dovecot/src/imap cmd-append.c,1.41,1.42
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-copy.c,
1.31, 1.32 maildir-save.c, 1.37, 1.38 maildir-storage.c, 1.82,
1.83 maildir-storage.h, 1.26, 1.27 maildir-transaction.c, 1.2, 1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list