annotate src/lib-mail/istream-header-filter.c @ 2430:7c1dc4a7db3a HEAD

message_parse_header_next() can now return "need more data" with nonblocking input streams.
author Timo Sirainen <tss@iki.fi>
date Sun, 22 Aug 2004 06:19:58 +0300
parents 92f92b3c447b
children 8e9d8cb1e674
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 /* Copyright (C) 2003-2004 Timo Sirainen */
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "buffer.h"
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "message-parser.h"
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "istream-internal.h"
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "istream-header-filter.h"
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include <stdlib.h>
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 struct header_filter_istream {
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 struct _istream istream;
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
13 pool_t pool;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 struct istream *input;
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
16 struct message_header_parser_ctx *hdr_ctx;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
18 const char **headers;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
19 size_t headers_count;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
20
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
21 header_filter_callback *callback;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
22 void *context;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
23
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
24 buffer_t *hdr_buf;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 struct message_size header_size;
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
26 uoff_t skip_count;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
27
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
28 unsigned int cur_line, parsed_lines;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
29
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
30 unsigned int header_read:1;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
31 unsigned int filter:1;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 };
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 static void _close(struct _iostream *stream __attr_unused__)
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 {
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 static void _destroy(struct _iostream *stream)
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 {
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 struct header_filter_istream *mstream =
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 (struct header_filter_istream *)stream;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
43 if (mstream->hdr_ctx != NULL)
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
44 message_parse_header_deinit(mstream->hdr_ctx);
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 i_stream_unref(mstream->input);
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
46 pool_unref(mstream->pool);
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 static void _set_max_buffer_size(struct _iostream *stream, size_t max_size)
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 {
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 struct header_filter_istream *mstream =
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 (struct header_filter_istream *)stream;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 i_stream_set_max_buffer_size(mstream->input, max_size);
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
57 static ssize_t read_header(struct header_filter_istream *mstream)
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
58 {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
59 struct message_header_line *hdr;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
60 size_t pos;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
61 ssize_t ret;
2430
7c1dc4a7db3a message_parse_header_next() can now return "need more data" with nonblocking
Timo Sirainen <tss@iki.fi>
parents: 2429
diff changeset
62 int matched, hdr_ret;
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
63
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
64 if (mstream->header_read &&
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
65 mstream->istream.istream.v_offset + mstream->istream.pos ==
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
66 mstream->header_size.virtual_size) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
67 /* we don't support mixing headers and body.
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
68 it shouldn't be needed. */
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
69 return -2;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
70 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
71
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
72 if (mstream->hdr_ctx == NULL) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
73 mstream->hdr_ctx =
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
74 message_parse_header_init(mstream->input, NULL, FALSE);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
75 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
76
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
77 buffer_copy(mstream->hdr_buf, 0,
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
78 mstream->hdr_buf, mstream->istream.skip, (size_t)-1);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
79
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
80 mstream->istream.pos -= mstream->istream.skip;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
81 mstream->istream.skip = 0;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
82
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
83 buffer_set_used_size(mstream->hdr_buf, mstream->istream.pos);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
84
2430
7c1dc4a7db3a message_parse_header_next() can now return "need more data" with nonblocking
Timo Sirainen <tss@iki.fi>
parents: 2429
diff changeset
85 while ((hdr_ret = message_parse_header_next(mstream->hdr_ctx,
7c1dc4a7db3a message_parse_header_next() can now return "need more data" with nonblocking
Timo Sirainen <tss@iki.fi>
parents: 2429
diff changeset
86 &hdr)) > 0) {
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
87 mstream->cur_line++;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
88
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
89 if (hdr->eoh) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
90 buffer_append(mstream->hdr_buf, "\r\n", 2);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
91 break;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
92 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
93
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
94 matched = bsearch(hdr->name, mstream->headers,
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
95 mstream->headers_count,
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
96 sizeof(*mstream->headers),
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
97 bsearch_strcasecmp) != NULL;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
98 if (mstream->cur_line > mstream->parsed_lines &&
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
99 mstream->callback != NULL) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
100 mstream->parsed_lines = mstream->cur_line;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
101 mstream->callback(hdr, &matched, mstream->context);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
102 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
103
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
104 if (matched == mstream->filter) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
105 /* ignore */
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
106 } else {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
107 if (!hdr->continued) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
108 buffer_append(mstream->hdr_buf,
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
109 hdr->name, hdr->name_len);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
110 buffer_append(mstream->hdr_buf,
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
111 hdr->middle, hdr->middle_len);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
112 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
113 buffer_append(mstream->hdr_buf,
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
114 hdr->value, hdr->value_len);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
115 buffer_append(mstream->hdr_buf, "\r\n", 2);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
116
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
117 if (mstream->skip_count >= mstream->hdr_buf->used) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
118 /* we need more */
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
119 mstream->skip_count -= mstream->hdr_buf->used;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
120 buffer_set_used_size(mstream->hdr_buf, 0);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
121 } else {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
122 if (mstream->skip_count > 0) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
123 mstream->istream.skip =
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
124 mstream->skip_count;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
125 mstream->skip_count = 0;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
126 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
127 break;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
128 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
129 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
130 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
131
2430
7c1dc4a7db3a message_parse_header_next() can now return "need more data" with nonblocking
Timo Sirainen <tss@iki.fi>
parents: 2429
diff changeset
132 mstream->istream.istream.disconnected = mstream->input->disconnected;
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
133 mstream->istream.buffer = buffer_get_data(mstream->hdr_buf, &pos);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
134 ret = (ssize_t)(pos - mstream->istream.pos - mstream->istream.skip);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
135 mstream->istream.pos = pos;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
136
2430
7c1dc4a7db3a message_parse_header_next() can now return "need more data" with nonblocking
Timo Sirainen <tss@iki.fi>
parents: 2429
diff changeset
137 if (hdr_ret == 0)
7c1dc4a7db3a message_parse_header_next() can now return "need more data" with nonblocking
Timo Sirainen <tss@iki.fi>
parents: 2429
diff changeset
138 return ret;
7c1dc4a7db3a message_parse_header_next() can now return "need more data" with nonblocking
Timo Sirainen <tss@iki.fi>
parents: 2429
diff changeset
139
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
140 if (hdr == NULL) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
141 /* finished */
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
142 mstream->header_read = TRUE;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
143
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
144 message_parse_header_deinit(mstream->hdr_ctx);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
145 mstream->hdr_ctx = NULL;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
146
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
147 mstream->header_size.physical_size = mstream->input->v_offset;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
148 mstream->header_size.virtual_size =
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
149 mstream->istream.istream.v_offset + pos;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
150 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
151
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
152 if (ret == 0) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
153 i_assert(hdr == NULL);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
154 i_assert(mstream->istream.istream.v_offset +
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
155 mstream->istream.pos ==
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
156 mstream->header_size.virtual_size);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
157 return -2;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
158 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
159
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
160 return ret;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
161 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
162
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163 static ssize_t _read(struct _istream *stream)
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164 {
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 struct header_filter_istream *mstream =
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166 (struct header_filter_istream *)stream;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 ssize_t ret;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 size_t pos;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
169
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
170 if (!mstream->header_read ||
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
171 stream->istream.v_offset < mstream->header_size.virtual_size) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
172 ret = read_header(mstream);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
173 if (ret != -2 || stream->pos != stream->skip)
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
174 return ret;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177 if (mstream->input->v_offset - mstream->header_size.physical_size !=
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178 stream->istream.v_offset - mstream->header_size.virtual_size) {
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 i_stream_seek(mstream->input, stream->istream.v_offset -
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
180 mstream->header_size.virtual_size +
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
181 mstream->header_size.physical_size);
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
183
2295
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
184 stream->buffer = i_stream_get_data(mstream->input, &pos);
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
185 if (pos <= stream->pos) {
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
186 if (i_stream_read(mstream->input) == -2) {
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
187 if (stream->skip == 0)
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
188 return -2;
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
189 }
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
190 stream->istream.disconnected = mstream->input->disconnected;
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
191 stream->buffer = i_stream_get_data(mstream->input, &pos);
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
192 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
193
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
194 stream->pos -= stream->skip;
2295
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
195 stream->skip = 0;
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
196
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
197 ret = pos <= stream->pos ? -1 :
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
198 (ssize_t) (pos - stream->pos);
545c1d3ead54 Wrapper streams shouldn't try to read data if it's already buffered in main
Timo Sirainen <tss@iki.fi>
parents: 2196
diff changeset
199 stream->pos = pos;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
200 return ret;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
201 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
202
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
203 static void _seek(struct _istream *stream, uoff_t v_offset)
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
204 {
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
205 struct header_filter_istream *mstream =
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
206 (struct header_filter_istream *)stream;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
207
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
208 stream->istream.v_offset = v_offset;
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
209 stream->skip = stream->pos = 0;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
210 stream->buffer = NULL;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
211
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
212 if (mstream->hdr_ctx != NULL) {
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
213 message_parse_header_deinit(mstream->hdr_ctx);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
214 mstream->hdr_ctx = NULL;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
215 }
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
216
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
217 if (v_offset < mstream->header_size.virtual_size) {
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
218 /* seek into headers. we'll have to re-parse them, use
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
219 skip_count to set the wanted position */
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
220 i_stream_seek(mstream->input, 0);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
221 mstream->skip_count = v_offset;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
222 mstream->cur_line = 0;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
223 } else {
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
224 /* body */
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
225 v_offset += mstream->header_size.physical_size -
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
226 mstream->header_size.virtual_size;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
227 i_stream_seek(mstream->input, v_offset);
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
228 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
229 }
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
230
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
231 struct istream *
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
232 i_stream_create_header_filter(struct istream *input, int filter,
2327
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2295
diff changeset
233 const char *const *headers, size_t headers_count,
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2295
diff changeset
234 header_filter_callback *callback, void *context)
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
235 {
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
236 struct header_filter_istream *mstream;
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
237 pool_t pool;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
238 size_t i;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
239
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
240 pool = pool_alloconly_create("header filter stream", 1024);
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
241 mstream = p_new(pool, struct header_filter_istream, 1);
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
242 mstream->pool = pool;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
243
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
244 mstream->input = input;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
245 i_stream_ref(mstream->input);
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
246
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
247 mstream->headers = p_new(pool, const char *, headers_count);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
248 for (i = 0; i < headers_count; i++)
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
249 mstream->headers[i] = p_strdup(pool, headers[i]);
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
250 mstream->headers_count = headers_count;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
251 mstream->hdr_buf = buffer_create_dynamic(pool, 512, (size_t)-1);
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
252
2429
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
253 mstream->callback = callback;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
254 mstream->context = context;
92f92b3c447b istream-header-filter now parses the headers incrementally while read()ing,
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
255 mstream->filter = filter;
2196
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
256
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
257 mstream->istream.iostream.close = _close;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
258 mstream->istream.iostream.destroy = _destroy;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
259 mstream->istream.iostream.set_max_buffer_size = _set_max_buffer_size;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
260
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
261 mstream->istream.read = _read;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
262 mstream->istream.seek = _seek;
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
263
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
264 return _i_stream_create(&mstream->istream, pool, -1, 0);
0417cdfa6d88 Added istream-header-filter, which allows filtering specified headers from
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
265 }