Fix two encoding issues
[gpgol.git] / src / rfc822parse.h
1 /* rfc822parse.h - Simple mail and MIME parser
2  * Copyright (C) 1999 Werner Koch, Duesseldorf
3  * Copyright (C) 2003, g10 Code GmbH
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public License
7  * as published by the Free Software Foundation; either version 2.1 of
8  * the License, or (at your option) any later version.
9  * 
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU Lesser General Public License for more details.
14  * 
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this program; if not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef RFC822PARSE_H
20 #define RFC822PARSE_H
21 #ifdef __cplusplus
22 extern "C" {
23 #if 0
24 }
25 #endif
26 #endif
27
28
29 struct rfc822parse_context;
30 typedef struct rfc822parse_context *rfc822parse_t;
31
32 typedef enum 
33   {
34     RFC822PARSE_OPEN = 1,
35     RFC822PARSE_CLOSE,
36     RFC822PARSE_CANCEL,
37     RFC822PARSE_T2BODY,
38     RFC822PARSE_FINISH,
39     RFC822PARSE_RCVD_SEEN,
40     RFC822PARSE_LEVEL_DOWN,
41     RFC822PARSE_LEVEL_UP,
42     RFC822PARSE_BOUNDARY,
43     RFC822PARSE_LAST_BOUNDARY,
44     RFC822PARSE_BEGIN_HEADER,
45     RFC822PARSE_PREAMBLE,
46     RFC822PARSE_EPILOGUE
47   } 
48 rfc822parse_event_t;
49
50 struct rfc822parse_field_context;
51 typedef struct rfc822parse_field_context *rfc822parse_field_t;
52
53
54 typedef int (*rfc822parse_cb_t) (void *opaque,
55                                  rfc822parse_event_t event,
56                                  rfc822parse_t msg);
57
58
59 rfc822parse_t rfc822parse_open (rfc822parse_cb_t cb, void *opaque_value);
60
61 void rfc822parse_close (rfc822parse_t msg);
62
63 void rfc822parse_cancel (rfc822parse_t msg);
64 int rfc822parse_finish (rfc822parse_t msg);
65
66 int rfc822parse_insert (rfc822parse_t msg,
67                         const unsigned char *line, size_t length);
68
69 char *rfc822parse_get_field (rfc822parse_t msg, const char *name, int which,
70                              size_t *valueoff);
71
72 const char *rfc822parse_enum_header_lines (rfc822parse_t msg, void **context);
73
74 rfc822parse_field_t rfc822parse_parse_field (rfc822parse_t msg,
75                                              const char *name,
76                                              int which);
77
78 void rfc822parse_release_field (rfc822parse_field_t field);
79
80 const char *rfc822parse_query_parameter (rfc822parse_field_t ctx,
81                                          const char *attr, int lower_value);
82
83 const char *rfc822parse_query_media_type (rfc822parse_field_t ctx,
84                                           const char **subtype);
85
86 #ifdef __cplusplus
87 }
88 #endif
89 #endif /*RFC822PARSE_H */