8d96d5b3a759119baa5937624b8716c8abb4d572jroberts /* Include only specified headers in output.*/
8d96d5b3a759119baa5937624b8716c8abb4d572jroberts /* Exclude specified headers from output. */
8d96d5b3a759119baa5937624b8716c8abb4d572jroberts /* Use LF linefeeds instead of CRLF. */
8d96d5b3a759119baa5937624b8716c8abb4d572jroberts /* Return EOF at the beginning of message body. */
8d96d5b3a759119baa5937624b8716c8abb4d572jroberts /* If the empty "end of headers" line doesn't exist, add it. */
8d96d5b3a759119baa5937624b8716c8abb4d572jroberts /* If body doesn't end with [CR]LF, add it/them. */
8d96d5b3a759119baa5937624b8716c8abb4d572jroberts /* Preserve the original LF or CRLF. */
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbelorotypedef void header_filter_callback(struct header_filter_istream *input,
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbeloroextern header_filter_callback *null_header_filter_callback;
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbeloro/* NOTE: headers list must be sorted. */
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbeloro const char *const *headers,
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbeloro unsigned int headers_count,
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbeloro#define i_stream_create_header_filter(input, flags, headers, headers_count, \
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbeloro i_stream_create_header_filter(input, flags, headers, headers_count + \
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbeloro struct message_header_line *, bool *, typeof(context))), \
d58fda4376e4bf67072ce2e69f6f47036f9dbb68jbeloro/* Add more data to headers. Should called from the filter callback. */