X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Fmime_parser.c;h=a7753275afc1ac67928a3fe9802a8ee003e50ed7;hb=5f71f867cba5865e2b359009c5dc60adbefc7762;hp=2b14d7129d9b1f8c79389af76104a42edc369e6c;hpb=d1ff575b169bf1028c9b36bd535b467f00ee2c6a;p=citadel.git diff --git a/libcitadel/lib/mime_parser.c b/libcitadel/lib/mime_parser.c index 2b14d7129..a7753275a 100644 --- a/libcitadel/lib/mime_parser.c +++ b/libcitadel/lib/mime_parser.c @@ -637,3 +637,63 @@ void mime_parser(char *content_start, PostMultiPartCallBack, userdata, dont_decode); } + + + + + + +typedef struct _MimeGuess { + const char *Pattern; + size_t PatternLen; + long PatternOffset; + const char *MimeString; +} MimeGuess; + +MimeGuess MyMimes [] = { + { + "GIF", + 3, + 0, + "image/gif" + }, + { + "\xff\xd8", + 2, + 0, + "image/jpeg" + }, + { + "\x89PNG", + 4, + 0, + "image/png" + }, + { // last... + "", + 0, + 0, + "" + } +}; + + +const char *GuessMimeType(char *data, size_t dlen) +{ + int MimeIndex = 0; + + while (MyMimes[MimeIndex].PatternLen != 0) + { + if ((MyMimes[MimeIndex].PatternLen + + MyMimes[MimeIndex].PatternOffset < dlen) && + strncmp(MyMimes[MimeIndex].Pattern, + &data[MyMimes[MimeIndex].PatternOffset], + MyMimes[MimeIndex].PatternLen) == 0) + { + break; + } + MimeIndex ++; + } + return MyMimes[MimeIndex].MimeString; + +}