mhbuild: Removed support for creating message/external-body parts.
authormarkus schnalke <meillo@marmaro.de>
Thu, 12 Apr 2012 16:28:49 +0000 (18:28 +0200)
committermarkus schnalke <meillo@marmaro.de>
Thu, 12 Apr 2012 16:28:49 +0000 (18:28 +0200)
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.

man/mhbuild.man1
uip/mhbuild.c

index babc1b2..9c68f36 100644 (file)
@@ -114,9 +114,8 @@ than one line, e.g.,
 .fi
 .RE
 .PP
 .fi
 .RE
 .PP
-There are four kinds of directives:
+There are three kinds of directives:
 \*(lqtype\*(rq,
 \*(lqtype\*(rq,
-\*(lqexternal-type\*(rq,
 \*(lqmessage\*(rq (#forw),
 and \*(lqbegin\*(rq (#begin).
 .PP
 \*(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
 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
 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
 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.
 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
 
                          [ filename ]
                          EOL
 
-                   | "#@" type "/" subtype
-                         0*(";" attribute "=" value)
-                         [ "(" comment ")" ]
-                         [ "<" id ">" ]
-                         [ "[" description "]" ]
-                         [ "{" disposition "}" ]
-                         external-parameters
-                         EOL
-
                    | "#forw"
                          [ "<" id ">" ]
                          [ "[" description "]" ]
                    | "#forw"
                          [ "<" id ">" ]
                          [ "[" description "]" ]
index e12f272..f659a30 100644 (file)
@@ -664,7 +664,7 @@ fgetstr(char *s, int n, FILE *stream)
 static int
 user_content(FILE *in, char *file, char *buf, CT *ctp)
 {
 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];
        unsigned char *cp;
        char **ap;
        char buffer[BUFSIZ];
@@ -845,11 +845,13 @@ call_init:
        ** must be some type of explicit directive.
        */
 
        ** 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 */
 
        /* 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 */
                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:
        **
        ** 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)
        */
        if (s2i->si_key) {
                if (!ci->ci_subtype)
@@ -874,10 +875,11 @@ call_init:
                        /* NOTREACHED */
 
                case CT_MESSAGE:
                        /* 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);
                                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 */
 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;
                }
 
                        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 */
                /* Handle [file] argument */
                if (ci->ci_magic) {
                        /* check if specifies command to execute */
@@ -976,10 +932,6 @@ use_forw:
                return OK;
        }
 
                return OK;
        }
 
-       if (extrnal)
-               adios(NULL, "external definition not allowed for \"#%s\"",
-                               ci->ci_type);
-
        /*
        ** Message directive
        ** #forw [+folder] [msgs]
        /*
        ** Message directive
        ** #forw [+folder] [msgs]
@@ -1544,12 +1496,7 @@ scan_content(CT ct)
                checkebcdic = 0;
                checklinelen = 0;
                checklinespace = 0;
                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:
                break;
 
        case CT_AUDIO:
@@ -1713,7 +1660,7 @@ scan_content(CT ct)
 static int
 build_headers(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;
        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;
 
        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++) {
        /*
        ** 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++;
 
                vp = add(";", vp);
                len++;
 
@@ -1831,14 +1771,6 @@ build_headers(CT ct)
 
 skip_headers:
        /*
 
 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) {
        ** output the Content-Transfer-Encoding
        */
        switch (ct->c_encoding) {
@@ -1906,15 +1838,6 @@ skip_headers:
        }
                break;
 
        }
                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;
        default:
                /* Nothing to do */
                break;