#include <string.h>
#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