diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-11-10 11:34:01 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-11-10 11:34:01 +0000 |
commit | 55e0fbee9e680aa2572284e0ed265d28b3400558 (patch) | |
tree | 6db72e84d40b5645d752754488edb95279c29e54 | |
parent | 60ae1cd26803105cd9993711450e1b5877e827af (diff) | |
download | mailutils-55e0fbee9e680aa2572284e0ed265d28b3400558.tar.gz mailutils-55e0fbee9e680aa2572284e0ed265d28b3400558.tar.bz2 |
* Makefile.am, configure.ac: Add maidag.
* frm/common.c, imap4d/sync.c, libsieve/runtime.c,
mh/scan.c: Update declaration of observable actions .
* imap4d/select.c, imap4d/status.c, mh/anno.c, mh/forw.c,
mh/repl.c: Use mu_mailbox_sync instead of
mu_mailbox_save_attributes.
* include/mailutils/mailbox.h (mu_mailbox_sync): New function.
(mu_mailbox_save_attributes): Deprecated.
* include/mailutils/message.h (mu_message_get_qid)
(mu_message_set_qid): New functions.
* include/mailutils/observer.h (MU_EVT_MESSAGE_APPEND): New event.
(mu_observer_set_action_data): New function. Registers
action-specific data.
(mu_observable_notify): Get call-specific data as the third
argument.
* include/mailutils/types.hin (mu_message_qid_t): New data type.
* libproto/imap/folder.c, libproto/imap/mbox.c,
libproto/include/amd.h, libproto/maildir/mbox.c,
libproto/mailer/sendmail.c, libproto/mailer/smtp.c,
libproto/mbox/mboxscan.c, libproto/mh/mbox.c,
libproto/nntp/mbox.c, libproto/pop/mbox.c, mailbox/folder.c,
mailbox/mailer.c : Update calls to mu_observable_notify.
* libproto/include/mailbox0.h (struct _mu_mailbox): Rename
_save_attributes to _sync.
* mailbox/amd.c: Likewise
(_quick_get_message): New member.
(MAILBOX_NOTIFY): Remove.
* libproto/include/message0.h (struct _mu_message): New member
_get_qid.
* libproto/include/observer0.h (struct _mu_observer): New member
_action_data.
* libproto/mbox/mbox.c: Implement mbox_message_qid. Update calls
to mu_observable_notify.
(mbox_append_message): Report MU_EVT_MESSAGE_APPEND
* mailbox/observer.c (mu_observer_destroy): Call _destroy with
_action_data as its third argument.
(mu_observer_action, mu_observable_notify): Takes third argument
(call data)
(mu_observer_set_action, mu_observer_set_destroy): Update signature.
(mu_observer_set_action_data): New function.
* libproto/mbox/mbox0.h, mail.local/main.c: Minor change.
* mail.local/Makefile.am (mail_local_LDADD): Add MU_LIB_MAILER
* mailbox/file_stream.c (_file_open): Fix handling of
MU_STREAM_APPEND. Remove assertion.
* mailbox/mailbox.c (mu_mailbox_quick_get_message): New function
(mu_mailbox_sync): New function
(mu_mailbox_get_size): Implement brute-force approach in case the
mailbox does not provide a method.
* mailbox/message.c (mu_message_get_qid, mu_message_set_qid): New
function.
* maildag/: New directory. A general-purpose mail delivery agent.
* maildag/deliver.c: New file.
* maildag/lmtp.c: New file.
* maildag/maidag.c: New file.
* maildag/maidag.h: New file.
* maildag/mailtmp.c: New file.
* maildag/mailquota.c: New file.
* maildag/script.c: New file.
* maildag/util.c: New file.
* maildag/Makefile.am: New file.
* maildag/.cvsignore: New file.
59 files changed, 19425 insertions, 12762 deletions
@@ -1,3 +1,73 @@ +2007-11-10 Sergey Poznyakoff <gray@gnu.org.ua> + + * Makefile.am, configure.ac: Add maidag. + * frm/common.c, imap4d/sync.c, libsieve/runtime.c, + mh/scan.c: Update declaration of observable actions. + * imap4d/select.c, imap4d/status.c, mh/anno.c, mh/forw.c, + mh/repl.c: Use mu_mailbox_sync instead of + mu_mailbox_save_attributes. + * include/mailutils/mailbox.h (mu_mailbox_sync): New function + (mu_mailbox_save_attributes): Deprecated. + * include/mailutils/message.h (mu_message_get_qid) + (mu_message_set_qid): New functions. + * include/mailutils/observer.h (MU_EVT_MESSAGE_APPEND): New event. + (mu_observer_set_action_data): New function. Registers + action-specific data. + (mu_observable_notify): Get call-specific data as the third + argument. + * include/mailutils/types.hin (mu_message_qid_t): New data type. + * libproto/imap/folder.c, libproto/imap/mbox.c, + libproto/include/amd.h, libproto/maildir/mbox.c, + libproto/mailer/sendmail.c, libproto/mailer/smtp.c, + libproto/mbox/mboxscan.c, libproto/mh/mbox.c, + libproto/nntp/mbox.c, libproto/pop/mbox.c, mailbox/folder.c, + mailbox/mailer.c : Update calls to mu_observable_notify. + * libproto/include/mailbox0.h (struct _mu_mailbox): Rename + _save_attributes to _sync. + * mailbox/amd.c: Likewise. + (_quick_get_message): New member. + (MAILBOX_NOTIFY): Remove. + * libproto/include/message0.h (struct _mu_message): New member + _get_qid. + * libproto/include/observer0.h (struct _mu_observer): New member + _action_data. + * libproto/mbox/mbox.c: Implement mbox_message_qid. Update calls + to mu_observable_notify. + (mbox_append_message): Report MU_EVT_MESSAGE_APPEND. + * mailbox/observer.c (mu_observer_destroy): Call _destroy with + _action_data as its third argument. + (mu_observer_action, mu_observable_notify): Takes third argument + (call data) + (mu_observer_set_action, mu_observer_set_destroy): Update signature. + (mu_observer_set_action_data): New function. + + * libproto/mbox/mbox0.h, mail.local/main.c: Minor change + + * mail.local/Makefile.am (mail_local_LDADD): Add MU_LIB_MAILER + + * mailbox/file_stream.c (_file_open): Fix handling of + MU_STREAM_APPEND. Remove assertion. + + * mailbox/mailbox.c (mu_mailbox_quick_get_message): New function + (mu_mailbox_sync): New function. + (mu_mailbox_get_size): Implement brute-force approach in case the + mailbox does not provide a method. + + * mailbox/message.c (mu_message_get_qid, mu_message_set_qid): New + function. + + * maildag/: New directory. A general-purpose mail delivery agent. + * maildag/deliver.c: New file. + * maildag/lmtp.c: New file. + * maildag/maidag.c: New file. + * maildag/maidag.h: New file. + * maildag/mailtmp.c: New file. + * maildag/mailquota.c: New file. + * maildag/script.c: New file. + * maildag/util.c: New file. + * maildag/Makefile.am: New file. + * maildag/.cvsignore: New file. + 2007-11-08 Sergey Poznyakoff <gray@gnu.org.ua> * mailbox/cfg_lexer.c: Do not use obstack. diff --git a/Makefile.am b/Makefile.am index 6ed251593..f1b70f00b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -39,6 +39,7 @@ SUBDIRS = \ frm\ pop3d\ imap4d\ + maidag\ mail\ sieve\ scripts\ diff --git a/configure.ac b/configure.ac index 56c87c073..739734621 100644 --- a/configure.ac +++ b/configure.ac @@ -1169,6 +1169,7 @@ AC_CONFIG_FILES([Makefile libproto/include/Makefile libsieve/Makefile libsieve/extensions/Makefile + maidag/Makefile mail/Makefile mail/testsuite/Makefile mail.local/Makefile diff --git a/frm/common.c b/frm/common.c index 4ec73c577..9ce88791d 100644 --- a/frm/common.c +++ b/frm/common.c @@ -421,7 +421,7 @@ static size_t msg_index; /* Index (1-based) of the current /* Observable action is being called on discovery of each message. */ /* FIXME: The format of the display is poorly done, please correct. */ static int -action (mu_observer_t o, size_t type) +action (mu_observer_t o, size_t type, void *data, void *action_data) { int status; diff --git a/imap4d/select.c b/imap4d/select.c index c160d458c..236cdbfae 100644 --- a/imap4d/select.c +++ b/imap4d/select.c @@ -49,7 +49,7 @@ imap4d_select0 (struct imap4d_command *command, char *arg, int flags) currently selected mailbox without doing an expunge. */ if (mbox) { - mu_mailbox_save_attributes (mbox); + mu_mailbox_sync (mbox); mu_mailbox_close (mbox); mu_mailbox_destroy (&mbox); /* Destroy the old uid table. */ diff --git a/imap4d/status.c b/imap4d/status.c index 5e8f03408..d38418ca9 100644 --- a/imap4d/status.c +++ b/imap4d/status.c @@ -77,7 +77,7 @@ imap4d_status (struct imap4d_command *command, char *arg) /* We may be opening the current mailbox, so make sure the attributes are preserved */ - mu_mailbox_save_attributes (mbox); + mu_mailbox_sync (mbox); status = mu_mailbox_create_default (&smbox, mailbox_name); if (status == 0) diff --git a/imap4d/sync.c b/imap4d/sync.c index 8fdd257b2..51d2aa808 100644 --- a/imap4d/sync.c +++ b/imap4d/sync.c @@ -276,7 +276,7 @@ imap4d_sync_flags (size_t msgno) static int mailbox_corrupt; static int -action (mu_observer_t observer, size_t type) +action (mu_observer_t observer, size_t type, void *data, void *action_data) { switch (type) { diff --git a/include/mailutils/mailbox.h b/include/mailutils/mailbox.h index 64ad7f8e1..773b0d966 100644 --- a/include/mailutils/mailbox.h +++ b/include/mailutils/mailbox.h @@ -52,13 +52,18 @@ extern int mu_mailbox_uidvalidity (mu_mailbox_t, unsigned long *); extern int mu_mailbox_uidnext (mu_mailbox_t, size_t *); /* Messages. */ -extern int mu_mailbox_get_message (mu_mailbox_t, size_t msgno, mu_message_t *); +extern int mu_mailbox_get_message (mu_mailbox_t, size_t msgno, + mu_message_t *); +extern int mu_mailbox_quick_get_message(mu_mailbox_t, mu_message_qid_t, + mu_message_t *); extern int mu_mailbox_append_message (mu_mailbox_t, mu_message_t); extern int mu_mailbox_messages_count (mu_mailbox_t, size_t *); extern int mu_mailbox_messages_recent (mu_mailbox_t, size_t *); extern int mu_mailbox_message_unseen (mu_mailbox_t, size_t *); extern int mu_mailbox_expunge (mu_mailbox_t); -extern int mu_mailbox_save_attributes (mu_mailbox_t); +extern int mu_mailbox_sync (mu_mailbox_t); +extern int mu_mailbox_save_attributes (mu_mailbox_t) + __attribute__ ((deprecated)); /* Update and scanning. */ extern int mu_mailbox_get_size (mu_mailbox_t, mu_off_t *size); diff --git a/include/mailutils/message.h b/include/mailutils/message.h index 37ef9cc94..a8482f340 100644 --- a/include/mailutils/message.h +++ b/include/mailutils/message.h @@ -29,89 +29,102 @@ extern "C" { /* A message is considered to be a container for: mu_header_t, mu_body_t, and its mu_attribute_t. */ -extern int mu_message_create (mu_message_t *, void *owner); -extern void mu_message_destroy (mu_message_t *, void *owner); +extern int mu_message_create (mu_message_t *, void *owner); +extern void mu_message_destroy (mu_message_t *, void *owner); -extern int mu_message_create_copy (mu_message_t *to, mu_message_t from); +extern int mu_message_create_copy (mu_message_t *to, mu_message_t from); -extern void * mu_message_get_owner (mu_message_t); -extern int mu_message_is_modified (mu_message_t); -extern int mu_message_clear_modified (mu_message_t); -extern int mu_message_get_mailbox (mu_message_t, mu_mailbox_t *); -extern int mu_message_set_mailbox (mu_message_t, mu_mailbox_t, void *); +extern void * mu_message_get_owner (mu_message_t); +extern int mu_message_is_modified (mu_message_t); +extern int mu_message_clear_modified (mu_message_t); +extern int mu_message_get_mailbox (mu_message_t, mu_mailbox_t *); +extern int mu_message_set_mailbox (mu_message_t, mu_mailbox_t, void *); -extern int mu_message_ref (mu_message_t); -#define mu_message_unref(msg) mu_message_destroy (&msg, NULL) +extern int mu_message_ref (mu_message_t); +#define mu_message_unref(msg) mu_message_destroy (&msg, NULL) -extern int mu_message_get_envelope (mu_message_t, mu_envelope_t *); -extern int mu_message_set_envelope (mu_message_t, mu_envelope_t, void *); +extern int mu_message_get_envelope (mu_message_t, mu_envelope_t *); +extern int mu_message_set_envelope (mu_message_t, mu_envelope_t, void *); -extern int mu_message_get_header (mu_message_t, mu_header_t *); -extern int mu_message_set_header (mu_message_t, mu_header_t, void *); +extern int mu_message_get_header (mu_message_t, mu_header_t *); +extern int mu_message_set_header (mu_message_t, mu_header_t, void *); -extern int mu_message_get_body (mu_message_t, mu_body_t *); -extern int mu_message_set_body (mu_message_t, mu_body_t, void *); +extern int mu_message_get_body (mu_message_t, mu_body_t *); +extern int mu_message_set_body (mu_message_t, mu_body_t, void *); -extern int mu_message_get_stream (mu_message_t, mu_stream_t *); -extern int mu_message_set_stream (mu_message_t, mu_stream_t, void *); +extern int mu_message_get_stream (mu_message_t, mu_stream_t *); +extern int mu_message_set_stream (mu_message_t, mu_stream_t, void *); -extern int mu_message_get_attribute (mu_message_t, mu_attribute_t *); -extern int mu_message_set_attribute (mu_message_t, mu_attribute_t, void *); +extern int mu_message_get_attribute (mu_message_t, mu_attribute_t *); +extern int mu_message_set_attribute (mu_message_t, mu_attribute_t, void *); -extern int mu_message_get_observable (mu_message_t, mu_observable_t *); +extern int mu_message_get_observable (mu_message_t, mu_observable_t *); -extern int mu_message_is_multipart (mu_message_t, int *); +extern int mu_message_is_multipart (mu_message_t, int *); extern int mu_message_set_is_multipart (mu_message_t, - int (*_is_multipart) (mu_message_t, int *), - void *); + int (*_is_multipart) (mu_message_t, + int *), + void *); -extern int mu_message_size (mu_message_t, size_t *); -extern int mu_message_set_size (mu_message_t, - int (*_size) (mu_message_t, size_t *), - void *owner); +extern int mu_message_size (mu_message_t, size_t *); +extern int mu_message_set_size (mu_message_t, + int (*_size) (mu_message_t, size_t *), + void *owner); -extern int mu_message_lines (mu_message_t, size_t *); -extern int mu_message_set_lines (mu_message_t, - int (*_lines) (mu_message_t, size_t *), - void *owner); +extern int mu_message_lines (mu_message_t, size_t *); +extern int mu_message_set_lines (mu_message_t, + int (*_lines) (mu_message_t, size_t *), + void *owner); -extern int mu_message_get_num_parts (mu_message_t, size_t *nparts); +extern int mu_message_get_num_parts (mu_message_t, size_t *nparts); extern int mu_message_set_get_num_parts (mu_message_t, - int (*_get_num_parts) (mu_message_t, - size_t *), - void *owner); - -extern int mu_message_get_part (mu_message_t, size_t, mu_message_t *); -extern int mu_message_set_get_part (mu_message_t, - int (*_get_part) (mu_message_t, size_t, - mu_message_t *), - void *owner); - -extern int mu_message_get_uidl (mu_message_t, char *, size_t, size_t *); -extern int mu_message_set_uidl (mu_message_t, - int (*_get_uidl) (mu_message_t, char *, - size_t, size_t *), - void *owner); -extern int mu_message_get_uid (mu_message_t, size_t *); -extern int mu_message_set_uid (mu_message_t, - int (*_get_uid) (mu_message_t, size_t *), - void *owner); - + int (*_get_num_parts) (mu_message_t, + size_t *), + void *owner); + +extern int mu_message_get_part (mu_message_t, size_t, mu_message_t *); +extern int mu_message_set_get_part (mu_message_t, + int (*_get_part) (mu_message_t, size_t, + mu_message_t *), + void *owner); + +extern int mu_message_get_uidl (mu_message_t, char *, size_t, size_t *); +extern int mu_message_set_uidl (mu_message_t, + int (*_get_uidl) (mu_message_t, + char *, + size_t, size_t *), + void *owner); + +extern int mu_message_get_uid (mu_message_t, size_t *); +extern int mu_message_set_uid (mu_message_t, + int (*_get_uid) (mu_message_t, + size_t *), + void *owner); + +extern int mu_message_get_qid (mu_message_t, mu_message_qid_t *); +extern int mu_message_set_qid (mu_message_t, + int (*_get_qid) (mu_message_t, + mu_message_qid_t *), + void *owner); + /* misc functions */ extern int mu_message_create_attachment (const char *content_type, - const char *encoding, - const char *filename, - mu_message_t *newmsg); + const char *encoding, + const char *filename, + mu_message_t *newmsg); extern int mu_message_save_attachment (mu_message_t msg, - const char *filename, void **data); -extern int mu_message_encapsulate (mu_message_t msg, mu_message_t *newmsg, void **data); -extern int mu_message_unencapsulate (mu_message_t msg, mu_message_t *newmsg, void **data); - -extern int mu_message_get_attachment_name (mu_message_t, char *name, size_t bufsz, size_t* sz); + const char *filename, void **data); +extern int mu_message_encapsulate (mu_message_t msg, mu_message_t *newmsg, + void **data); +extern int mu_message_unencapsulate (mu_message_t msg, mu_message_t *newmsg, + void **data); + +extern int mu_message_get_attachment_name (mu_message_t, char *name, + size_t bufsz, size_t* sz); extern int mu_message_aget_attachment_name (mu_message_t, char **name); extern int mu_message_save_to_mailbox (mu_message_t msg, mu_ticket_t ticket, - mu_debug_t debug, const char *toname); + mu_debug_t debug, const char *toname); extern int mu_stream_to_message (mu_stream_t instream, mu_message_t *pmsg); diff --git a/include/mailutils/observer.h b/include/mailutils/observer.h index f4f8f3f22..8e6c537fe 100644 --- a/include/mailutils/observer.h +++ b/include/mailutils/observer.h @@ -24,36 +24,42 @@ #ifdef __cplusplus extern "C" { #endif - -#define MU_EVT_MAILBOX_DESTROY 0x001 -#define MU_EVT_FOLDER_DESTROY 0x002 -#define MU_EVT_MAILER_DESTROY 0x004 -#define MU_EVT_MESSAGE_DESTROY 0x008 -#define MU_EVT_MESSAGE_ADD 0x010 -#define MU_EVT_MAILBOX_PROGRESS 0x020 -#define MU_EVT_AUTHORITY_FAILED 0x030 -#define MU_EVT_MAILBOX_CORRUPT 0x040 -#define MU_EVT_MAILER_MESSAGE_SENT 0x080 - + /* Call data type: */ +#define MU_EVT_MAILBOX_DESTROY 0x001 /* mu_mailbox_t */ +#define MU_EVT_FOLDER_DESTROY 0x002 /* mu_folder_t */ +#define MU_EVT_MAILER_DESTROY 0x004 /* mu_mailer_t */ +#define MU_EVT_MESSAGE_DESTROY 0x008 /* mu_message_t */ +#define MU_EVT_MESSAGE_ADD 0x010 /* size_t *: FIXME */ +#define MU_EVT_MAILBOX_PROGRESS 0x020 /* NULL: FIXME? */ +#define MU_EVT_AUTHORITY_FAILED 0x030 /* NULL */ +#define MU_EVT_MAILBOX_CORRUPT 0x040 /* mu_mailbox_t */ +#define MU_EVT_MAILER_MESSAGE_SENT 0x080 /* mu_message_t */ +#define MU_EVT_MESSAGE_APPEND 0x100 /* mu_message_qid_t: FIXME */ + #define MU_OBSERVER_NO_CHECK 1 extern int mu_observer_create (mu_observer_t *, void *owner); extern void mu_observer_destroy (mu_observer_t *, void *owner); -extern void * mu_observer_get_owner (mu_observer_t); -extern int mu_observer_action (mu_observer_t, size_t type); +extern void * mu_observer_get_owner(mu_observer_t); +extern int mu_observer_action (mu_observer_t, size_t type, void *data); extern int mu_observer_set_action (mu_observer_t, - int (*_action) (mu_observer_t, size_t), - void *owner); + int (*_action) (mu_observer_t, + size_t, void *, void *), + void *owner); +extern int mu_observer_set_action_data (mu_observer_t, void *data, + void *owner); extern int mu_observer_set_destroy (mu_observer_t, - int (*_destroy) (mu_observer_t), void *owner); + int (*_destroy) (mu_observer_t, void *), + void *owner); extern int mu_observer_set_flags (mu_observer_t, int flags); extern int mu_observable_create (mu_observable_t *, void *owner); extern void mu_observable_destroy (mu_observable_t *, void *owner); extern void * mu_observable_get_owner (mu_observable_t); -extern int mu_observable_attach (mu_observable_t, size_t type, mu_observer_t observer); +extern int mu_observable_attach (mu_observable_t, size_t type, + mu_observer_t observer); extern int mu_observable_detach (mu_observable_t, mu_observer_t observer); -extern int mu_observable_notify (mu_observable_t, int type); +extern int mu_observable_notify (mu_observable_t, int type, void *data); #ifdef __cplusplus } diff --git a/include/mailutils/types.hin b/include/mailutils/types.hin index fc4762fa4..e734b739d 100644 --- a/include/mailutils/types.hin +++ b/include/mailutils/types.hin @@ -1,4 +1,4 @@ -/* GNU Mailutils -- a suite of utilities for electronic mail +/* GNU Mailutils -- a suite of utilities for electronic mail -*- c -*- Copyright (C) 1999, 2000, 2001, 2005, 2007 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or @@ -99,6 +99,7 @@ typedef struct _mu_url *mu_url_t; typedef struct _mu_wicket *mu_wicket_t; typedef void *mu_transport_t; typedef struct _mu_assoc *mu_assoc_t; +typedef char *mu_message_qid_t; #define MU_FOLDER_ATTRIBUTE_DIRECTORY 0x001 #define MU_FOLDER_ATTRIBUTE_FILE 0x002 diff --git a/libproto/imap/folder.c b/libproto/imap/folder.c index 7d2bcd294..534003046 100644 --- a/libproto/imap/folder.c +++ b/libproto/imap/folder.c |