File: sieve-address.h

package info (click to toggle)
dovecot 1:2.2.13-12~deb8u4
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 38,792 kB
  • sloc: ansic: 341,472; sh: 16,920; makefile: 5,393; cpp: 1,474; perl: 265; xml: 44; python: 34; pascal: 27
file content (103 lines) | stat: -rw-r--r-- 2,266 bytes parent folder | download | duplicates (3)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/* Copyright (c) 2002-2013 Pigeonhole authors, see the included COPYING file
 */

#ifndef __SIEVE_ADDRESS_H
#define __SIEVE_ADDRESS_H

#include "lib.h"
#include "strfuncs.h"

#include "sieve-common.h"
#include "sieve-stringlist.h"

/*
 * Generic address representation
 */

struct sieve_address {
	const char *local_part;
	const char *domain;
};

static inline const char *sieve_address_to_string
(const struct sieve_address *address)
{
	if ( address == NULL || address->local_part == NULL )
		return NULL;

	if ( address->domain == NULL )
		return address->local_part;

	return t_strconcat(address->local_part, "@", address->domain, NULL);
}

/*
 * Address list API
 */

struct sieve_address_list {
	struct sieve_stringlist strlist;

	int (*next_item)
		(struct sieve_address_list *_addrlist, struct sieve_address *addr_r,
			string_t **unparsed_r);
};

static inline int sieve_address_list_next_item
(struct sieve_address_list *addrlist, struct sieve_address *addr_r,
	string_t **unparsed_r)
{
	return addrlist->next_item(addrlist, addr_r, unparsed_r);
}

static inline void sieve_address_list_reset
(struct sieve_address_list *addrlist)
{
	sieve_stringlist_reset(&addrlist->strlist);
}

static inline int sieve_address_list_get_length
(struct sieve_address_list *addrlist)
{
	return sieve_stringlist_get_length(&addrlist->strlist);
}

static inline void sieve_address_list_set_trace
(struct sieve_address_list *addrlist, bool trace)
{
	sieve_stringlist_set_trace(&addrlist->strlist, trace);
}

/*
 * Header address list
 */

struct sieve_address_list *sieve_header_address_list_create
	(const struct sieve_runtime_env *renv, struct sieve_stringlist *field_values);

/*
 * RFC 2822 addresses
 */

bool sieve_rfc2822_mailbox_validate
	(const char *address, const char **error_r);
const char *sieve_rfc2822_mailbox_normalize
	(const char *address, const char **error_r);


const char *sieve_address_normalize
	(string_t *address, const char **error_r);
bool sieve_address_validate
	(string_t *address, const char **error_r);

int sieve_address_compare
	(const char *address1, const char *address2, bool normalized);

/*
 * RFC 2821 addresses (paths)
 */

const struct sieve_address *sieve_address_parse_envelope_path
	(pool_t pool, const char *field_value);

#endif