Mercurial > dovecot > original-hg > dovecot-1.2
changeset 12:a4423c83b2b0 HEAD
moved lib-imap/imap-message-send.* into lib-mail/message-send.*
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 22 Aug 2002 17:26:17 +0300 |
parents | e285afe55c48 |
children | bb294faf7379 |
files | src/lib-imap/Makefile.am src/lib-imap/imap-message-send.c src/lib-imap/imap-message-send.h src/lib-mail/Makefile.am src/lib-mail/message-send.c src/lib-mail/message-send.h src/lib-storage/index/index-fetch-section.c src/lib-storage/index/index-fetch.c |
diffstat | 8 files changed, 96 insertions(+), 98 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-imap/Makefile.am Thu Aug 22 16:27:29 2002 +0300 +++ b/src/lib-imap/Makefile.am Thu Aug 22 17:26:17 2002 +0300 @@ -9,7 +9,6 @@ imap-envelope.c \ imap-match.c \ imap-message-cache.c \ - imap-message-send.c \ imap-parser.c \ imap-util.c @@ -18,6 +17,5 @@ imap-envelope.h \ imap-match.h \ imap-message-cache.h \ - imap-message-send.h \ imap-parser.h \ imap-util.h
--- a/src/lib-imap/imap-message-send.c Thu Aug 22 16:27:29 2002 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* Copyright (C) 2002 Timo Sirainen */ - -#include "lib.h" -#include "iobuffer.h" -#include "imap-message-send.h" -#include "message-size.h" - -int imap_message_send(IOBuffer *outbuf, IOBuffer *inbuf, - MessageSize *msg_size, off_t virtual_skip, - off_t max_virtual_size) -{ - unsigned char *msg; - unsigned int i, size; - int cr_skipped, add_cr; - - if (max_virtual_size == -1 || - max_virtual_size > (off_t)msg_size->virtual_size - virtual_skip) - max_virtual_size = msg_size->virtual_size - virtual_skip; - - if (msg_size->physical_size == 0 || virtual_skip >= max_virtual_size) - return TRUE; - - if (msg_size->physical_size == msg_size->virtual_size) { - /* no need to kludge with CRs, we can use sendfile() */ - io_buffer_skip(inbuf, virtual_skip); - return io_buffer_send_buf(outbuf, inbuf, max_virtual_size) > 0; - } - - message_skip_virtual(inbuf, virtual_skip, NULL, &cr_skipped); - - /* go through the message data and insert CRs where needed. */ - while (io_buffer_read_data(inbuf, &msg, &size, 0) >= 0) { - add_cr = FALSE; - for (i = 0; i < size; i++) { - if (msg[i] == '\n') { - if ((i == 0 && !cr_skipped) || - (i > 0 && msg[i-1] != '\r')) { - /* missing CR */ - if (max_virtual_size > 0) - max_virtual_size--; - add_cr = TRUE; - break; - } - - } - - if (max_virtual_size > 0) { - if (--max_virtual_size == 0) { - i++; - break; - } - } - } - - /* send the data read so far */ - if (io_buffer_send(outbuf, msg, i) <= 0) - return FALSE; - - if (add_cr) { - if (io_buffer_send(outbuf, "\r", 1) <= 0) - return FALSE; - } - - /* see if we've reached the limit */ - if (max_virtual_size == 0) - break; - - cr_skipped = TRUE; - io_buffer_skip(inbuf, i); - } - - return TRUE; -}
--- a/src/lib-imap/imap-message-send.h Thu Aug 22 16:27:29 2002 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -#ifndef __IMAP_MESSAGE_SEND_H -#define __IMAP_MESSAGE_SEND_H - -#include "message-parser.h" - -/* Send message to client inserting CRs if needed. If max_virtual_size is - not negative, only that much of the message is sent. If msg_fd is -1, only - msg is used. Returns TRUE if successful. */ -int imap_message_send(IOBuffer *outbuf, IOBuffer *inbuf, - MessageSize *msg_size, off_t virtual_skip, - off_t max_virtual_size); - -#endif
--- a/src/lib-mail/Makefile.am Thu Aug 22 16:27:29 2002 +0300 +++ b/src/lib-mail/Makefile.am Thu Aug 22 17:26:17 2002 +0300 @@ -6,6 +6,7 @@ libmail_a_SOURCES = \ message-parser.c \ message-content-parser.c \ + message-send.c \ message-size.c \ rfc822-address.c \ rfc822-date.c \ @@ -14,6 +15,7 @@ noinst_HEADERS = \ message-parser.h \ message-content-parser.h \ + message-send.h \ message-size.h \ rfc822-address.h \ rfc822-date.h \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib-mail/message-send.c Thu Aug 22 17:26:17 2002 +0300 @@ -0,0 +1,72 @@ +/* Copyright (C) 2002 Timo Sirainen */ + +#include "lib.h" +#include "iobuffer.h" +#include "message-send.h" +#include "message-size.h" + +int message_send(IOBuffer *outbuf, IOBuffer *inbuf, MessageSize *msg_size, + off_t virtual_skip, off_t max_virtual_size) +{ + unsigned char *msg; + unsigned int i, size; + int cr_skipped, add_cr; + + if (max_virtual_size == -1 || + max_virtual_size > (off_t)msg_size->virtual_size - virtual_skip) + max_virtual_size = msg_size->virtual_size - virtual_skip; + + if (msg_size->physical_size == 0 || virtual_skip >= max_virtual_size) + return TRUE; + + if (msg_size->physical_size == msg_size->virtual_size) { + /* no need to kludge with CRs, we can use sendfile() */ + io_buffer_skip(inbuf, virtual_skip); + return io_buffer_send_buf(outbuf, inbuf, max_virtual_size) > 0; + } + + message_skip_virtual(inbuf, virtual_skip, NULL, &cr_skipped); + + /* go through the message data and insert CRs where needed. */ + while (io_buffer_read_data(inbuf, &msg, &size, 0) >= 0) { + add_cr = FALSE; + for (i = 0; i < size; i++) { + if (msg[i] == '\n') { + if ((i == 0 && !cr_skipped) || + (i > 0 && msg[i-1] != '\r')) { + /* missing CR */ + if (max_virtual_size > 0) + max_virtual_size--; + add_cr = TRUE; + break; + } + + } + + if (max_virtual_size > 0) { + if (--max_virtual_size == 0) { + i++; + break; + } + } + } + + /* send the data read so far */ + if (io_buffer_send(outbuf, msg, i) <= 0) + return FALSE; + + if (add_cr) { + if (io_buffer_send(outbuf, "\r", 1) <= 0) + return FALSE; + } + + /* see if we've reached the limit */ + if (max_virtual_size == 0) + break; + + cr_skipped = TRUE; + io_buffer_skip(inbuf, i); + } + + return TRUE; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib-mail/message-send.h Thu Aug 22 17:26:17 2002 +0300 @@ -0,0 +1,12 @@ +#ifndef __MESSAGE_SEND_H +#define __MESSAGE_SEND_H + +#include "message-parser.h" + +/* Send message to client inserting CRs if needed. If max_virtual_size is + not negative, only that much of the message is sent. If msg_fd is -1, only + msg is used. Returns TRUE if successful. */ +int message_send(IOBuffer *outbuf, IOBuffer *inbuf, MessageSize *msg_size, + off_t virtual_skip, off_t max_virtual_size); + +#endif
--- a/src/lib-storage/index/index-fetch-section.c Thu Aug 22 16:27:29 2002 +0300 +++ b/src/lib-storage/index/index-fetch-section.c Thu Aug 22 17:26:17 2002 +0300 @@ -4,7 +4,7 @@ #include "temp-string.h" #include "iobuffer.h" #include "rfc822-tokenize.h" -#include "imap-message-send.h" +#include "message-send.h" #include "index-storage.h" #include "index-fetch.h" @@ -49,7 +49,7 @@ str = t_strdup_printf("{%lu}\r\n", (unsigned long) size.virtual_size); (void)io_buffer_send(ctx->outbuf, str, strlen(str)); - (void)imap_message_send(ctx->outbuf, inbuf, &size, 0, sect->max_size); + (void)message_send(ctx->outbuf, inbuf, &size, 0, sect->max_size); return TRUE; } @@ -206,8 +206,8 @@ str = t_strdup_printf("{%lu}\r\n", (unsigned long) size->virtual_size); (void)io_buffer_send(ctx->outbuf, str, strlen(str)); - (void)imap_message_send(ctx->outbuf, inbuf, size, - sect->skip, sect->max_size); + (void)message_send(ctx->outbuf, inbuf, size, + sect->skip, sect->max_size); return; } @@ -328,8 +328,8 @@ /* FIXME: potential performance problem with big messages: FETCH BODY[1]<100000..1024>, hopefully no clients do this */ - (void)imap_message_send(ctx->outbuf, inbuf, &part->body_size, - sect->skip, sect->max_size); + (void)message_send(ctx->outbuf, inbuf, &part->body_size, + sect->skip, sect->max_size); return TRUE; }
--- a/src/lib-storage/index/index-fetch.c Thu Aug 22 16:27:29 2002 +0300 +++ b/src/lib-storage/index/index-fetch.c Thu Aug 22 17:26:17 2002 +0300 @@ -7,9 +7,9 @@ #include "index-storage.h" #include "index-fetch.h" #include "mail-messageset.h" +#include "message-send.h" #include "imap-util.h" #include "imap-message-cache.h" -#include "imap-message-send.h" #include <unistd.h> @@ -106,7 +106,7 @@ body_size.physical_size += hdr_size.physical_size; body_size.virtual_size += hdr_size.virtual_size; - (void)imap_message_send(ctx->outbuf, inbuf, &body_size, 0, -1); + (void)message_send(ctx->outbuf, inbuf, &body_size, 0, -1); } static void index_fetch_rfc822_header(MailIndexRecord *rec, FetchContext *ctx) @@ -125,7 +125,7 @@ str = t_strdup_printf(" RFC822.HEADER {%lu}\r\n", (unsigned long) hdr_size.virtual_size); (void)io_buffer_send(ctx->outbuf, str, strlen(str)); - (void)imap_message_send(ctx->outbuf, inbuf, &hdr_size, 0, -1); + (void)message_send(ctx->outbuf, inbuf, &hdr_size, 0, -1); } static void index_fetch_rfc822_text(MailIndexRecord *rec, FetchContext *ctx) @@ -144,7 +144,7 @@ str = t_strdup_printf(" RFC822.TEXT {%lu}\r\n", (unsigned long) body_size.virtual_size); (void)io_buffer_send(ctx->outbuf, str, strlen(str)); - (void)imap_message_send(ctx->outbuf, inbuf, &body_size, 0, -1); + (void)message_send(ctx->outbuf, inbuf, &body_size, 0, -1); } static ImapCacheField index_get_cache(MailFetchData *fetch_data)