一个简单的wed服务器SHTTPD(6)———— 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
{
ERROR301, ERROR302, ERROR303, ERROR304, ERROR305, ERROR307,
ERROR400, ERROR401, ERROR402, ERROR403, ERROR404, ERROR405, ERROR406,
ERROR407, ERROR408, ERROR409, ERROR410, ERROR411, ERROR412, ERROR413,
ERROR414, ERROR415, ERROR416, ERROR417,
ERROR500, ERROR501, ERROR502, ERROR503, ERROR504, ERROR505
};
//全局错误信息结构体
struct error_mine
{
int error_code;//错误代码
char *content;//错误信息
char *msg;//含义
int status;//状态
};
//全局错误信息数组
struct error_mine _error_http[]=
{
{ERROR301, "Error: 301", "永久移动", 301},
{ERROR302, "Error: 302", "创建", 302},
{ERROR303, "Error: 303", "观察别的部分", 303},
{ERROR304, "Error: 304", "只读", 304},
{ERROR305, "Error: 305", "用户代理", 305},
{ERROR307, "Error: 307", "临时重发", 307},
{ERROR400, "Error: 400", "坏请求", 400},
{ERROR401, "Error: 401", "未授权的", 401},
{ERROR402, "Error: 402", "必要的支付", 402},
{ERROR403, "Error: 403", "禁用", 403},
{ERROR404, "Error: 404", "没找到", 404},
{ERROR405, "Error: 405", "不允许的方式", 405},
{ERROR406, "Error: 406", "不接受", 406},
{ERROR407, "Error: 407", "需要代理验证", 407},
{ERROR408, "Error: 408", "请求超时", 408},
{ERROR409, "Error: 409", "冲突", 409},
{ERROR410, "Error: 410", "停止", 410},
{ERROR411, "Error: 411", "需要的长度", 411},
{ERROR412, "Error: 412", "预处理失败", 412},
{ERROR413, "Error: 413", "请求实体太大", 413},
{ERROR414, "Error: 414", "请求-URI太大", 414},
{ERROR415, "Error: 415", "不支持的媒体类型",415},
{ERROR416, "Error: 416", "请求的范围不满足",416},
{ERROR417, "Error: 417", "期望失败", 417},
{ERROR500, "Error: 500", "服务器内部错误", 500},
{ERROR501, "Error: 501", "不能实现", 501},
{ERROR502, "Error: 502", "坏网关", 502},
{ERROR503, "Error: 503", "服务不能实现", 503},
{ERROR504, "Error: 504", "网关超时", 504},
{ERROR505, "Error: 505", "HTTP版本不支持", 505}
};
void Error_400(struct worker_ctl* wctl)
{
;
}
void Error_403(struct worker_ctl* wctl)
{
;
}
void Error_404(struct worker_ctl* wctl)
{
;
}
void Error_505(struct worker_ctl* wctl)
{
;
}
/******************************************************
函数名:GenerateErrorMine(struct worker_ctl * wctl)
参数:
功能:错误类型生成
*******************************************************/
int GenerateErrorMine(struct worker_ctl * wctl)
{
struct error_mine *err = NULL;//错误类型
int i = 0;
//轮询查找类型匹配的错误类型
for(err = &_error_http[i];err->status != wctl->conn.con_res.status;i++);//这句感觉怪怪的,如果一直找不到
if(err->status != wctl->conn.con_res.status)
{
err = &_error_http[0]; //没有找到的错误类型为第一个
}
//构建信息头部
snprintf(wctl->conn.dres, sizeof(wctl->conn.dres),
"HTTP/%lu.%lu %d %s\r\n"
"Content-Type:%s\r\n"
"Content-Length:%d\r\n"
"\r\n"
"%s",
wctl->conn.con_req.major,
wctl->conn.con_req.minor,
err->status,
err->msg,
"text/plain",
strlen(err->content),
err->content);
wctl->conn.con_res.cl = strlen(err->content);//内容长度
wctl->conn.con_res.fd = -1;//无文件可读
wctl->conn.con_res.status = 400;//错误代码
return 0;
}
一个简单的wed服务器SHTTPD(6)———— SHTTPD错误处理的实现的更多相关文章
- 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件
主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...
- 一个简单的wed服务器SHTTPD(1)————命令行和文件配置解析
开始学习<LInux网络编程>中的综合案例,虽然代码书上有,还是自己打一下加深理解和印象. 主要有两个函数,完成命令行的解析,另一个实现配置文件的解析,注释还是比较丰富的哦. //star ...
- 一个简单的wed服务器SHTTPD(5)————服务器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(7)———— 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 ...
随机推荐
- Golang源码分析之目录详解
开源项目「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 导读 学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢? 目 ...
- 惊呆了,Servlet Filter和Spring MVC Interceptor的实现居然这么简单
前言 创建型:单例模式,工厂模式,建造者模式,原型模式 结构型:桥接模式,代理模式,装饰器模式,适配器模式,门面模式,组合模式,享元模式 行为型:观察者模式,模板模式,策略模式,责任链模式,状态模式, ...
- Daily Scrum 1/11/2016
Zhaoyang & Minlong: Took and edited the video which introduced our APP. Yandong: Summarized bugs ...
- stand up meeting 12/17/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 建立基本的pdf阅读器界面框架 4 开始实现界面框架 4 foxit PDF ...
- stand up meeting 11/19/2015
队员 今日工作 工作耗时/h 明日计划 计划耗时/h 冯晓云 利用昨天编写的调用必应词典API的DLL,完成了UWP版本查词APP的试水,证实了DLL可调和在线查词的可行性:和其他部分的同学就接口数据 ...
- G. 蚂蚁的镜像串
单点时限: 1.0 sec 内存限制: 512 MB 一只聪明的蚂蚁在学习了回文串之后,一直觉得回文串不够优美,所以它决定自己定义一种新的字符串——镜像串 所谓镜像串,就是对一个字符串进行一整个完全的 ...
- 1. esc 安装 jenkins
$ yum install yum-fastestmirror -y #安装自动选择最快源的插件 #添加jenkins源: $ sudo wget -O /etc/yum.repos.d/jenkin ...
- redis: 其他数据类型(八)
1.geospatial 地理位置 有效的经度从-180度到180度 有效的纬度从-85.05112878度到85.05112878度 当坐标位置超出上述指定范围时,该命令将会返回一个错误 底层实现原 ...
- [源码分析] 带你梳理 Flink SQL / Table API内部执行流程
[源码分析] 带你梳理 Flink SQL / Table API内部执行流程 目录 [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 0x00 摘要 0x01 Apac ...
- python face_recognition模块实现人脸识别
import face_recognition #人脸识别库 pip cmake dlib import cv2 #读取图像 face_image1 = face_recognition.load_i ...