diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib-storage/index/index-attachment.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/lib-storage/index/index-attachment.h b/src/lib-storage/index/index-attachment.h new file mode 100644 index 0000000..a52f158 --- /dev/null +++ b/src/lib-storage/index/index-attachment.h @@ -0,0 +1,52 @@ +#ifndef INDEX_ATTACHMENT_H +#define INDEX_ATTACHMENT_H + +#include "sha1.h" + +struct fs; +struct mail_save_context; +struct mail_storage; + +struct mail_attachment_extref { + /* path without attachment_dir/ prefix */ + const char *path; + /* offset in input stream where part begins */ + uoff_t start_offset; + uoff_t size; + + /* If non-zero, this attachment was saved as base64-decoded and it + need to be encoded back before presenting it to client. Each line + (except last one) consists of this many base64 blocks (4 chars of + base64 encoded data). */ + unsigned int base64_blocks_per_line; + /* Line feeds are CRLF instead of LF */ + bool base64_have_crlf; +}; +ARRAY_DEFINE_TYPE(mail_attachment_extref, struct mail_attachment_extref); + +void index_attachment_save_begin(struct mail_save_context *ctx, + struct fs *fs, struct istream *input); +int index_attachment_save_continue(struct mail_save_context *ctx); +int index_attachment_save_finish(struct mail_save_context *ctx); +void index_attachment_save_free(struct mail_save_context *ctx); +const ARRAY_TYPE(mail_attachment_extref) * +index_attachment_save_get_extrefs(struct mail_save_context *ctx); + +/* Delete a given attachment name from storage + (name is same as mail_attachment_extref.name). */ +int index_attachment_delete(struct mail_storage *storage, + struct fs *fs, const char *name); + +void index_attachment_append_extrefs(string_t *str, + const ARRAY_TYPE(mail_attachment_extref) *extrefs); +/* Parse extrefs value to given array. Names are allocated from the + given pool. */ +bool index_attachment_parse_extrefs(const char *line, pool_t pool, + ARRAY_TYPE(mail_attachment_extref) *extrefs); + +int index_attachment_stream_get(struct fs *fs, const char *attachment_dir, + const char *path_suffix, + struct istream **stream, uoff_t full_size, + const char *ext_refs, const char **error_r); + +#endif |