Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63665
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 236
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-05 21:34
文章分类

全部博文(21)

文章存档

2015年(21)

我的朋友

分类: LINUX

2015-08-07 23:58:05


点击(此处)折叠或打开

  1. //start from the very beginning,and to create greatness
  2. //@author: Chuangwei Lin
  3. //@E-mail:979951191@qq.com
  4. //@brief: SHTTPD内容类型的实现
  5. #include "lcw_shttpd.h"
  6. //定义的内容类型格式如下
  7. enum{
  8.     MINET_HTML,    MINET_HTM,    MINET_TXT,    MINET_CSS,    MINET_ICO,    MINET_GIF,    MINET_JPG,    MINET_JPEG,
  9.     MINET_PNG,    MINET_SVG,    MINET_TORRENT,    MINET_WAV,    MINET_MP3,    MINET_MID,    MINET_M3U,    MINET_RAM,
  10.     MINET_RA,    MINET_DOC,    MINET_EXE,    MINET_ZIP,    MINET_XLS,    MINET_TGZ,    MINET_TARGZ,    MINET_TAR,
  11.     MINET_GZ,    MINET_ARJ,    MINET_RAR,    MINET_RTF,    MINET_PDF,    MINET_SWF,    MINET_MPG,    MINET_MPEG,
  12.     MINET_ASF,    MINET_AVI,    MINET_BMP
  13. };
  14. struct mine_type builtin_mime_types[] =
  15. {
  16.     {"html",    MINET_HTML,    4,    "text/html"            },
  17.     {"htm",        MINET_HTM,    3,    "text/html"            },
  18.     {"txt",        MINET_TXT,    3,    "text/plain"            },
  19.     {"css",        MINET_CSS,    3,    "text/css"            },
  20.     {"ico",        MINET_ICO,    3,    "image/x-icon"            },
  21.     {"gif",        MINET_GIF,    3,    "image/gif"            },
  22.     {"jpg",        MINET_JPG,    3,    "image/jpeg"            },
  23.     {"jpeg",    MINET_JPEG,    4,    "image/jpeg"            },
  24.     {"png",        MINET_PNG,    3,    "image/png"            },
  25.     {"svg",        MINET_SVG,    3,    "image/svg+xml"            },
  26.     {"torrent",    MINET_TORRENT,    7,    "application/x-bittorrent"    },
  27.     {"wav",        MINET_WAV,    3,    "audio/x-wav"            },
  28.     {"mp3",        MINET_MP3,    3,    "audio/x-mp3"            },
  29.     {"mid",        MINET_MID,    3,    "audio/mid"            },
  30.     {"m3u",        MINET_M3U,    3,    "audio/x-mpegurl"        },
  31.     {"ram",        MINET_RAM,    3,    "audio/x-pn-realaudio"        },
  32.     {"ra",        MINET_RA,    2,    "audio/x-pn-realaudio"        },
  33.     {"doc",        MINET_DOC,    3,    "application/msword",        },
  34.     {"exe",        MINET_EXE,    3,    "application/octet-stream"    },
  35.     {"zip",        MINET_ZIP,    3,    "application/x-zip-compressed"    },
  36.     {"xls",        MINET_XLS,    3,    "application/excel"        },
  37.     {"tgz",        MINET_TGZ,    3,    "application/x-tar-gz"        },
  38.     {"tar.gz",    MINET_TARGZ,6,    "application/x-tar-gz"        },
  39.     {"tar",        MINET_TAR,    3,    "application/x-tar"        },
  40.     {"gz",        MINET_GZ,    2,    "application/x-gunzip"        },
  41.     {"arj",        MINET_ARJ,    3,    "application/x-arj-compressed"    },
  42.     {"rar",        MINET_RAR,    3,    "application/x-arj-compressed"    },
  43.     {"rtf",        MINET_RTF,    3,    "application/rtf"        },
  44.     {"pdf",        MINET_PDF,    3,    "application/pdf"        },
  45.     {"swf",        MINET_SWF,    3,    "application/x-shockwave-flash"    },
  46.     {"mpg",        MINET_MPG,    3,    "video/mpeg"            },
  47.     {"mpeg",    MINET_MPEG,    4,    "video/mpeg"            },
  48.     {"asf",        MINET_ASF,    3,    "video/x-ms-asf"        },
  49.     {"avi",        MINET_AVI,    3,    "video/x-msvideo"        },
  50.     {"bmp",        MINET_BMP,    3,    "image/bmp"            },
  51.     {NULL,        -1,            0,    NULL                }
  52. };
  53. /******************************************************
  54. 函数名:Mine_Type(char *uri, int len, struct worker_ctl *wctl)
  55. 参数:
  56. 功能:根据输入的扩展名查找内容类型中的匹配项
  57. *******************************************************/
  58. struct mine_type* Mine_Type(char *uri, int len, struct worker_ctl *wctl)
  59. {
  60.     DBGPRINT("LCW==>Mine_Type\n");
  61.     int i = 0;
  62.     //extern void *memchr(const void *buf, int ch, size_t count);
  63.     //用法:#include <string.h>
  64.     //功能:从buf所指内存区域的前count个字节查找字符ch。
  65.     char *ext = memchr(uri, '.', len);//查找扩展名的位置
  66.     struct mine_type *mine = NULL;
  67.     int found = 0;
  68.     ext++;//.之后,即为扩展名第一个字节的位置
  69.     printf("uri:%s,len:%d,ext is %s\n",uri,len,ext);
  70.     //匹配扩展名
  71.     for(mine = &builtin_mime_types[i]; mine->extension != NULL; i++)
  72.     {
  73.         if(!strncmp(mine->extension,ext,mine->ext_len))
  74.         {
  75.             found = 1;//找到所支持的扩展名
  76.             printf("found it, ext is %s\n",mine->extension);
  77.             break;
  78.         }
  79.     }
  80.     if(!found)//没有找到的时候默认类型为“text/plain/
  81.     {
  82.         mine = &builtin_mime_types[2];
  83.     }    
  84.     DBGPRINT("LCW<==Mine_Type\n");
  85.     return mine;
  86. }

阅读(1106) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~