/*
* mhparse.h -- definitions for parsing/building of MIME content
* -- (mhparse.c/mhbuildsbr.c)
- *
- * $Id$
*/
#define NPARTS 50
/*
* Primary structure for handling Content (Entity)
+ *
+ * Some more explanation of this:
+ *
+ * This structure recursively describes a complete MIME message.
+ * At the top level, the c_first_hf list has a list of all message
+ * headers. If the content-type is multipart (c_type == CT_MULTIPART)
+ * then c_ctparams will contain a pointer to a struct multipart.
+ * A struct multipart contains (among other trhings) a linked list
+ * of struct part elements, and THOSE contain a pointer to the sub-part's
+ * Content structure.
*/
struct Content {
/* source (read) file */
int c_subtype; /* internal flag for content subtype */
/* Content-Transfer-Encoding info (decoded contents) */
- CE c_cefile; /* structure holding decoded content */
+ struct cefile c_cefile; /* structure holding decoded content */
int c_encoding; /* internal flag for encoding type */
/* Content-MD5 info */
#define TEXT_ENRICHED 0x03
/* Flags for character sets */
-#define CHARSET_UNKNOWN 0x00
+#define CHARSET_SPECIFIED 0x00
#define CHARSET_UNSPECIFIED 0x01 /* only needed when building drafts */
-#define CHARSET_USASCII 0x01
-#define CHARSET_LATIN 0x02
/* Structure for text content */
struct text {
struct multipart {
char *mp_start; /* boundary string separating parts */
char *mp_stop; /* terminating boundary string */
+ char *mp_content_before; /* any content before the first subpart */
+ char *mp_content_after; /* any content after the last subpart */
struct part *mp_parts; /* pointer to first subpart structure */
};
char *eb_server;
char *eb_subject;
char *eb_body;
+ char *eb_url;
};
/*
#define APPLICATION_OCTETS 0x01
#define APPLICATION_POSTSCRIPT 0x02
+
+/*
+ * Structures for mapping types to their internal flags
+ */
+struct k2v {
+ char *kv_key;
+ int kv_value;
+};
+extern struct k2v SubText[];
+extern struct k2v Charset[];
+extern struct k2v SubMultiPart[];
+extern struct k2v SubMessage[];
+extern struct k2v SubApplication[];
+
+/*
+ * Structures for mapping (content) types to
+ * the functions to handle them.
+ */
+struct str2init {
+ char *si_key;
+ int si_val;
+ InitFunc si_init;
+};
+extern struct str2init str2cts[];
+extern struct str2init str2ces[];
+extern struct str2init str2methods[];
+
+/*
+ * prototypes
+ */
+int pidcheck (int);
+CT parse_mime (char *);
+
+/*
+ * Translate a composition file into a MIME data structure. Arguments are:
+ *
+ * infile - Name of input filename
+ * directives - A flag to control whether or not build directives are
+ * processed by default.
+ * encoding - The default encoding to use when doing RFC 2047 header
+ * encoding. Must be one of CE_UNKNOWN, CE_BASE64, or
+ * CE_QUOTED;
+ *
+ * Returns a CT structure describing the resulting MIME message.
+ */
+CT build_mime (char *infile, int directives, int encoding);
+
+int add_header (CT, char *, char *);
+int get_ctinfo (char *, CT, int);
+int params_external (CT, int);
+int open7Bit (CT, char **);
+void close_encoding (CT);
+void free_content (CT);
+char *ct_type_str (int);
+char *ct_subtype_str (int, int);
+const struct str2init *get_ct_init (int);
+const char *ce_str (int);
+const struct str2init *get_ce_method (const char *);
+int parse_header_attrs (const char *, int, char **, CI, int *);
+
+extern int checksw; /* Add Content-MD5 field */