一个简单的wed服务器SHTTPD(7)———— SHTTPD内容类型的实现
//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_WAV, 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_AVI, 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_WAV, 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_AVI, 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;
}
一个简单的wed服务器SHTTPD(7)———— SHTTPD内容类型的实现的更多相关文章
- 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件
主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...
- 一个简单的wed服务器SHTTPD(5)————服务器SHTTPD请求方法解析
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(1)————命令行和文件配置解析
开始学习<LInux网络编程>中的综合案例,虽然代码书上有,还是自己打一下加深理解和印象. 主要有两个函数,完成命令行的解析,另一个实现配置文件的解析,注释还是比较丰富的哦. //star ...
- 一个简单的wed服务器SHTTPD(6)———— SHTTPD错误处理的实现
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(4)————SHTTPD支持CGI的实现
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(8)———— URI分析
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(2)———— 客户端请求分析
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 自己动手模拟开发一个简单的Web服务器
开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...
随机推荐
- TP3快速入门
一.查询 D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高. $map = arr ...
- C语言冒泡排序法分析及代码实现
冒泡排序法: 所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法.具体方法是,相邻数值两两交换.从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换( ...
- AJ学IOS(46)之网易彩票幸运大转盘
AJ分享,必须精品 效果 实现过程: 基础UI搭建 这里主要是用了xib搭建,首先我们分析,有中间的开始按钮,背景图片,还有星座按钮,这里能用xib做的事开始按钮和背景图片. 如图: 星座按钮的搭建: ...
- 背景知识+监督和无监督学习辨析+预备知识(1-1—1-4/用时4h)
1-1/1.2,基本上都是一些基础知识,机器学习的背景,发展,概念,用途 1-3,监督学习: 数据集类型已知,数据信息为已知正解--由已知正解推测趋势(拟合分布函数)-- 给出的模型例子--基本类似于 ...
- SpringCloud系列之网关(Gateway)应用篇
@ 目录 前言 项目版本 网关访问 鉴权配置 限流配置 前言 由于项目采用了微服务架构,业务功能都在相应各自的模块中,每个业务模块都是以独立的项目运行着,对外提供各自的服务接口,如没有类似网关之类组件 ...
- stand up meeting 1/11/2016
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 跑通打印机功能,尝试与pdf读取部分结合;生词本卡片选择简略释义 ...
- Serval and Parenthesis Sequence CodeForces - 1153C
题目大意:一个字符串只含有? ( ),?可以变成 ) 或者 ( ,将字符串中所有的?变成) 或者 ( 使得字符串合法. 合法就是让括号配对,并且不可以提前结束比如:()()这样是不合法的. 题解:既然 ...
- JavaScript的运行机制!!!很重要很重要!!!!!!请看大神操作!
https://juejin.im/post/59e85eebf265da430d571f89
- 详解 JDK8 新增的日期时间类
JDK8 新增的日期时间类 在本人之前的博文<处理时间的类 -- System类.Date类 .SimpleDateFormat类 与 Calendar类>中,讲到过表示时间的类,有三类: ...
- TensorFlow命令行参数FLAGS使用
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf #tensorboard --logdir=&qu ...