A whole bunch of changes to allow building for Windows.
[gnupg.git] / tools / 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
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18  * 02110-1301, USA.
19  */
20
21 #ifndef RFC822PARSE_H
22 #define RFC822PARSE_H
23
24 struct rfc822parse_context;
25 typedef struct rfc822parse_context *rfc822parse_t;
26
27 typedef enum 
28   {
29     RFC822PARSE_OPEN = 1,
30     RFC822PARSE_CLOSE,
31     RFC822PARSE_CANCEL,
32     RFC822PARSE_T2BODY,
33     RFC822PARSE_FINISH,
34     RFC822PARSE_RCVD_SEEN,
35     RFC822PARSE_LEVEL_DOWN,
36     RFC822PARSE_LEVEL_UP,
37     RFC822PARSE_BOUNDARY,
38     RFC822PARSE_LAST_BOUNDARY,
39     RFC822PARSE_BEGIN_HEADER,
40     RFC822PARSE_PREAMBLE,
41     RFC822PARSE_EPILOGUE
42   } 
43 rfc822parse_event_t;
44
45 struct rfc822parse_field_context;
46 typedef struct rfc822parse_field_context *rfc822parse_field_t;
47
48
49 typedef int (*rfc822parse_cb_t) (void *opaque,
50                                  rfc822parse_event_t event,
51                                  rfc822parse_t msg);
52
53
54 rfc822parse_t rfc822parse_open (rfc822parse_cb_t cb, void *opaque_value);
55
56 void rfc822parse_close (rfc822parse_t msg);
57
58 void rfc822parse_cancel (rfc822parse_t msg);
59 int rfc822parse_finish (rfc822parse_t msg);
60
61 int rfc822parse_insert (rfc822parse_t msg,
62                         const unsigned char *line, size_t length);
63
64 char *rfc822parse_get_field (rfc822parse_t msg, const char *name, int which,
65                              size_t *valueoff);
66
67 const char *rfc822parse_enum_header_lines (rfc822parse_t msg, void **context);
68
69 rfc822parse_field_t rfc822parse_parse_field (rfc822parse_t msg,
70                                              const char *name,
71                                              int which);
72
73 void rfc822parse_release_field (rfc822parse_field_t field);
74
75 const char *rfc822parse_query_parameter (rfc822parse_field_t ctx,
76                                          const char *attr, int lower_value);
77
78 const char *rfc822parse_query_media_type (rfc822parse_field_t ctx,
79                                           const char **subtype);
80
81 #endif /*RFC822PARSE_H */