From: markus schnalke Date: Thu, 12 Apr 2012 16:28:49 +0000 (+0200) Subject: mhbuild: Removed support for creating message/external-body parts. X-Git-Tag: mmh-thesis-end~93 X-Git-Url: http://git.marmaro.de/?p=mmh;a=commitdiff_plain;h=90d53cbbe431a89ac2066a527bbfe46ac0f3cbe7 mhbuild: Removed support for creating message/external-body parts. Although I really like the concept, I remove the support because I haven't seen any such message in my life. Less code through removing hardly used features is more appealing to me than having support for such nice but hardly used features. The world took a different road than the one MIME proposed. --- diff --git a/man/mhbuild.man1 b/man/mhbuild.man1 index babc1b2..9c68f36 100644 --- a/man/mhbuild.man1 +++ b/man/mhbuild.man1 @@ -114,9 +114,8 @@ than one line, e.g., .fi .RE .PP -There are four kinds of directives: +There are three kinds of directives: \*(lqtype\*(rq, -\*(lqexternal-type\*(rq, \*(lqmessage\*(rq (#forw), and \*(lqbegin\*(rq (#begin). .PP @@ -197,55 +196,7 @@ contents should probably be put in the file specified by the environment variable, instead of directly in your user profile. .PP -.B "(2) The \*(lqexternal-type\*(rq directives -are used to provide a MIME -reference to a content, rather than enclosing the contents itself -(for instance, by specifying an ftp site). Hence, instead of -providing a filename as with the type directives, external-parameters -are supplied. These look like regular parameters, so they must be -separated accordingly. For example, -.PP -.RS 5 -.nf -#@application/octet-stream; \\ - type=tar; \\ - conversions=compress \\ - [this is the nmh distribution] \\ - {application; filename="nmh.tar.gz"} \\ - name="nmh.tar.gz"; \\ - directory="/pub/nmh"; \\ - site="ftp.math.gatech.edu"; \\ - access-type=anon-ftp; \\ - mode="image" -.fi -.RE -.PP -You must give a description string to separate the content parameters -from the external-parameters (although this string may be empty). -This description string is specified by enclosing it within -\*(lq[]\*(rq. A disposition string, to appear in a -\*(lqContent-Disposition\*(rq header, may appear in the optional -\*(lq{}\*(rq. -.PP -These parameters are of the form: -.PP -.RS 5 -.nf -.ta \w'access-type= 'u -access-type= usually \fIanon-ftp\fR or \fImail-server\fR -name= filename -permission= read-only or read-write -site= hostname -directory= directoryname (optional) -mode= usually \fIascii\fR or \fIimage\fR (optional) -size= number of octets -server= mailbox -subject= subject to send -body= command to send for retrieval -.fi -.RE -.PP -.B "(3) The \*(lqmessage\*(rq directive (#forw) +.B "(2) The \*(lqmessage\*(rq directive (#forw) is used to specify a message or group of messages to include. You may optionally specify the name of the folder and which messages are to be forwarded. If a folder is not @@ -284,7 +235,7 @@ do not contain encapsulated messages themselves. The drawback of this approach is that the encapsulations are generated by placing an extra newline at the end of the body of each message. .PP -.B "(4) The \*(lqbegin\*(rq directive +.B "(3) The \*(lqbegin\*(rq directive is used to create a multipart content. When using the \*(lqbegin\*(rq directive, you must specify at least one content between the begin and end pairs. @@ -522,15 +473,6 @@ directive ::= "#" type "/" subtype [ filename ] EOL - | "#@" type "/" subtype - 0*(";" attribute "=" value) - [ "(" comment ")" ] - [ "<" id ">" ] - [ "[" description "]" ] - [ "{" disposition "}" ] - external-parameters - EOL - | "#forw" [ "<" id ">" ] [ "[" description "]" ] diff --git a/uip/mhbuild.c b/uip/mhbuild.c index e12f272..f659a30 100644 --- a/uip/mhbuild.c +++ b/uip/mhbuild.c @@ -664,7 +664,7 @@ fgetstr(char *s, int n, FILE *stream) static int user_content(FILE *in, char *file, char *buf, CT *ctp) { - int extrnal, vrsn; + int vrsn; unsigned char *cp; char **ap; char buffer[BUFSIZ]; @@ -845,11 +845,13 @@ call_init: ** must be some type of explicit directive. */ - /* check if directive is external-type */ - extrnal = (buf[1] == '@'); + if (buf[1] == '@') { + adios(NULL, "The #@ directive i.e. message/external-body " + "is not supported anymore."); + } /* parse directive */ - if (get_ctinfo(buf + (extrnal ? 2 : 1), ct, 1) == NOTOK) + if (get_ctinfo(buf+1, ct, 1) == NOTOK) done(1); /* check directive against the list of MIME types */ @@ -861,8 +863,7 @@ call_init: ** Check if the directive specified a valid type. ** This will happen if it was one of the following forms: ** - ** #type/subtype (or) - ** #@type/subtype + ** #type/subtype */ if (s2i->si_key) { if (!ci->ci_subtype) @@ -874,10 +875,11 @@ call_init: /* NOTREACHED */ case CT_MESSAGE: - if (!mh_strcasecmp(ci->ci_subtype, "partial")) + if (!mh_strcasecmp(ci->ci_subtype, "partial") || + !mh_strcasecmp(ci->ci_subtype, + "external-body")) { adios(NULL, "sorry, \"#%s/%s\" isn't supported", ci->ci_type, ci->ci_subtype); - if (!mh_strcasecmp(ci->ci_subtype, "external-body")) - adios(NULL, "use \"#@type/subtype ... [] ...\" instead of \"#%s/%s\"", ci->ci_type, ci->ci_subtype); + } use_forw: adios(NULL, "use \"#forw [+folder] [msgs]\" instead of \"#%s/%s\"", ci->ci_type, ci->ci_subtype); /* NOTREACHED */ @@ -888,52 +890,6 @@ use_forw: break; } - /* - ** #@type/subtype (external types directive) - */ - if (extrnal) { - struct exbody *e; - CT p; - - if (!ci->ci_magic) - adios(NULL, "need external information for \"#@%s/%s\"", ci->ci_type, ci->ci_subtype); - p = ct; - - snprintf(buffer, sizeof(buffer), "message/external-body; %s", ci->ci_magic); - free(ci->ci_magic); - ci->ci_magic = NULL; - - /* - ** Since we are using the current Content structure to - ** hold information about the type of the external - ** reference, we need to create another Content - ** structure for the message/external-body to wrap - ** it in. - */ - if ((ct = (CT) calloc(1, sizeof(*ct))) == NULL) - adios(NULL, "out of memory"); - *ctp = ct; - ci = &ct->c_ctinfo; - if (get_ctinfo(buffer, ct, 0) == NOTOK) - done(1); - ct->c_type = CT_MESSAGE; - ct->c_subtype = MESSAGE_EXTERNAL; - - if ((e = (struct exbody *) - calloc(1, sizeof(*e))) == NULL) - adios(NULL, "out of memory"); - ct->c_ctparams = (void *) e; - - e->eb_parent = ct; - e->eb_content = p; - p->c_ctexbody = e; - - if (params_external(ct, 1) == NOTOK) - done(1); - - return OK; - } - /* Handle [file] argument */ if (ci->ci_magic) { /* check if specifies command to execute */ @@ -976,10 +932,6 @@ use_forw: return OK; } - if (extrnal) - adios(NULL, "external definition not allowed for \"#%s\"", - ci->ci_type); - /* ** Message directive ** #forw [+folder] [msgs] @@ -1544,12 +1496,7 @@ scan_content(CT ct) checkebcdic = 0; checklinelen = 0; checklinespace = 0; - - /* don't check anything for message/external */ - if (ct->c_subtype == MESSAGE_EXTERNAL) - checkboundary = 0; - else - checkboundary = 1; + checkboundary = 1; break; case CT_AUDIO: @@ -1713,7 +1660,7 @@ scan_content(CT ct) static int build_headers(CT ct) { - int cc, mailbody, len; + int cc, len; char **ap, **ep; char *np, *vp, buffer[BUFSIZ]; CI ci = &ct->c_ctinfo; @@ -1756,18 +1703,11 @@ build_headers(CT ct) len = strlen(TYPE_FIELD) + strlen(ci->ci_type) + strlen(ci->ci_subtype) + 3; - mailbody = ct->c_type == CT_MESSAGE && - ct->c_subtype == MESSAGE_EXTERNAL && - ((struct exbody *) ct->c_ctparams)->eb_body; - /* ** Append the attribute/value pairs to ** the end of the Content-Type line. */ for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) { - if (mailbody && !mh_strcasecmp(*ap, "body")) - continue; - vp = add(";", vp); len++; @@ -1831,14 +1771,6 @@ build_headers(CT ct) skip_headers: /* - ** If this is the internal content structure for a - ** "message/external", then we are done with the - ** headers (since it has no body). - */ - if (ct->c_ctexbody) - return OK; - - /* ** output the Content-Transfer-Encoding */ switch (ct->c_encoding) { @@ -1906,15 +1838,6 @@ skip_headers: } break; - case CT_MESSAGE: - if (ct->c_subtype == MESSAGE_EXTERNAL) { - struct exbody *e; - - e = (struct exbody *) ct->c_ctparams; - build_headers(e->eb_content); - } - break; - default: /* Nothing to do */ break;