//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错误处理的实现的更多相关文章

  1. 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件

    主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...

  2. 一个简单的wed服务器SHTTPD(1)————命令行和文件配置解析

    开始学习<LInux网络编程>中的综合案例,虽然代码书上有,还是自己打一下加深理解和印象. 主要有两个函数,完成命令行的解析,另一个实现配置文件的解析,注释还是比较丰富的哦. //star ...

  3. 一个简单的wed服务器SHTTPD(5)————服务器SHTTPD请求方法解析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  4. 一个简单的wed服务器SHTTPD(4)————SHTTPD支持CGI的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  5. 一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  6. 一个简单的wed服务器SHTTPD(7)———— SHTTPD内容类型的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  7. 一个简单的wed服务器SHTTPD(8)———— URI分析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  8. 一个简单的wed服务器SHTTPD(2)———— 客户端请求分析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  9. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

随机推荐

  1. 8.3 String 类的方法 使用分类

    String类的判断功能.获取功能. * String类的判断功能: * boolean equals(Object obj):比较字符串的内容是否相同 * boolean equalsIgnoreC ...

  2. shell 中获取子字符串的正确姿势

    前言 shell 取子串的方式有点特别,你写的匹配字符串是需要从头开始匹配的,第一个匹配到了才开始匹配下一个,这个类似于python中的match的工作方式. 1,获取子串有两种方式 使用字符串匹配的 ...

  3. WEB应用环境的搭建(一)配置Tomcat步骤

    首先了解C/s架构 比如我们常见的QQ,魔兽世界等 这种结构的程序是有服务器来提供服务的,客户端来使用服务 而B/S架构是这样的 它不需要安装客户端,只需要浏览器就可以了 例如QQ农场,这样对客户端的 ...

  4. qt creator源码全方面分析(4-1)

    目录 d指针和q指针 简单示例 q指针 QObject和QObjectPrivate qtcreator中的变体1 qtcreator中的变体2 小结 d指针和q指针 我们在类成员名称和使用d指针中, ...

  5. harbor仓库搭建

    harbor安装要求 harbor快速部署 下载harbor:https://github.com/goharbor/harbor/releases 这边以harbor-1.8.2为例 [root@g ...

  6. ATcoder--D - Summer Vacation

    这个题目的题意有点难搞 题目连接: https://atcoder.jp/contests/abc137/tasks/abc137_d 题目大意:输入n和m 指的是一共有n个输入在m天前一共能赚到的钱 ...

  7. Windows安装Tesseract-OCR 4.00并配置环境变量

    一.前言 Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎.与Microsoft O ...

  8. Spring Data REST不完全指南(三)

    上一篇我们介绍了使用Spring Data REST时的一些高级特性,以及使用代码演示了如何使用这些高级的特性.本文将继续讲解前面我们列出来的七个高级特性中的后四个.至此,这些特性能满足我们大部分的接 ...

  9. kioptrix靶机记录

    靶机地址:172.16.1.193 Kali地址:172.16.1.107 首页为Apache测试页,没看到有价值信息 尝试目录扫描: 点击查看: http://172.16.1.193/index. ...

  10. 使用binlog2sql工具来恢复数据库

    (一)binlog2sql介绍 binlog2sql是国内MySQL大佬danfengcao开发,许多MySQL爱好者参与改进的一款MySQL binlog解析软件.根据不同选项,可以得到原始SQL. ...