message-size.c revision 2a5404c1f5726b0912f4ec7dc763262f2aabd2d7
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
1e21e6be70994b1aa9e52ca0e2f51afefca6d0dfTimo Sirainenint message_get_header_size(struct istream *input, struct message_size *hdr,
0f39a57760d93cddbce3ca43096d78e0fe2f42fdTimo Sirainen const unsigned char *msg;
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen while (i_stream_read_data(input, &msg, &size, startpos) > 0) {
66d2db642fe24d555d113ba463e446b038d476efTimo Sirainen /* missing CR */
66d2db642fe24d555d113ba463e446b038d476efTimo Sirainen /* no headers at all */
2d8f66596f445dd8b399b7032c3f0e9202015b63Timo Sirainen (i > 1 && msg[i-2] == '\n' && msg[i-1] == '\r')) {
2d8f66596f445dd8b399b7032c3f0e9202015b63Timo Sirainen /* \n\n or \n\r\n - end of headers */
e9371f899a3d4207a0ffd3923ea5ec7250cf5e75Timo Sirainen /* end of header */
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen /* leave the last two characters, they may be \r\n */
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen hdr->virtual_size = hdr->physical_size + missing_cr_count;
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen i_assert(hdr->virtual_size >= hdr->physical_size);
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainenint message_get_body_size(struct istream *input, struct message_size *body,
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen const unsigned char *msg;
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen if ((ret = i_stream_read_data(input, &msg, &size, 0)) <= 0)
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen return ret < 0 && input->stream_errno != 0 ? -1 : 0;
return ret;