X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=handler.c;h=0746269454b745e30812fad12cac7bdf6532387f;hp=27bfb08ba53f13b3cd89c7e92ec7e232f60a45ed;hb=f5a370338d87eba00bc8696636a90f6c50b05d14;hpb=688ac22f746f785c27ac99ac86aa85a3035a3638 diff --git a/handler.c b/handler.c index 27bfb08..0746269 100644 --- a/handler.c +++ b/handler.c @@ -22,11 +22,9 @@ #include "keymap.h" #include "copy.h" #include "charset.h" -#include +#include "crypt.h" #include "state.h" #include "attach.h" -#include "lib.h" - typedef int handler_f (BODY *, STATE *); typedef handler_f *handler_t; @@ -769,7 +767,7 @@ static int alternative_handler (BODY * a, STATE * s) b->parts = mutt_parse_multipart(s->fpin, parameter_getval(a->parameter, "boundary"), (long)st.st_size, - !ascii_strcasecmp("digest", a->subtype)); + mime_which_token(a->subtype, -1) == MIME_DIGEST); } else b = a; @@ -839,18 +837,27 @@ static int alternative_handler (BODY * a, STATE * s) b = a; while (b) { if (b->type == TYPETEXT) { - if (!ascii_strcasecmp ("plain", b->subtype) && type <= TXTPLAIN) { - choice = b; - type = TXTPLAIN; - } - else if (!ascii_strcasecmp ("enriched", b->subtype) - && type <= TXTENRICHED) { - choice = b; - type = TXTENRICHED; - } - else if (!ascii_strcasecmp ("html", b->subtype) && type <= TXTHTML) { - choice = b; - type = TXTHTML; + switch (mime_which_token(b->subtype, -1)) { + case MIME_PLAIN: + if (type <= TXTPLAIN) { + choice = b; + type = TXTPLAIN; + } + break; + case MIME_ENRICHED: + if (type <= TXTENRICHED) { + choice = b; + type = TXTENRICHED; + } + break; + case MIME_HTML: + if (type <= TXTHTML) { + choice = b; + type = TXTHTML; + } + break; + default: + break; } } b = b->next; @@ -946,16 +953,15 @@ int mutt_can_decode (BODY * a) return (1); else if (a->type == TYPEMULTIPART) { BODY *p; + int tok = mime_which_token(a->subtype, -1); - if (ascii_strcasecmp (a->subtype, "signed") == 0 || - ascii_strcasecmp (a->subtype, "encrypted") == 0) - return (1); + if (tok == MIME_SIGNED || tok == MIME_ENCRYPTED) + return 1; for (p = a->parts; p; p = p->next) { if (mutt_can_decode (p)) return (1); } - } else if (a->type == TYPEAPPLICATION) { if (mutt_is_application_pgp(a)) @@ -983,10 +989,10 @@ static int multipart_handler (BODY * a, STATE * s) b->parts = mutt_parse_multipart(s->fpin, parameter_getval(a->parameter, "boundary"), (long)st.st_size, - !ascii_strcasecmp("digest", a->subtype)); - } - else + mime_which_token(a->subtype, -1) == MIME_DIGEST); + } else { b = a; + } for (p = b->parts, count = 1; p; p = p->next, count++) { if (s->flags & M_DISPLAY) { @@ -1021,8 +1027,7 @@ static int multipart_handler (BODY * a, STATE * s) } rc = mutt_body_handler (p, s); state_putc ('\n', s); - if (rc || ((s->flags & M_REPLYING) - && (option (OPTINCLUDEONLYFIRST)) && (s->flags & M_FIRSTDONE))) + if (rc) break; } @@ -1171,7 +1176,7 @@ static int external_body_handler (BODY * b, STATE * s) else expire = -1; - if (!ascii_strcasecmp (access_type, "x-mutt-deleted")) { + if (mime_which_token(access_type, -1) == MIME_X_MUTT_DELETED) { if (s->flags & (M_DISPLAY | M_PRINTING)) { char *length; char pretty_size[10]; @@ -1244,12 +1249,12 @@ void mutt_decode_attachment (BODY * b, STATE * s) const char *charset = parameter_getval(b->parameter, "charset"); if (!charset) - charset = charset_getfirst(AssumedCharset); - if (charset && Charset) - cd = mutt_iconv_open (Charset, charset, M_ICONV_HOOK_FROM); + charset = charset_getfirst(mod_cset.assumed_charset); + if (charset && mod_cset.charset) + cd = mutt_iconv_open (mod_cset.charset, charset, M_ICONV_HOOK_FROM); } else { if (b->file_charset) - cd = mutt_iconv_open (Charset, b->file_charset, M_ICONV_HOOK_FROM); + cd = mutt_iconv_open (mod_cset.charset, b->file_charset, M_ICONV_HOOK_FROM); } } @@ -1290,6 +1295,7 @@ int mutt_body_handler (BODY * b, STATE * s) int rc = 0; int oflags = s->flags; + int tok = mime_which_token(b->subtype, -1); /* first determine which handler to use to process this part */ @@ -1304,7 +1310,7 @@ int mutt_body_handler (BODY * b, STATE * s) rfc1524_entry_delete(&entry); } else if (b->type == TYPETEXT) { - if (ascii_strcasecmp ("plain", b->subtype) == 0) { + if (tok == MIME_PLAIN) { /* avoid copying this part twice since removing the transfer-encoding is * the only operation needed. */ @@ -1316,7 +1322,7 @@ int mutt_body_handler (BODY * b, STATE * s) else plaintext = 1; } - else if (ascii_strcasecmp ("enriched", b->subtype) == 0) + else if (tok == MIME_ENRICHED) handler = text_enriched_handler; else /* text body type without a handler */ plaintext = 1; @@ -1324,17 +1330,17 @@ int mutt_body_handler (BODY * b, STATE * s) else if (b->type == TYPEMESSAGE) { if (mutt_is_message_type (b)) handler = message_handler; - else if (!ascii_strcasecmp ("delivery-status", b->subtype)) + else if (tok == MIME_DELIVERY_STATUS) plaintext = 1; - else if (!ascii_strcasecmp ("external-body", b->subtype)) + else if (tok == MIME_EXTERNAL_BODY) handler = external_body_handler; } else if (b->type == TYPEMULTIPART) { char *p; - if (ascii_strcasecmp ("alternative", b->subtype) == 0) + if (tok == MIME_ALTERNATIVE) handler = alternative_handler; - else if (ascii_strcasecmp ("signed", b->subtype) == 0) { + else if (tok == MIME_SIGNED) { p = parameter_getval(b->parameter, "protocol"); if (!p) @@ -1343,14 +1349,12 @@ int mutt_body_handler (BODY * b, STATE * s) else if (s->flags & M_VERIFY) handler = mutt_signed_handler; } - else if (m_strcasecmp("encrypted", b->subtype) == 0) { + else if (tok == MIME_ENCRYPTED) { p = parameter_getval(b->parameter, "protocol"); if (!p) - mutt_error (_ - ("Error: multipart/encrypted has no protocol parameter!")); - - else if (ascii_strcasecmp ("application/pgp-encrypted", p) == 0) + mutt_error(_("Error: multipart/encrypted has no protocol parameter!")); + else if (mime_which_token(p, -1) == MIME_APPLICATION_PGP_ENCRYPTED) handler = crypt_pgp_encrypted_handler; } @@ -1364,7 +1368,6 @@ int mutt_body_handler (BODY * b, STATE * s) handler = crypt_smime_application_smime_handler; } - if (plaintext || handler) { fseeko (s->fpin, b->offset, 0); @@ -1379,7 +1382,7 @@ int mutt_body_handler (BODY * b, STATE * s) if (!plaintext) { /* decode to a tempfile, saving the original destination */ fp = s->fpout; - s->fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + s->fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(mod_core.tmpdir), NULL); if (!s->fpout) { mutt_error _("Unable to open temporary file!"); goto bail; @@ -1434,7 +1437,6 @@ int mutt_body_handler (BODY * b, STATE * s) s->fpin = fp; } } - s->flags |= M_FIRSTDONE; } else if (s->flags & M_DISPLAY) { state_mark_attach (s); @@ -1451,7 +1453,6 @@ int mutt_body_handler (BODY * b, STATE * s) } bail: - s->flags = oflags | (s->flags & M_FIRSTDONE); - + s->flags = oflags; return (rc); }