一个简单的wed服务器SHTTPD(7)———— SHTTPD内容类型的实现
2015-08-12 13:34
591 查看
[code]//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191@qq.com //@brief: SHTTPD内容类型的实现 #include "lcw_shttpd.h" //定义的内容类型格式如下 enum{ MINET_HTML, MINET_HTM, MINET_TXT, MINET_CSS, MINET_ICO, MINET_GIF, MINET_JPG, MINET_JPEG, MINET_PNG, MINET_SVG, MINET_TORRENT, MINET_W***, MINET_MP3, MINET_MID, MINET_M3U, MINET_RAM, MINET_RA, MINET_DOC, MINET_EXE, MINET_ZIP, MINET_XLS, MINET_TGZ, MINET_TARGZ, MINET_TAR, MINET_GZ, MINET_ARJ, MINET_RAR, MINET_RTF, MINET_PDF, MINET_SWF, MINET_MPG, MINET_MPEG, MINET_ASF, MINET_***I, MINET_BMP }; struct mine_type builtin_mime_types[] = { {"html", MINET_HTML, 4, "text/html" }, {"htm", MINET_HTM, 3, "text/html" }, {"txt", MINET_TXT, 3, "text/plain" }, {"css", MINET_CSS, 3, "text/css" }, {"ico", MINET_ICO, 3, "image/x-icon" }, {"gif", MINET_GIF, 3, "image/gif" }, {"jpg", MINET_JPG, 3, "image/jpeg" }, {"jpeg", MINET_JPEG, 4, "image/jpeg" }, {"png", MINET_PNG, 3, "image/png" }, {"svg", MINET_SVG, 3, "image/svg+xml" }, {"torrent", MINET_TORRENT, 7, "application/x-bittorrent" }, {"wav", MINET_W***, 3, "audio/x-wav" }, {"mp3", MINET_MP3, 3, "audio/x-mp3" }, {"mid", MINET_MID, 3, "audio/mid" }, {"m3u", MINET_M3U, 3, "audio/x-mpegurl" }, {"ram", MINET_RAM, 3, "audio/x-pn-realaudio" }, {"ra", MINET_RA, 2, "audio/x-pn-realaudio" }, {"doc", MINET_DOC, 3, "application/msword", }, {"exe", MINET_EXE, 3, "application/octet-stream" }, {"zip", MINET_ZIP, 3, "application/x-zip-compressed" }, {"xls", MINET_XLS, 3, "application/excel" }, {"tgz", MINET_TGZ, 3, "application/x-tar-gz" }, {"tar.gz", MINET_TARGZ,6, "application/x-tar-gz" }, {"tar", MINET_TAR, 3, "application/x-tar" }, {"gz", MINET_GZ, 2, "application/x-gunzip" }, {"arj", MINET_ARJ, 3, "application/x-arj-compressed" }, {"rar", MINET_RAR, 3, "application/x-arj-compressed" }, {"rtf", MINET_RTF, 3, "application/rtf" }, {"pdf", MINET_PDF, 3, "application/pdf" }, {"swf", MINET_SWF, 3, "application/x-shockwave-flash" }, {"mpg", MINET_MPG, 3, "video/mpeg" }, {"mpeg", MINET_MPEG, 4, "video/mpeg" }, {"asf", MINET_ASF, 3, "video/x-ms-asf" }, {"avi", MINET_***I, 3, "video/x-msvideo" }, {"bmp", MINET_BMP, 3, "image/bmp" }, {NULL, -1, 0, NULL } }; /****************************************************** 函数名:Mine_Type(char *uri, int len, struct worker_ctl *wctl) 参数: 功能:根据输入的扩展名查找内容类型中的匹配项 *******************************************************/ struct mine_type* Mine_Type(char *uri, int len, struct worker_ctl *wctl) { DBGPRINT("LCW==>Mine_Type\n"); int i = 0; //extern void *memchr(const void *buf, int ch, size_t count); //用法:#include <string.h> //功能:从buf所指内存区域的前count个字节查找字符ch。 char *ext = memchr(uri, '.', len);//查找扩展名的位置 struct mine_type *mine = NULL; int found = 0; ext++;//.之后,即为扩展名第一个字节的位置 printf("uri:%s,len:%d,ext is %s\n",uri,len,ext); //匹配扩展名 for(mine = &builtin_mime_types[i]; mine->extension != NULL; i++) { if(!strncmp(mine->extension,ext,mine->ext_len)) { found = 1;//找到所支持的扩展名 printf("found it, ext is %s\n",mine->extension); break; } } if(!found)//没有找到的时候默认类型为“text/plain/” { mine = &builtin_mime_types[2]; } DBGPRINT("LCW<==Mine_Type\n"); return mine; }
相关文章推荐
- 34 网络相关函数(二)——live555源码阅读(四)网络
- 一个简单的wed服务器SHTTPD(6)———— SHTTPD错误处理的实现
- 一个简单的wed服务器SHTTPD(5)————服务器SHTTPD请求方法解析
- 一个简单的wed服务器SHTTPD(4)————SHTTPD支持CGI的实现
- 一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现
- 一个简单的wed服务器SHTTPD(2)———— 客户端请求分析
- 普通开发者的网络安全必读--网络安全,黑客阅读
- 33 网络相关函数(一)——live555源码阅读(四)网络
- 一个简单的wed服务器SHTTPD(1)————命令行和文件配置解析
- Asp.Net customErrors与httpErrors的区别
- linux 服务器/客户端 tcp通信的简单例子
- NM常用网络命令
- Http 和 Https 访问请求
- HttpURLConnection&HttpClient网络通信
- Dynamic Adaptive Streaming ove HTTP(DASH) Design Principles and Standards
- Dynamic Adaptive Streaming over HTTP Dataset
- HttpWebRequest抓取网页内容与直接输入URL得到的内容不一致!球大神帮忙!!
- POJ 2396 Budget(无源汇网络有上下界的可行流-Dinic)
- 通过端口1433连接到主机127.0.0.1的 TCP/IP 连接失败,错误:“connect timed out”的解决方法
- Http协议学习(1)