#include <h/mh.h>
#include <fcntl.h>
#include <h/signals.h>
-#include <h/md5.h>
#include <errno.h>
#include <signal.h>
-#include <h/mts.h>
#include <h/tws.h>
#include <h/mime.h>
#include <h/mhparse.h>
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
-
-extern int ebcdicsw;
-
-static char ebcdicsafe[0x100] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
static char nib2b64[0x40+1] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
*/
int output_message(CT, char *);
int output_message_fp(CT, FILE *, char *);
-int writeBase64aux(FILE *, FILE *);
/*
** static prototypes
*/
static int output_content(CT, FILE *);
static void output_headers(CT, FILE *);
-static int writeExternalBody(CT, FILE *);
static int write8Bit(CT, FILE *);
static int writeQuoted(CT, FILE *);
static int writeBase64(CT, FILE *);
+static int writeBase64aux(FILE *, FILE *);
/*
output_headers(ct, out);
/*
- ** 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;
-
- /*
** Now output the content bodies.
*/
switch (ct->c_type) {
struct multipart *m;
struct part *part;
- if (ct->c_rfc934)
- putc('\n', out);
-
m = (struct multipart *) ct->c_ctparams;
for (part = m->mp_parts; part; part = part->mp_next) {
CT p = part->mp_part;
case CT_MESSAGE:
putc('\n', out);
- if (ct->c_subtype == MESSAGE_EXTERNAL) {
- struct exbody *e;
-
- e = (struct exbody *) ct->c_ctparams;
- if (output_content(e->eb_content, out) == NOTOK)
- return NOTOK;
-
- /* output phantom body for access-type "mail-server" */
- if (e->eb_body)
- writeExternalBody(ct, out);
- } else {
- result = write8Bit(ct, out);
- }
+ result = write8Bit(ct, out);
break;
/*
/*
-** Write the phantom body for access-type "mail-server".
-*/
-
-static int
-writeExternalBody(CT ct, FILE *out)
-{
- char **ap, **ep, *cp;
- struct exbody *e = (struct exbody *) ct->c_ctparams;
-
- putc('\n', out);
- for (cp = e->eb_body; *cp; cp++) {
- CT ct2 = e->eb_content;
- CI ci2 = &ct2->c_ctinfo;
-
- if (*cp == '\\') {
- switch (*++cp) {
- case 'I':
- if (ct2->c_id) {
- char *dp = trimcpy(ct2->c_id);
-
- fputs(dp, out);
- free(dp);
- }
- continue;
-
- case 'N':
- for (ap = ci2->ci_attrs, ep = ci2->ci_values;
- *ap; ap++, ep++)
- if (!mh_strcasecmp(*ap, "name")) {
- fprintf(out, "%s", *ep);
- break;
- }
- continue;
-
- case 'T':
- fprintf(out, "%s/%s", ci2->ci_type,
- ci2->ci_subtype);
- for (ap = ci2->ci_attrs, ep = ci2->ci_values;
- *ap; ap++, ep++)
- fprintf(out, "; %s=\"%s\"", *ap, *ep);
- continue;
-
- case 'n':
- putc('\n', out);
- continue;
-
- case 't':
- putc('\t', out);
- continue;
-
- case '\0':
- cp--;
- break;
-
- case '\\':
- case '"':
- break;
-
- default:
- putc('\\', out);
- break;
- }
- }
- putc(*cp, out);
- }
- putc('\n', out);
-
- return OK;
-}
-
-
-/*
** Output a content without any transfer encoding
*/
}
switch (*cp) {
- case ' ':
- case '\t':
- putc(*cp, out);
- n++;
- break;
-
- default:
- if (*cp < '!' || *cp > '~' || (ebcdicsw && !ebcdicsafe[*cp & 0xff]))
- goto three_print;
- putc(*cp, out);
- n++;
- break;
-
- case '=':
+ case ' ':
+ case '\t':
+ putc(*cp, out);
+ n++;
+ break;
+
+ default:
+ if (*cp < '!' || *cp > '~')
+ goto three_print;
+ putc(*cp, out);
+ n++;
+ break;
+
+ case '=':
three_print:
- fprintf(out, "=%02X", *cp & 0xff);
- n += 3;
- break;
+ fprintf(out, "=%02X", *cp & 0xff);
+ n += 3;
+ break;
}
}
}
-int
+static int
writeBase64aux(FILE *in, FILE *out)
{
- int cc, n;
+ unsigned int cc, n;
char inbuf[3];
n = BPERLIN;