diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib-mail/message-decoder.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/lib-mail/message-decoder.h b/src/lib-mail/message-decoder.h new file mode 100644 index 0000000..9928ae6 --- /dev/null +++ b/src/lib-mail/message-decoder.h @@ -0,0 +1,54 @@ +#ifndef MESSAGE_DECODER_H +#define MESSAGE_DECODER_H + +#include "unichar.h" + +struct message_header_line; + +enum message_cte { + MESSAGE_CTE_UNKNOWN = 0, + MESSAGE_CTE_78BIT, + MESSAGE_CTE_BINARY, + MESSAGE_CTE_QP, + MESSAGE_CTE_BASE64 +}; + +enum message_decoder_flags { + /* Return binary MIME parts as-is without any conversion. */ + MESSAGE_DECODER_FLAG_RETURN_BINARY = 0x02 +}; + +struct message_block; + +/* Decode message's contents as UTF-8, both the headers and the MIME bodies. + The bodies are decoded from quoted-printable and base64 formats if needed. */ +struct message_decoder_context * +message_decoder_init(normalizer_func_t *normalizer, + enum message_decoder_flags flags); +void message_decoder_deinit(struct message_decoder_context **ctx); + +/* Change the MESSAGE_DECODER_FLAG_RETURN_BINARY flag */ +void message_decoder_set_return_binary(struct message_decoder_context *ctx, + bool set); + +/* Decode input and return decoded output. Headers are returned only in their + full multiline forms. + + Returns TRUE if output is given, FALSE if more data is needed. If the input + ends in a partial character, it's returned in the next output. */ +bool message_decoder_decode_next_block(struct message_decoder_context *ctx, + struct message_block *input, + struct message_block *output); + +/* Returns the parsed Content-Type of the current MIME part. If there is no + explicit Content-Type, returns NULL. */ +const char * +message_decoder_current_content_type(struct message_decoder_context *ctx); + +/* Call whenever message changes */ +void message_decoder_decode_reset(struct message_decoder_context *ctx); + +/* Decode Content-Transfer-Encoding header. */ +enum message_cte message_decoder_parse_cte(const struct message_header_line *hdr); + +#endif |