|
| 1 | +#include "ContentTypes.h" |
| 2 | + |
| 3 | +static inline bool matches_p(const char* str, const char* progmem_str) { |
| 4 | + return strcmp_P(str, progmem_str) == 0; |
| 5 | +} |
| 6 | + |
| 7 | +const __FlashStringHelper* contentTypeFor(const String& path) { |
| 8 | + // Find extension part of path |
| 9 | + auto idx = path.lastIndexOf('.'); |
| 10 | + if (idx < path.length()) { |
| 11 | + auto ext_str = path.begin() + idx + 1; |
| 12 | + |
| 13 | + if (matches_p(ext_str, HTML_EXTENSION)) return FPSTR(CONTENT_TYPE_HTML); |
| 14 | + else if (matches_p(ext_str, HTM_EXTENSION)) return FPSTR(CONTENT_TYPE_HTML); |
| 15 | + else if (matches_p(ext_str, CSS_EXTENSION)) return FPSTR(CONTENT_TYPE_CSS); |
| 16 | + else if (matches_p(ext_str, JSON_EXTENSION)) return FPSTR(CONTENT_TYPE_JSON); |
| 17 | + else if (matches_p(ext_str, JS_EXTENSION)) return FPSTR(CONTENT_TYPE_JAVASCRIPT); |
| 18 | + else if (matches_p(ext_str, PNG_EXTENSION)) return FPSTR(CONTENT_TYPE_PNG); |
| 19 | + else if (matches_p(ext_str, GIF_EXTENSION)) return FPSTR(CONTENT_TYPE_GIF); |
| 20 | + else if (matches_p(ext_str, JPG_EXTENSION)) return FPSTR(CONTENT_TYPE_JPEG); |
| 21 | + else if (matches_p(ext_str, ICO_EXTENSION)) return FPSTR(CONTENT_TYPE_XICON); |
| 22 | + else if (matches_p(ext_str, SVG_EXTENSION)) return FPSTR(CONTENT_TYPE_SVG); |
| 23 | + else if (matches_p(ext_str, EOT_EXTENSION)) return FPSTR(CONTENT_TYPE_EOT); |
| 24 | + else if (matches_p(ext_str, WOFF_EXTENSION)) return FPSTR(CONTENT_TYPE_WOFF); |
| 25 | + else if (matches_p(ext_str, WOFF2_EXTENSION)) return FPSTR(CONTENT_TYPE_WOFF2); |
| 26 | + else if (matches_p(ext_str, TTF_EXTENSION)) return FPSTR(CONTENT_TYPE_TTF); |
| 27 | + else if (matches_p(ext_str, XML_EXTENSION)) return FPSTR(CONTENT_TYPE_XML); |
| 28 | + else if (matches_p(ext_str, PDF_EXTENSION)) return FPSTR(CONTENT_TYPE_PDF); |
| 29 | + else if (matches_p(ext_str, ZIP_EXTENSION)) return FPSTR(CONTENT_TYPE_ZIP); |
| 30 | + else if (matches_p(ext_str, GZIP_EXTENSION)) return FPSTR(CONTENT_TYPE_GZIP); |
| 31 | + } |
| 32 | + return FPSTR(CONTENT_TYPE_PLAIN); |
| 33 | +} |
| 34 | + |
| 35 | +const char CONTENT_TYPE_PLAIN[] PROGMEM = "text/plain"; |
| 36 | +const char HTM_EXTENSION[] PROGMEM = "htm"; |
| 37 | +const char HTML_EXTENSION[] PROGMEM = "html"; |
| 38 | +const char CONTENT_TYPE_HTML[] PROGMEM = "text/html"; |
| 39 | +const char CSS_EXTENSION[] PROGMEM = "css"; |
| 40 | +const char CONTENT_TYPE_CSS[] PROGMEM = "text/css"; |
| 41 | +const char JSON_EXTENSION[] PROGMEM = "json"; |
| 42 | +const char CONTENT_TYPE_JSON[] PROGMEM = "application/json"; |
| 43 | +const char JS_EXTENSION[] PROGMEM = "js"; |
| 44 | +const char CONTENT_TYPE_JAVASCRIPT[] PROGMEM = "application/javascript"; |
| 45 | +const char PNG_EXTENSION[] PROGMEM = "png"; |
| 46 | +const char CONTENT_TYPE_PNG[] PROGMEM = "image/png"; |
| 47 | +const char GIF_EXTENSION[] PROGMEM = "gif"; |
| 48 | +const char CONTENT_TYPE_GIF[] PROGMEM = "image/gif"; |
| 49 | +const char JPG_EXTENSION[] PROGMEM = "jpg"; |
| 50 | +const char CONTENT_TYPE_JPEG[] PROGMEM = "image/jpeg"; |
| 51 | +const char ICO_EXTENSION[] PROGMEM = "ico"; |
| 52 | +const char CONTENT_TYPE_XICON[] PROGMEM = "image/x-icon"; |
| 53 | +const char SVG_EXTENSION[] PROGMEM = "svg"; |
| 54 | +const char CONTENT_TYPE_SVG[] PROGMEM = "image/svg+xml"; |
| 55 | +const char EOT_EXTENSION[] PROGMEM = "eot"; |
| 56 | +const char CONTENT_TYPE_EOT[] PROGMEM = "font/eot"; |
| 57 | +const char WOFF_EXTENSION[] PROGMEM = "woff"; |
| 58 | +const char CONTENT_TYPE_WOFF[] PROGMEM = "font/woff"; |
| 59 | +const char WOFF2_EXTENSION[] PROGMEM = "woff2"; |
| 60 | +const char CONTENT_TYPE_WOFF2[] PROGMEM = "font/woff2"; |
| 61 | +const char TTF_EXTENSION[] PROGMEM = "ttf"; |
| 62 | +const char CONTENT_TYPE_TTF[] PROGMEM = "font/ttf"; |
| 63 | +const char XML_EXTENSION[] PROGMEM = "xml"; |
| 64 | +const char CONTENT_TYPE_XML[] PROGMEM = "text/xml"; |
| 65 | +const char PDF_EXTENSION[] PROGMEM = "pdf"; |
| 66 | +const char CONTENT_TYPE_PDF[] PROGMEM = "application/pdf"; |
| 67 | +const char ZIP_EXTENSION[] PROGMEM = "zip"; |
| 68 | +const char CONTENT_TYPE_ZIP[] PROGMEM = "application/zip"; |
| 69 | +const char GZIP_EXTENSION[] PROGMEM = "gz"; |
| 70 | +const char CONTENT_TYPE_GZIP[] PROGMEM = "application/x-gzip"; |
0 commit comments