X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/1513f7668c494c4583141d6115669b7198c14556..7b87125e7b885b8985fabeae667deb26091f4e01:/h/mhparse.h diff --git a/h/mhparse.h b/h/mhparse.h index 812b78f5..1dfd7ed8 100644 --- a/h/mhparse.h +++ b/h/mhparse.h @@ -2,8 +2,6 @@ /* * mhparse.h -- definitions for parsing/building of MIME content * -- (mhparse.c/mhbuildsbr.c) - * - * $Id$ */ #define NPARTS 50 @@ -70,6 +68,16 @@ struct cefile { /* * 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 */ @@ -99,7 +107,7 @@ struct Content { 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 */ @@ -164,10 +172,8 @@ struct Content { #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 { @@ -195,6 +201,8 @@ struct part { 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 */ }; @@ -233,6 +241,7 @@ struct exbody { char *eb_server; char *eb_subject; char *eb_body; + char *eb_url; }; /* @@ -244,3 +253,64 @@ struct exbody { #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 */