1 | /***************************************
2 | $Revision: 2.16 $
3 |
4 | mm - MIME Parser module. Functions to parse a mail message,
5 | find if it is MIME-encapsulated, and return the parts of
6 | the message which are supported by the UP module.
7 |
8 | Status: COMPLETE, NOT REVUED, TESTED
9 |
10 | Design and implementation by: daniele@ripe.net
11 |
12 | ******************/ /******************
13 | Copyright (c) 2000,2001,2002 RIPE NCC
14 |
15 | All Rights Reserved
16 |
17 | Permission to use, copy, modify, and distribute this software and its
18 | documentation for any purpose and without fee is hereby granted,
19 | provided that the above copyright notice appear in all copies and that
20 | both that copyright notice and this permission notice appear in
21 | supporting documentation, and that the name of the author not be
22 | used in advertising or publicity pertaining to distribution of the
23 | software without specific, written prior permission.
24 |
25 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
26 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
27 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
28 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
29 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
30 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
31 | ***************************************/
32 |
33 | #ifndef _MM_H
34 | #define _MM_H
35 |
36 |
37 | /* Included headers: */
38 |
39 | /* These come from c-client */
40 | #include "mail.h"
41 | #include "osdep.h"
42 | /*#include "misc.h"*/
43 | /*#include "rfc822.h"*/
44 | /*#include "smtp.h"*/
45 | /*#include "nntp.h"*/
46 |
47 | /* Other RIP headers */
48 | #include "gpg.h"
49 | #include "mail_parser.h"
50 | #include "memwrap.h"
51 |
52 | /* GLib */
53 | #include "glib.h"
54 |
55 |
56 |
57 | /* String sizes */
58 | #define STR_S 63
59 | #define STR_M 255
60 | #define STR_L 1023
61 | #define STR_XL 4095
62 | #define STR_XXL 16383
63 |
64 | #define LINELENGTH 80
65 |
66 | /* Set this as the max buffer size when you want to
67 | avoid buffer overflows */
68 | #define MAXBUFSIZE 102400
69 |
70 | /* Local #defines */
71 |
72 | #define NO_DEBUG 0
73 | #define DO_DEBUG 1
74 | #define DEFAULT_DEBUG NO_DEBUG
75 | #define TEMPDIR "/tmp"
76 | #define FILENAMELEN STR_L
77 | #define GLOBALPREFIX "mime"
78 | #define MAXSUPPTYPES 50
79 |
80 |
81 | /* Structure definition */
82 |
83 |
84 |
85 |
86 | typedef struct MM_mail_header {
87 | char *from;
88 | char *subject;
89 | char *date;
90 | char *message_id;
91 | char *reply_to;
92 | char *cc;
93 | char *content_type;
94 | } MM_header;
95 |
96 |
97 | /* Needed for dbupdate, written in C++ */
98 |
99 | #ifdef __cplusplus
100 | extern "C" {
101 | #endif
102 |
103 |
104 | /* Function definition */
105 |
106 | /* API functions */
107 | int MM_store (char *source_file, char *destination_file, long custom_debug);
108 | int MM_get_msg_headers(const char *mail_file, EP_Mail_Descr *mail_descr, long mesgno, long custom_debug);
109 | #define MM_get_headers(mail_file, mail_descr, custom_debug) MM_get_msg_headers(mail_file, mail_descr, (long) 1, custom_debug)
110 | int MM_extract_mime (const char *sourcefile, char *pfx, EP_mail_node *mailnode, long custom_debug);
111 |
112 | /* Internal support functions */
113 | void status (MAILSTREAM *stream);
114 | Mail_Header_Field *get_mail_hdr_field (MAILSTREAM *stream, long mesgno, STRINGLIST *cur, const char *hdr_title);
115 | char *get_header_line (MAILSTREAM *stream, long mesgno, STRINGLIST *cur, const char *hdr_title);
116 | void write_file (char *filename, char *text, size_t text_size);
117 | void read_file (const char *filename);
118 | void put_in_file (char *fileprefix, char *extension, char *text, size_t text_size);
119 | int do_regex_test(const char *pattern, char *string);
120 | t_MM_type is_supported_MIMEtype (BODY *body);
121 | void dispatch_to_driver(MAILSTREAM *stream, BODY *body, char *pfx, EP_mail_node *mailnode);
122 |
123 |
124 | /* The drivers */
125 | void parse_text_plain(MAILSTREAM *stream, BODY *body, char *pfx, EP_mail_node *mailnode);
126 | void parse_multipart_alternative (MAILSTREAM *stream, BODY *body, char *pfx, EP_mail_node *mailnode);
127 | void parse_multipart_signed (MAILSTREAM *stream, BODY *body, char *pfx, EP_mail_node *mailnode);
128 | void parse_message_rfc822 (MAILSTREAM *stream, BODY *body, char *pfx, EP_mail_node *mailnode);
129 | #define parse_application_pgp(stream, body, part_number, mailnode) parse_text_plain(stream, body, part_number, mailnode)
130 | #define parse_unknown_unknown(stream, body, part_number, mailnode) parse_text_plain(stream, body, part_number, mailnode) /* We give a chance to the unsupported MIMEtypes to contain plain text updates... */
131 | #define parse_multipart_mixed(stream, body, part_number, mailnode) parse_multipart_alternative(stream, body, part_number, mailnode)
132 | #define parse_multipart_digest(stream, body, part_number, mailnode) parse_multipart_alternative(stream, body, part_number, mailnode)
133 |
134 | /* Needed for dbupdate, written in C++ */
135 |
136 | #ifdef __cplusplus
137 | }
138 | #endif
139 |
140 |
141 | #endif /* _MM_H */