#include#include "mime.h"static STR_MIME_MAP mime_map[]= { MIME_MAP(MIME_STR_GEN) };void get_mime_type(const char* filename, EN_MIME_TYPE* filetype){ int i =0; for(i=0; i<= MIME_ELSE; i++) { if(strstr(filename, mime_map[i].extension)) { *filetype = (EN_MIME_TYPE)i; break; } if( i == MIME_ELSE) *filetype = MIME_ELSE; } }char* get_resp_type(EN_MIME_TYPE filetype){ if(filetype > MIME_ELSE || filetype < 0) return NULL; return mime_map[filetype].mimetype;}
#ifndef __MIME__H#define __MIME__H#define MIME_MAP(xx)\ xx(HTML, ".html", "text/html\n")\ xx(HTM, ".htm", "text/html\n")\ xx(XML, ".xml", "text/xml\n")\ xx(IMAGE_GIF, ".gif", "image/gif\n")\ xx(IMAGE_JPG, ".jpg", "image/jpeg\n")\ xx(IMAGE_PNG, ".png", "image/png\n")\ xx(TEXT, ".txt", "text/html\n")\ xx(MP3, ".mp3", "audio/x-mpeg\n")\ xx(ELSE, "*", "text/plain\n")\#define MIME_ENUM_GEN(n, s, t) MIME_##n,#define MIME_STR_GEN(n, s, t) {MIME_##n, s, t},typedef enum en_mine_type{ MIME_MAP(MIME_ENUM_GEN)}EN_MIME_TYPE;typedef struct str_mime_map{ EN_MIME_TYPE entype; char* extension; char* mimetype;}STR_MIME_MAP;void get_mime_type(const char* filename, EN_MIME_TYPE* filetype);char* get_resp_type(EN_MIME_TYPE filetype);//typedef struct str_mime_map STR_MIME_MAP;#endif