Mercurial > dovecot > original-hg > dovecot-1.2
view src/lib-storage/mailbox-list.h @ 4891:6ab2712f1a93 HEAD
Only imap binary was actually working.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 10 Dec 2006 14:35:02 +0200 |
parents | f1d77064884c |
children | 204d7edc7cdc |
line wrap: on
line source
#ifndef __MAILBOX_LIST_H #define __MAILBOX_LIST_H struct mailbox_list; struct mailbox_list_iterate_context; enum mailbox_list_flags { /* Print debugging information while initializing the driver */ MAILBOX_LIST_FLAG_DEBUG = 0x01, /* This mailbox list contains INBOX. Match case-insensitively for it. */ MAILBOX_LIST_FLAG_INBOX = 0x02, /* Allow full filesystem access with absolute or relative paths. */ MAILBOX_LIST_FLAG_FULL_FS_ACCESS = 0x04 }; enum mailbox_info_flags { MAILBOX_NOSELECT = 0x001, MAILBOX_NONEXISTENT = 0x002, MAILBOX_CHILDREN = 0x004, MAILBOX_NOCHILDREN = 0x008, MAILBOX_NOINFERIORS = 0x010, MAILBOX_MARKED = 0x020, MAILBOX_UNMARKED = 0x040 }; enum mailbox_name_status { MAILBOX_NAME_EXISTS, MAILBOX_NAME_VALID, MAILBOX_NAME_INVALID, MAILBOX_NAME_NOINFERIORS }; enum mailbox_list_iter_flags { /* List only subscribed mailboxes */ MAILBOX_LIST_ITER_SUBSCRIBED = 0x01, /* Don't return any flags unless it can be done without cost */ MAILBOX_LIST_ITER_FAST_FLAGS = 0x02, /* Return children flags */ MAILBOX_LIST_ITER_CHILDREN = 0x04 }; enum mailbox_list_path_type { /* Return directory's path (eg. /home/user/mail) */ MAILBOX_LIST_PATH_TYPE_DIR, /* Return mailbox path (dir + maildir_name) */ MAILBOX_LIST_PATH_TYPE_MAILBOX, /* Return control directory */ MAILBOX_LIST_PATH_TYPE_CONTROL, /* Return index file directory */ MAILBOX_LIST_PATH_TYPE_INDEX }; enum mailbox_list_file_type { MAILBOX_LIST_FILE_TYPE_UNKNOWN = 0, MAILBOX_LIST_FILE_TYPE_FILE, MAILBOX_LIST_FILE_TYPE_DIR, MAILBOX_LIST_FILE_TYPE_SYMLINK, MAILBOX_LIST_FILE_TYPE_OTHER }; struct mailbox_list_settings { const char *root_dir; const char *index_dir; const char *control_dir; const char *inbox_path; const char *subscription_fname; /* If non-empty, it means that mails exist in a maildir_name subdirectory. eg. if you have a directory containing directories: mail/ mail/foo/ mail/foo/Maildir If mailbox_name is empty, you have mailboxes "mail", "mail/foo" and "mail/foo/Maildir". If mailbox_name is "Maildir", you have a non-selectable mailbox "mail" and a selectable mailbox "mail/foo". */ const char *maildir_name; /* If mailbox index is used, use these settings for it (pointers, so they're set to NULL after init is finished): */ const enum mail_storage_flags *mail_storage_flags; const enum file_lock_method *lock_method; }; struct mailbox_info { const char *name; enum mailbox_info_flags flags; }; /* Returns -1 if error, 0 if it's not a valid mailbox, 1 if it is. flags may be updated (especially the children flags). */ typedef int mailbox_list_is_mailbox_t(const char *dir, const char *fname, enum mailbox_list_file_type type, enum mailbox_list_iter_flags iter_flags, enum mailbox_info_flags *flags_r, void *context); /* register all drivers */ void mailbox_list_register_all(void); void mailbox_list_register(const struct mailbox_list *list); void mailbox_list_unregister(const struct mailbox_list *list); /* Returns 0 if ok, -1 if initialization failed. */ int mailbox_list_init(const char *driver, const struct mailbox_list_settings *set, enum mailbox_list_flags flags, mailbox_list_is_mailbox_t *callback, void *context, struct mailbox_list **list_r, const char **error_r); void mailbox_list_deinit(struct mailbox_list *list); const char *mailbox_list_get_driver_name(struct mailbox_list *list); char mailbox_list_get_hierarchy_sep(struct mailbox_list *list); /* Returns TRUE if the name doesn't contain any invalid characters. The create name check can be more strict. */ bool mailbox_list_is_valid_mask(struct mailbox_list *list, const char *mask); bool mailbox_list_is_valid_existing_name(struct mailbox_list *list, const char *name); bool mailbox_list_is_valid_create_name(struct mailbox_list *list, const char *name); /* Return full path for the given mailbox name. The name must be a valid existing mailbox name, or NULL to get the root directory. For INDEX=MEMORY it returns "" as the path. */ const char *mailbox_list_get_path(struct mailbox_list *list, const char *name, enum mailbox_list_path_type type); /* Returns mailbox name status */ int mailbox_list_get_mailbox_name_status(struct mailbox_list *list, const char *name, enum mailbox_name_status *status); /* Returns a prefix that temporary files should use without conflicting with the namespace. */ const char *mailbox_list_get_temp_prefix(struct mailbox_list *list); /* Returns a single mask from given reference and mask. */ const char *mailbox_list_join_refmask(struct mailbox_list *list, const char *ref, const char *mask); /* Initialize new mailbox list request. mask may contain '%' and '*' wildcards as defined by RFC-3501. */ struct mailbox_list_iterate_context * mailbox_list_iter_init(struct mailbox_list *list, const char *mask, enum mailbox_list_iter_flags flags); /* Get next mailbox. Returns the mailbox name */ struct mailbox_info * mailbox_list_iter_next(struct mailbox_list_iterate_context *ctx); /* Deinitialize mailbox list request. Returns FALSE if some error occurred while listing. */ int mailbox_list_iter_deinit(struct mailbox_list_iterate_context **ctx); /* Subscribe/unsubscribe mailbox. There should be no error when subscribing to already subscribed mailbox. Subscribing to unexisting mailboxes is optional. */ int mailbox_list_set_subscribed(struct mailbox_list *list, const char *name, bool set); /* Returns the error message of last occurred error. */ const char *mailbox_list_get_last_error(struct mailbox_list *list, bool *temporary_error_r); #endif