X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/b43e55a89e0fd66e1bf968fed25feacfbd045514..63621a81d16ab743de6b57d47578a9a2c670ad22:/h/mhparse.h diff --git a/h/mhparse.h b/h/mhparse.h index d165a63b..3b4021f5 100644 --- a/h/mhparse.h +++ b/h/mhparse.h @@ -1,13 +1,7 @@ - -/* - * mhparse.h -- definitions for parsing/building of MIME content +/* mhparse.h -- definitions for parsing/building of MIME content * -- (mhparse.c/mhbuildsbr.c) */ -#define NPARTS 50 -#define NTYPES 20 -#define NPARMS 10 - /* * Abstract type for header fields */ @@ -87,9 +81,29 @@ struct cefile { * 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 + * A struct multipart contains (among other things) a linked list * of struct part elements, and THOSE contain a pointer to the sub-part's * Content structure. + * + * An extra note for message/external-body parts. The enclosing + * content structure is marked as a message/external-body; the c_ctparams + * contains a pointer to a struct exbody, which contains a pointer to + * (among other things) the "real" content (e.g., application/octet-stream). + * The "real" content structure has the c_ctexbody pointer back to the + * same struct exbody sees in the enclosing content structure (the struct + * exbody contains parent pointers if you need to traverse up the content + * structure). Hopefully this makes it clearer: + * + * Enclosing content: + * Type: message/external-body + * c_ctparams: pointer to "struct exbody" + * c_ctexbody: NULL + * + * "Real" content: + * Type: application/octet-stream (or whatever) + * c_ctparams: NULL + * c_ctexbody: pointer to "struct exbody" + * */ struct Content { /* source (read) file */ @@ -141,7 +155,7 @@ struct Content { SizeCEFunc c_cesizefnx; /* size of decoded contents */ int c_umask; /* associated umask */ - int c_rfc934; /* rfc934 compatibility flag */ + int c_rfc934; /* RFC 934 compatibility flag */ char *c_showproc; /* default, if not in profile */ char *c_termproc; /* for charset madness... */ @@ -193,6 +207,10 @@ struct Content { /* Structure for text content */ struct text { int tx_charset; /* flag for character set */ + int lf_line_endings; /* Whether to use CR LF (0) or LF (1) line + endings. The meaning of 0 was selected so + that CR LF is the default, in accordance + with RFC 2046, Sec. 4.1.1, Par. 1. */ }; /* @@ -205,6 +223,7 @@ struct text { #define MULTI_ALTERNATE 0x02 #define MULTI_DIGEST 0x03 #define MULTI_PARALLEL 0x04 +#define MULTI_RELATED 0x05 /* Structure for subparts of a multipart content */ struct part { @@ -334,24 +353,15 @@ 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 *); +char *ct_type_str (int) CONST; +char *ct_subtype_str (int, int) CONST; +int ct_str_type (const char *) PURE; +int ct_str_subtype (int, const char *) PURE; +const struct str2init *get_ct_init (int) PURE; +const char *ce_str (int) CONST; +const struct str2init *get_ce_method (const char *) PURE; char *content_charset (CT); -int convert_charset (CT, char *, int *); - -/* - * Given a content structure, return true if the content has a disposition - * of "inline". - * - * Arguments are: - * - * ct - Content structure to examine - */ -int is_inline(CT ct); +void reverse_alternative_parts (CT); /* * Given a list of messages, display information about them on standard @@ -389,7 +399,7 @@ int list_content(CT ct, int toplevel, int realsize, int verbose, int debug, int dispo); /* - * Display content-appropriate information on MIME parts, decending recursively + * Display content-appropriate information on MIME parts, descending recursively * into multipart content if appropriate. Uses list_content() for displaying * generic information. * @@ -419,6 +429,21 @@ int list_switch(CT ct, int toplevel, int realsize, int verbose, int debug, char *output_params(size_t initialwidth, PM params, int *offsetout, int external); +/* + * Encode a parameter value using RFC 2231 encode. + * + * Arguments are: + * + * pm - PM containing the parameter value and related info. + * output - Output buffer. + * len - Size, in octets, of output buffer. + * valuelen - Number of characters in the value + * valueoff - Offset into value field (pm->pm_value). + * index - If 0, output character set and language tag. + */ +size_t encode_param(PM pm, char *output, size_t len, size_t valuelen, + size_t valueoff, int index); + /* * Add a parameter to the parameter linked list. * @@ -482,23 +507,29 @@ char *get_param(PM first, const char *name, char replace, int fetchonly); */ char *get_param_value(PM pm, char replace); +extern int checksw; /* Add Content-MD5 field */ + /* - * Display MIME message(s) on standard out. - * - * Arguments are: - * - * cts - NULL terminated array of CT structures for messages - * to display - * concat - If true, concatenate all MIME parts. If false, show each - * MIME part under a separate pager. - * textonly - If true, only display "text" MIME parts - * inlineonly - If true, only display MIME parts that are marked with - * a disposition of "inline" (includes parts that lack a - * Content-Disposition header). - * markerform - The name of a file containg mh-format(5) code used to - * display markers about non-displayed MIME parts. + * mhstore + * Put it here because it uses the CT typedef. */ -void show_all_messages(CT *cts, int concat, int textonly, int inlineonly, - char *markerform); - -extern int checksw; /* Add Content-MD5 field */ +typedef struct mhstoreinfo *mhstoreinfo_t; +mhstoreinfo_t mhstoreinfo_create(CT *, char *, const char *, int, int); +int mhstoreinfo_files_not_clobbered(const mhstoreinfo_t) PURE; +void mhstoreinfo_free(mhstoreinfo_t); +void store_all_messages (mhstoreinfo_t); + +extern bool skip_mp_cte_check; +extern bool suppress_bogus_mp_content_warning; +extern bool bogus_mp_content; +extern bool suppress_extraneous_trailing_semicolon_warning; + +extern bool suppress_multiple_mime_version_warning; + +#define NPREFS 20 +typedef struct { + char *type; + char *subtype; +} mime_type_subtype; +extern mime_type_subtype mime_preference[NPREFS]; +extern int npreferred;