[dovecot-cvs] dovecot/src/lib-storage proxy-mail-storage.c,NONE,1.1 proxy-mail-storage.h,NONE,1.1 proxy-mail.c,NONE,1.1 proxy-mail.h,NONE,1.1 proxy-mailbox.c,NONE,1.1 proxy-mailbox.h,NONE,1.1 Makefile.am,1.7,1.8

cras at procontrol.fi cras at procontrol.fi
Sat Jul 26 22:23:12 EEST 2003


Update of /home/cvs/dovecot/src/lib-storage
In directory danu:/tmp/cvs-serv29912

Modified Files:
	Makefile.am 
Added Files:
	proxy-mail-storage.c proxy-mail-storage.h proxy-mail.c 
	proxy-mail.h proxy-mailbox.c proxy-mailbox.h 
Log Message:
Added proxy classes for use with modules.



--- NEW FILE: proxy-mail-storage.c ---
/* Copyright (C) 2003 Timo Sirainen */

#include "lib.h"
#include "proxy-mail-storage.h"

static void _free(struct mail_storage *storage)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	return s->storage->free(s->storage);
}

static void _set_callbacks(struct mail_storage *storage,
			   struct mail_storage_callbacks *callbacks,
			   void *context)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	s->storage->set_callbacks(s->storage, callbacks, context);
}

static struct mailbox *_open_mailbox(struct mail_storage *storage,
				     const char *name,
				     enum mailbox_open_flags flags)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

        return s->storage->open_mailbox(s->storage, name, flags);
}

static int _create_mailbox(struct mail_storage *storage, const char *name,
			   int only_hierarchy)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	return s->storage->create_mailbox(s->storage, name, only_hierarchy);
}

static int _delete_mailbox(struct mail_storage *storage, const char *name)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	return s->storage->delete_mailbox(s->storage, name);
}

static int _rename_mailbox(struct mail_storage *storage, const char *oldname,
			   const char *newname)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	return s->storage->rename_mailbox(s->storage, oldname, newname);
}

static struct mailbox_list_context *
_list_mailbox_init(struct mail_storage *storage, const char *mask,
		   enum mailbox_list_flags flags, int *sorted)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	return s->storage->list_mailbox_init(s->storage, mask, flags, sorted);
}

static int _set_subscribed(struct mail_storage *storage,
			   const char *name, int set)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	return s->storage->set_subscribed(s->storage, name, set);
}

static int _get_mailbox_name_status(struct mail_storage *storage,
				    const char *name,
				    enum mailbox_name_status *status)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	return s->storage->get_mailbox_name_status(s->storage, name, status);
}

static const char *_get_last_error(struct mail_storage *storage,
				   int *syntax_error)
{
	struct proxy_mail_storage *s = (struct proxy_mail_storage *) storage;

	return s->storage->get_last_error(s->storage, syntax_error);
}

void proxy_mail_storage_init(struct proxy_mail_storage *proxy,
			     struct mail_storage *storage)
{
	struct mail_storage *ps = &proxy->proxy_storage;

	proxy->storage = storage;

	ps->name = storage->name;
	ps->hierarchy_sep = storage->hierarchy_sep;

	ps->create = storage->create;
	ps->autodetect = storage->autodetect;
	ps->list_mailbox_deinit = storage->list_mailbox_deinit;
	ps->list_mailbox_next = storage->list_mailbox_next;

	ps->free = _free;
	ps->set_callbacks = _set_callbacks;
	ps->open_mailbox = _open_mailbox;
	ps->create_mailbox = _create_mailbox;
	ps->delete_mailbox = _delete_mailbox;
	ps->rename_mailbox = _rename_mailbox;
	ps->list_mailbox_init = _list_mailbox_init;
	ps->set_subscribed = _set_subscribed;
	ps->get_mailbox_name_status = _get_mailbox_name_status;
	ps->get_last_error = _get_last_error;
}

--- NEW FILE: proxy-mail-storage.h ---
#ifndef __PROXY_MAIL_STORAGE_H
#define __PROXY_MAIL_STORAGE_H

#include "mail-storage.h"

struct proxy_mail_storage {
	struct mail_storage proxy_storage;
	struct mail_storage *storage;
};

void proxy_mail_storage_init(struct proxy_mail_storage *proxy,
			     struct mail_storage *storage);

#endif

--- NEW FILE: proxy-mail.c ---
/* Copyright (C) 2003 Timo Sirainen */

#include "lib.h"
#include "proxy-mail.h"

static const struct mail_full_flags *_get_flags(struct mail *mail)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_flags(p->mail);
}

static const struct message_part *_get_parts(struct mail *mail)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_parts(p->mail);
}

static time_t _get_received_date(struct mail *mail)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_received_date(p->mail);
}

static time_t _get_date(struct mail *mail, int *timezone)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_date(p->mail, timezone);
}

static uoff_t _get_size(struct mail *mail)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_size(p->mail);
}

static const char *_get_header(struct mail *mail, const char *field)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_header(p->mail, field);
}

static const struct message_address *
_get_address(struct mail *mail, const char *field)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_address(p->mail, field);
}

static const char *_get_first_mailbox(struct mail *mail, const char *field)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_first_mailbox(p->mail, field);
}

static struct istream *_get_stream(struct mail *mail,
				   struct message_size *hdr_size,
				   struct message_size *body_size)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_stream(p->mail, hdr_size, body_size);
}

static const char *_get_special(struct mail *mail, enum mail_fetch_field field)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->get_special(p->mail, field);
}

static int _update_flags(struct mail *mail, const struct mail_full_flags *flags,
			 enum modify_type modify_type)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->update_flags(p->mail, flags, modify_type);
}

static int _copy(struct mail *mail, struct mail_copy_context *ctx)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->copy(p->mail, ctx);
}

static int _expunge(struct mail *mail, struct mail_expunge_context *ctx,
		    unsigned int *seq_r, int notify)
{
	struct proxy_mail *p = (struct proxy_mail *) mail;

	return p->mail->expunge(p->mail, ctx, seq_r, notify);
}

void proxy_mail_init(struct proxy_mail *proxy, struct mail *mail)
{
	struct mail *pm = &proxy->proxy_mail;

	proxy->mail = mail;

	pm->box = mail->box;

	pm->get_flags = _get_flags;
	pm->get_parts = _get_parts;
	pm->get_received_date = _get_received_date;
	pm->get_date = _get_date;
	pm->get_size = _get_size;
	pm->get_header = _get_header;
	pm->get_address = _get_address;
	pm->get_first_mailbox = _get_first_mailbox;
	pm->get_stream = _get_stream;
	pm->get_special = _get_special;
	pm->update_flags = _update_flags;
	pm->copy = _copy;
	pm->expunge = _expunge;
}

void proxy_mail_next(struct proxy_mail *proxy)
{
	proxy->proxy_mail.seq = proxy->mail->seq;
	proxy->proxy_mail.uid = proxy->mail->uid;

	proxy->proxy_mail.has_nuls = proxy->mail->has_nuls;
	proxy->proxy_mail.has_no_nuls = proxy->mail->has_no_nuls;
}

--- NEW FILE: proxy-mail.h ---
#ifndef __PROXY_MAIL_H
#define __PROXY_MAIL_H

#include "mail-storage.h"

struct proxy_mail {
	struct mail proxy_mail;
	struct mail *mail;
};

void proxy_mail_init(struct proxy_mail *proxy, struct mail *mail);
void proxy_mail_next(struct proxy_mail *proxy);

#endif

--- NEW FILE: proxy-mailbox.c ---
/* Copyright (C) 2003 Timo Sirainen */

#include "lib.h"
#include "proxy-mailbox.h"

static int _is_readonly(struct mailbox *box)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->is_readonly(p->box);
}

static int _allow_new_custom_flags(struct mailbox *box)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->allow_new_custom_flags(p->box);
}

static int _close(struct mailbox *box)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->close(p->box);
}

static int _lock(struct mailbox *box, enum mailbox_lock_type lock_type)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->lock(p->box, lock_type);
}

static int _get_status(struct mailbox *box, enum mailbox_status_items items,
		       struct mailbox_status *status)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->get_status(p->box, items, status);
}

static int _sync(struct mailbox *box, enum mail_sync_flags flags)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->sync(p->box, flags);
}

static void _auto_sync(struct mailbox *box, enum mailbox_sync_type sync_type,
		       unsigned int min_newmail_notify_interval)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	p->box->auto_sync(p->box, sync_type, min_newmail_notify_interval);
}

static struct mail_fetch_context *
_fetch_init(struct mailbox *box, enum mail_fetch_field wanted_fields,
	    const char *messageset, int uidset)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->fetch_init(p->box, wanted_fields, messageset, uidset);
}

static struct mail *_fetch_uid(struct mailbox *box, unsigned int uid,
			       enum mail_fetch_field wanted_fields)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->fetch_uid(p->box, uid, wanted_fields);
}

static struct mail *_fetch_seq(struct mailbox *box, unsigned int seq,
			       enum mail_fetch_field wanted_fields)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->fetch_uid(p->box, seq, wanted_fields);
}

static int _search_get_sorting(struct mailbox *box,
			       enum mail_sort_type *sort_program)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->search_get_sorting(p->box, sort_program);
}

static struct mail_search_context *
_search_init(struct mailbox *box, const char *charset,
	     struct mail_search_arg *args,
	     const enum mail_sort_type *sort_program,
	     enum mail_fetch_field wanted_fields,
	     const char *const wanted_headers[])
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->search_init(p->box, charset, args, sort_program,
				   wanted_fields, wanted_headers);
}

static struct mail_save_context *
_save_init(struct mailbox *box, int transaction)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->save_init(p->box, transaction);
}

static struct mail_copy_context *_copy_init(struct mailbox *box)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->copy_init(p->box);
}

static struct mail_expunge_context *
_expunge_init(struct mailbox *box, enum mail_fetch_field wanted_fields,
	      int expunge_all)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->expunge_init(p->box, wanted_fields, expunge_all);
}

static int _is_inconsistency_error(struct mailbox *box)
{
	struct proxy_mailbox *p = (struct proxy_mailbox *) box;

	return p->box->is_inconsistency_error(p->box);
}

void proxy_mailbox_init(struct proxy_mailbox *proxy, struct mailbox *box)
{
	struct mailbox *pb = &proxy->proxy_box;

	proxy->box = box;

	pb->name = box->name;
	pb->storage = box->storage;

	pb->fetch_deinit = box->fetch_deinit;
	pb->fetch_next = box->fetch_next;
	pb->search_deinit = box->search_deinit;
	pb->search_next = box->search_next;
	pb->save_deinit = box->save_deinit;
	pb->save_next = box->save_next;
	pb->copy_deinit = box->copy_deinit;
	pb->expunge_deinit = box->expunge_deinit;
	pb->expunge_fetch_next = box->expunge_fetch_next;

	pb->is_readonly = _is_readonly;
	pb->allow_new_custom_flags = _allow_new_custom_flags;
	pb->close = _close;
	pb->lock = _lock;
	pb->get_status = _get_status;
	pb->sync = _sync;
	pb->auto_sync = _auto_sync;
	pb->fetch_init = _fetch_init;
	pb->fetch_uid = _fetch_uid;
	pb->fetch_seq = _fetch_seq;
	pb->search_get_sorting = _search_get_sorting;
	pb->search_init = _search_init;
	pb->save_init = _save_init;
	pb->copy_init = _copy_init;
	pb->expunge_init = _expunge_init;
	pb->is_inconsistency_error = _is_inconsistency_error;
}

--- NEW FILE: proxy-mailbox.h ---
#ifndef __PROXY_MAILBOX_H
#define __PROXY_MAILBOX_H

#include "mail-storage.h"

struct proxy_mailbox {
	struct mailbox proxy_box;
	struct mailbox *box;
};

void proxy_mailbox_init(struct proxy_mailbox *proxy, struct mailbox *box);

#endif

Index: Makefile.am
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/Makefile.am,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- Makefile.am	7 May 2003 12:06:47 -0000	1.7
+++ Makefile.am	26 Jul 2003 18:23:10 -0000	1.8
@@ -10,9 +10,15 @@
 libstorage_a_SOURCES = \
 	mail-save.c \
 	mail-search.c \
-	mail-storage.c
+	mail-storage.c \
+	proxy-mail.c \
+	proxy-mail-storage.c \
+	proxy-mailbox.c
 
 noinst_HEADERS = \
 	mail-save.h \
 	mail-search.h \
-	mail-storage.h
+	mail-storage.h \
+	proxy-mail.h \
+	proxy-mail-storage.h \
+	proxy-mailbox.h



More information about the dovecot-cvs mailing list