Commit | Line | Data |
---|---|---|
d9898ee8 | 1 | #ifndef rfc2047_h |
2 | #define rfc2047_h | |
3 | ||
4 | #include <stdlib.h> | |
5 | /* | |
8d138742 | 6 | ** Copyright 1998 - 2009 Double Precision, Inc. See COPYING for |
d9898ee8 | 7 | ** distribution information. |
8 | */ | |
9 | ||
10 | #ifdef __cplusplus | |
11 | extern "C" { | |
12 | #endif | |
13 | ||
14 | ||
8d138742 | 15 | static const char rfc2047_h_rcsid[]="$Id: rfc2047.h,v 1.12 2009/11/14 21:15:43 mrsam Exp $"; |
d9898ee8 | 16 | |
8d138742 | 17 | struct unicode_info; |
d9898ee8 | 18 | |
19 | /* | |
8d138742 CE |
20 | ** Raw RFC 2047 parser. |
21 | ** | |
22 | ** rfc2047_decoder() repeatedly invokes the callback function, passing it | |
23 | ** the decoded RFC 2047 string that's given as an argument. | |
d9898ee8 | 24 | */ |
25 | ||
8d138742 CE |
26 | int rfc2047_decoder(const char *text, |
27 | void (*callback)(const char *chset, | |
28 | const char *lang, | |
29 | const char *content, | |
30 | size_t cnt, | |
31 | void *dummy), | |
32 | void *ptr); | |
d9898ee8 | 33 | |
34 | /* | |
8d138742 CE |
35 | ** rfc2047_print_unicodeaddr is like rfc822_print, except that it converts |
36 | ** RFC 2047 MIME encoding to 8 bit text. | |
d9898ee8 | 37 | */ |
38 | ||
39 | struct rfc822a; | |
40 | ||
8d138742 CE |
41 | int rfc2047_print_unicodeaddr(const struct rfc822a *a, |
42 | const char *charset, | |
43 | void (*print_func)(char, void *), | |
44 | void (*print_separator)(const char *, void *), | |
45 | void *ptr); | |
d9898ee8 | 46 | |
47 | ||
48 | /* | |
49 | ** And now, let's encode something with RFC 2047. Encode the following | |
50 | ** string in the indicated character set, into a malloced buffer. Returns 0 | |
51 | ** if malloc failed. | |
52 | */ | |
53 | ||
54 | char *rfc2047_encode_str(const char *str, const char *charset, | |
55 | int (*qp_allow)(char c) /* See below */); | |
56 | ||
57 | /* | |
58 | ** If you can live with the encoded text being generated on the fly, use | |
59 | ** rfc2047_encode_callback, which calls a callback function, instead of | |
60 | ** dynamically allocating memory. | |
61 | */ | |
62 | ||
63 | int rfc2047_encode_callback(const char *str, /* String to encode */ | |
64 | const char *charset, /* Native charset */ | |
65 | int (*qp_allow)(char c), | |
66 | /* Return true if c can appear in QP-encoded | |
67 | ** word */ | |
68 | int (*cb_func)(const char *, size_t, void *), | |
69 | /* Callback function. */ | |
70 | void *arg | |
71 | /* Passthrough arg to callback_function */ | |
72 | ); | |
73 | ||
74 | /* Potential arguments for qp_allow */ | |
75 | ||
76 | int rfc2047_qp_allow_any(char); /* Any character */ | |
77 | int rfc2047_qp_allow_comment(char); /* Any character except () */ | |
78 | int rfc2047_qp_allow_word(char); /* See RFC2047, bottom of page 7 */ | |
79 | ||
80 | ||
8d138742 CE |
81 | |
82 | /* | |
83 | ** rfc2047_encode_header allocates a buffer, and MIME-encodes a header. | |
84 | ** | |
85 | ** The name of the header, passed as the first parameter, should be | |
86 | ** "From", "To", "Subject", etc... It is not included in the encoded contents. | |
87 | */ | |
88 | char *rfc2047_encode_header_tobuf(const char *name, /* Header name */ | |
89 | const char *header, /* Header's contents */ | |
90 | const char *charset); | |
91 | ||
d9898ee8 | 92 | /* |
8d138742 CE |
93 | ** rfc2047_encode_header_addr allocates a buffer, and MIME-encodes an |
94 | ** RFC822 address header. | |
d9898ee8 | 95 | ** |
96 | */ | |
8d138742 CE |
97 | char *rfc2047_encode_header_addr(const struct rfc822a *a, |
98 | const char *charset); | |
d9898ee8 | 99 | |
100 | #ifdef __cplusplus | |
101 | } | |
102 | #endif | |
103 | ||
104 | #endif |