summaryrefslogtreecommitdiffstats
path: root/src/lib-mail/message-search.h
blob: 7d3786a360bb8736b4556c4508f19ab7674072db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef MESSAGE_SEARCH_H
#define MESSAGE_SEARCH_H

struct message_block;
struct message_part;
struct message_search_context;

enum message_search_flags {
	/* Skip the main header and all the MIME headers. */
	MESSAGE_SEARCH_FLAG_SKIP_HEADERS	= 0x01
};

/* The key must be given in UTF-8 charset */
struct message_search_context *
message_search_init(const char *normalized_key_utf8,
		    normalizer_func_t *normalizer,
		    enum message_search_flags flags);
void message_search_deinit(struct message_search_context **ctx);

/* Returns TRUE if key is found from input buffer, FALSE if not. */
bool message_search_more(struct message_search_context *ctx,
			 struct message_block *raw_block);
/* Same as message_search_more(), but return the decoded block. If the same
   input is being fed to multiple searches, this avoids duplicating the work
   by doing the following searches with message_search_more_decoded() */
bool message_search_more_get_decoded(struct message_search_context *ctx,
				     struct message_block *raw_block,
				     struct message_block *decoded_block_r);
/* The data has already passed through decoder. */
bool message_search_more_decoded(struct message_search_context *ctx,
				 struct message_block *block);
void message_search_reset(struct message_search_context *ctx);
/* Search a full message. Returns 1 if match was found, 0 if not,
   -1 if error (if stream_error == 0, the parts contained broken data) */
int message_search_msg(struct message_search_context *ctx,
		       struct istream *input, struct message_part *parts,
		       const char **error_r)
	ATTR_NULL(3);

#endif