FreeCalypso > hg > falcon-mail-tools
diff f-demime/finish.c @ 0:7e0d08176f32
f-demime starting code
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 06 May 2023 06:14:03 +0000 |
parents | |
children | 612c4d0df768 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/f-demime/finish.c Sat May 06 06:14:03 2023 +0000 @@ -0,0 +1,74 @@ +/* + * This module implements the handling at the end of entity body input. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include "defs.h" + +extern enum msg_state msg_state; +extern char cont_type_buf[HDR_BUF_SIZE], cont_te_buf[HDR_BUF_SIZE]; +extern int got_cont_type, got_cont_te; +extern int b64_err_flag, b64_nonempty, qpdec_err_flag; + +static void +check_b64_err() +{ + if (b64_err_flag) + puts("X-Fdemime-Error: bad base64 data"); +} + +static void +check_qpdec_err() +{ + if (qpdec_err_flag) + puts("X-Fdemime-Error: bad quoted-printable data"); +} + +void +finish_msg_body() +{ + switch (msg_state) { + case MSG_STATE_HEADER: + if (got_cont_type) + fputs(cont_type_buf, stdout); + if (got_cont_te) + fputs(cont_te_buf, stdout); + return; + case MSG_STATE_PTEXT_B64: + base64_dec_finish(); + check_b64_err(); + ptext_conv_finish(); + ptext_mark_transform("decode-base64"); + putchar('\n'); + ptext_emit_output(); + return; + case MSG_STATE_PTEXT_QP: + check_qpdec_err(); + ptext_conv_finish(); + ptext_mark_transform("decode-qp"); + putchar('\n'); + ptext_emit_output(); + return; + case MSG_STATE_BLOB_B64: + base64_dec_finish(); + check_b64_err(); + putchar('\n'); + attach_out_finish(); + if (b64_nonempty) + puts("[base64 blob stripped]"); + putchar('\n'); + return; + case MSG_STATE_B64_TO_QP: + base64_dec_finish(); + check_b64_err(); + b2q_conv_finish(); + puts("X-Fdemime-Transform: base64-to-qp"); + puts("Content-Transfer-Encoding: quoted-printable"); + putchar('\n'); + b2q_emit_output(); + return; + } +}