一个简单的wed服务器SHTTPD(6)———— SHTTPD错误处理的实现

来源:互联网 发布:java词典 编辑:程序博客网 时间:2024/06/06 00:37
//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;}
0 0
原创粉丝点击