zoukankan      html  css  js  c++  java
  • 一个简单的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
    ");
        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
    ",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
    ",mine->extension);
                break;
            }
        }
        if(!found)//没有找到的时候默认类型为“text/plain/”
        {
            mine = &builtin_mime_types[2];
        }    
        DBGPRINT("LCW<==Mine_Type
    ");
        return mine;
    }
  • 相关阅读:
    android 扇形菜单
    Gradle 教程:第一部分,安装【翻译】
    Android Studio 创建虚拟机失败 Failed to load 解决办法
    【翻译】Best Practices for User interface android 适配不同屏幕、不同分辨率
    [转]QT 4.8 静态库编译方法
    使用windows资源管理器打开jar
    一步步理解typedef
    模拟Chrome皮肤
    FAT12格式的引导区实现
    Android-获取Html元素
  • 原文地址:https://www.cnblogs.com/sigma0-/p/12630520.html
Copyright © 2011-2022 走看看