diff options
Diffstat (limited to 'rfc2045')
| -rw-r--r-- | rfc2045/rfc2045reply.c | 93 |
1 files changed, 69 insertions, 24 deletions
diff --git a/rfc2045/rfc2045reply.c b/rfc2045/rfc2045reply.c index 3ec0728..28726dc 100644 --- a/rfc2045/rfc2045reply.c +++ b/rfc2045/rfc2045reply.c @@ -908,6 +908,8 @@ static char *mlcheck(struct rfc2045_mkreplyinfo *ri, const char *); static int replydsn(struct rfc2045_mkreplyinfo *); static int replyfeedback(struct rfc2045_mkreplyinfo *); +static int replydraft(struct rfc2045_mkreplyinfo *); +static void copyheaders(struct rfc2045_mkreplyinfo *); static int mkreply(struct rfc2045_mkreplyinfo *ri) { @@ -1364,6 +1366,15 @@ static int mkreply(struct rfc2045_mkreplyinfo *ri) free(subject); } + if (strcmp(ri->replymode, "replydraft") == 0) + { + writes(ri, "\n"); + if (whowrote) + free(whowrote); + whowrote=0; + return replydraft(ri); + } + writes(ri, "\nMime-Version: 1.0\n"); boundary=NULL; @@ -1422,6 +1433,7 @@ static int mkreply(struct rfc2045_mkreplyinfo *ri) { writes(ri, whowrote); free(whowrote); + whowrote=0; writes(ri, "\n\n"); } if (SRC_SEEK(ri->src, start_body) == (off_t)-1) @@ -1443,9 +1455,6 @@ static int mkreply(struct rfc2045_mkreplyinfo *ri) { /* replydsn or replyfeedback */ - char *header, *value; - struct rfc2045headerinfo *hi; - writes(ri, "\n--"); writes(ri, boundary); writes(ri, "\nContent-Type: message/"); @@ -1488,27 +1497,7 @@ static int mkreply(struct rfc2045_mkreplyinfo *ri) } else { - writes(ri, "\nContent-Type: text/rfc822-headers; charset=\"iso-8859-1\"\n" - "Content-Disposition: attachment\n" - "Content-Transfer-Encoding: 8bit\n\n" - ); - - hi=rfc2045header_start(ri->src, ri->rfc2045partp); - - while (hi) - { - if (rfc2045header_get(hi, &header, &value, - RFC2045H_NOLC) || !header) - { - rfc2045header_end(hi); - break; - } - - writes(ri, header); - writes(ri, ": "); - writes(ri, value); - writes(ri, "\n"); - } + copyheaders(ri); } writes(ri, "\n--"); writes(ri, boundary); @@ -1530,6 +1519,62 @@ static void dsn_arrival_date(struct rfc2045_mkreplyinfo *ri) writes(ri, "\n"); } +static void copyheaders(struct rfc2045_mkreplyinfo *ri) +{ + struct rfc2045headerinfo *hi; + char *header, *value; + + + writes(ri, "\nContent-Type: text/rfc822-headers; charset=\"iso-8859-1\"\n" + "Content-Disposition: attachment\n" + "Content-Transfer-Encoding: 8bit\n\n" + ); + + hi=rfc2045header_start(ri->src, ri->rfc2045partp); + + while (hi) + { + if (rfc2045header_get(hi, &header, &value, + RFC2045H_NOLC) || !header) + { + rfc2045header_end(hi); + break; + } + + writes(ri, header); + writes(ri, ": "); + writes(ri, value); + writes(ri, "\n"); + } +} + +static int replydraft(struct rfc2045_mkreplyinfo *ri) +{ + char *boundary=rfc2045_mk_boundary(ri->rfc2045partp, ri->src); + if (!boundary) + return (-1); + + writes(ri, "Content-Type: multipart/mixed; boundary=\""); + writes(ri, boundary); + writes(ri, "\"\n\n"); + writes(ri, RFC2045MIMEMSG); + writes(ri, "\n--"); + writes(ri, boundary); + writes(ri, "\n"); + + if (ri->content_specify) + (*ri->content_specify)(ri->voidarg); + + writes(ri, "\n--"); + writes(ri, boundary); + copyheaders(ri); + writes(ri, "\n--"); + writes(ri, boundary); + writes(ri, "--\n"); + free(boundary); + return 0; +} + static int replydsn(struct rfc2045_mkreplyinfo *ri) { dsn_arrival_date(ri); |
