view src/lib-mail/message-decoder.h @ 22638:7d5634889da8

lib: net_ip2addr() - Optimize by allocating destination memory immediately It doesn't really matter if we allocate a few extra bytes.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sat, 04 Nov 2017 01:42:37 +0200
parents 3d612ade5d75
children
line wrap: on
line source

#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(struct message_header_line *hdr);

#endif