parse822.h
5.18 KB
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
104
105
106
107
108
109
110
/* GNU Mailutils -- a suite of utilities for electronic mail
Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301 USA */
/**
* Parses syntatic elements defined in RFC 822.
*/
#ifndef _MAILUTILS_PARSE822_H
#define _MAILUTILS_PARSE822_H
#include <mailutils/types.h>
#include <mailutils/mutil.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* Reads an RFC822 defined lexical token from an input. All names are
* as close as possible to those used in the extended BNF of the RFC.
*/
/* From RFC 822, 3.3 Lexical Tokens */
extern int mu_parse822_is_char (char c);
extern int mu_parse822_is_digit (char c);
extern int mu_parse822_is_ctl (char c);
extern int mu_parse822_is_space (char c);
extern int mu_parse822_is_htab (char c);
extern int mu_parse822_is_lwsp_char (char c);
extern int mu_parse822_is_special (char c);
extern int mu_parse822_is_atom_char (char c);
extern int mu_parse822_is_q_text (char c);
extern int mu_parse822_is_d_text (char c);
extern int mu_parse822_is_smtp_q (char c);
extern int mu_parse822_skip_crlf (const char** p, const char* e);
extern int mu_parse822_skip_lwsp_char (const char** p, const char* e);
extern int mu_parse822_skip_lwsp (const char** p, const char* e);
extern int mu_parse822_skip_comments (const char** p, const char* e);
extern int mu_parse822_skip_nl (const char** p, const char* e);
extern int mu_parse822_digits (const char** p, const char* e, int min, int max, int* digits);
extern int mu_parse822_special (const char** p, const char* e, char c);
extern int mu_parse822_comment (const char** p, const char* e, char** comment);
extern int mu_parse822_atom (const char** p, const char* e, char** atom);
extern int mu_parse822_quoted_pair (const char** p, const char* e, char** qpair);
extern int mu_parse822_quoted_string (const char** p, const char* e, char** qstr);
extern int mu_parse822_word (const char** p, const char* e, char** word);
extern int mu_parse822_phrase (const char** p, const char* e, char** phrase);
extern int mu_parse822_d_text (const char** p, const char* e, char** dtext);
/* From RFC 822, 6.1 Address Specification Syntax */
extern int mu_parse822_address_list (mu_address_t* a, const char* s);
extern int mu_parse822_mail_box (const char** p, const char* e, mu_address_t* a);
extern int mu_parse822_group (const char** p, const char* e, mu_address_t* a);
extern int mu_parse822_address (const char** p, const char* e, mu_address_t* a);
extern int mu_parse822_route_addr (const char** p, const char* e, mu_address_t* a);
extern int mu_parse822_route (const char** p, const char* e, char** route);
extern int mu_parse822_addr_spec (const char** p, const char* e, mu_address_t* a);
extern int mu_parse822_unix_mbox (const char** p, const char* e, mu_address_t* a);
extern int mu_parse822_local_part (const char** p, const char* e, char** local_part);
extern int mu_parse822_domain (const char** p, const char* e, char** domain);
extern int mu_parse822_sub_domain (const char** p, const char* e, char** sub_domain);
extern int mu_parse822_domain_ref (const char** p, const char* e, char** domain_ref);
extern int mu_parse822_domain_literal (const char** p, const char* e, char** domain_literal);
/* RFC 822 Quoting Functions
* Various elements must be quoted if then contain non-safe characters. What
* characters are allowed depend on the element. The following functions will
* allocate a quoted version of the raw element, it may not actually be
* quoted if no unsafe characters were in the raw string.
*/
extern int mu_parse822_quote_string (char** quoted, const char* raw);
extern int mu_parse822_quote_local_part (char** quoted, const char* raw);
extern int mu_parse822_field_body (const char** p, const char *e, char** fieldbody);
extern int mu_parse822_field_name (const char** p, const char *e, char** fieldname);
/***** From RFC 822, 5.1 Date and Time Specification Syntax *****/
extern int mu_parse822_day (const char** p, const char* e, int* day);
extern int mu_parse822_date (const char** p, const char* e, int* day, int* mon, int* year);
extern int mu_parse822_time (const char** p, const char* e, int* h, int* m, int* s, int* tz, const char** tz_name);
extern int mu_parse822_date_time (const char** p, const char* e, struct tm* tm, mu_timezone* tz);
#ifdef __cplusplus
}
#endif
#endif /* _MAILUTILS_PARSE822_H */