zoukankan      html  css  js  c++  java
  • 一个简单的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
    "
            "Content-Type:%s
    "
            "Content-Length:%d
    "
            "
    "
            "%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;
    }
  • 相关阅读:
    nginx 简单应用
    js判断图片是否存在
    Quartz Cron 生成工具
    c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件
    SQL Server 将某一列的值拼接成字符串
    EF 里的 join and Group Join
    .net EF Join 关联表分页查询
    IIS 设置文件可下载
    windows 2003 无法安装 .net4.0 windows服务
    NEST 增删改查
  • 原文地址:https://www.cnblogs.com/sigma0-/p/12630521.html
Copyright © 2011-2022 走看看