18.3.5 SHTTPD方法解析的实现
服务器SHTTPD请求方法的解析比较简单,使用比较字符串的方法。建立一个表示请求方法的结构数组,逐个比较客户端请求方法的字符串和数组中成员请求方法的异同。请求方法的结构如下,ptr表示请求方法的名称,len表示请求方法的长度,type表示请求方法的类型。
typedef struct vec
{
char *ptr; /*字符串*/
int len; /*字符串长度*/
SHTTPD_METHOD_TYPE type; /*字符串表示类型*/
}vec;
建立一个结构数组_shttpd_methods,将各种结构放入:
struct vec _shttpd_methods[] = {
{"GET", 3, METHOD_GET}, /*GET方法*/
{"POST", 4, METHOD_POST}, /*POST方法*/
{"PUT", 3, METHOD_PUT}, /*PUT方法*/
{"DELETE", 6, METHOD_DELETE}, /*DELETE方法*/
{"HEAD", 4, METHOD_HEAD}, /*HEAD方法*/
{NULL, 0} /*结尾*/
};
将客户端的请求方法与请求方法的结构数组进行比较,返回找到的匹配项。
struct vec *m= NULL;
/*查找比较方法字符串*/
for(m = &_shttpd_methods[0];m->ptr!=NULL;m++)
{
if(!strncmp(m->ptr, pos, m->len))/*比较字符串*/
{
req->method = m->type;/*更新头部方法*/
found = 1;
break;
}
}