message-header-parser.c revision 15362cdf9df29fef8795e865957e17ec027a9ebf
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2002-2008 Dovecot authors, see the included COPYING file */
fe363b433b8038a69b55169da9dca27892ad7d18Timo Sirainenmessage_parse_header_init(struct istream *input, struct message_size *hdr_size,
cd56a23e21f1df3f79648cf07e2f4385e2fadebbTimo Sirainen ctx = i_new(struct message_header_parser_ctx, 1);
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainenvoid message_parse_header_deinit(struct message_header_parser_ctx **_ctx)
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen struct message_header_parser_ctx *ctx = *_ctx;
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainenint message_parse_header_next(struct message_header_parser_ctx *ctx,
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen struct message_header_line *line = &ctx->line;
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen const unsigned char *msg;
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen size_t i, size, startpos, colon_pos, parse_size;
602a0434db30d8e3292d1c161a803d96a879a74fTimo Sirainen bool continued, continues, last_no_newline, last_crlf;
7e1f68ad71d3485f1882142837b01f7a98ca8467Timo Sirainen if (line->use_full_value && !line->continued) {
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen /* save the first line */
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen /* new header line */
if (ret >= 0) {
if (startpos > 0) {
size = 0;
size--;
startpos = 0;
size = i;
colon_pos = i;
i = startpos;
for (; i < parse_size; i++) {
if (i < parse_size) {
startpos = 0;
size = i;
startpos = i;
if (size == 0) {
colon_pos--;
if (last_no_newline) {
if (last_crlf)
int ret;