一个简单的wed服务器SHTTPD(8)———— URI分析
//start from the very beginning,and to create greatness
//@author: Chuangwei Lin
//@E-mail:979951191@qq.com
//@brief: URI分析
#include "lcw_shttpd.h"
/******************************************************
函数名:uri_decode(char *src, int src_len, char *dst, int dst_len)
参数:源字符串,长度,目的字符串,长度
功能:将以%开头的字符进行转换(如果以%开头的字符,则将其后面的两个字符拼接后转换成一个字符)
*******************************************************/
static int uri_decode(char *src, int src_len, char *dst, int dst_len)
{
//#include<ctype.h>
//定义函数:int isdigit(char c)
//函数说明:检查参数c是否为阿拉伯数字0到9。
//返回值:若参数c为阿拉伯数字,则返回TRUE,否则返回NULL(0)。
#define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W')
int i, j, a, b;
for (i = j = 0; i < src_len && j < dst_len - 1; i++, j++)
{
switch (src[i])
{
case '%'://将%后面两个字符拼接成一个
if (isxdigit(((unsigned char *) src)[i + 1]) && isxdigit(((unsigned char *) src)[i + 2]))
{ //把字符转换成小写字母,非字母字符不做出处理
a = tolower(((unsigned char *)src)[i + 1]);
b = tolower(((unsigned char *)src)[i + 2]);
dst[j] = (HEXTOI(a) << 4) | HEXTOI(b);//用或实现拼接
i += 2;
}
else
{
dst[j] = '%';
}
break;
default:
dst[j] = src[i];
break;
}
}
dst[j] = '\0'; //结束符
return (j);
}
/******************************************************
函数名:remove_double_dots(char *s)
参数:源字符串
功能:对目录中的双点".."进行转换,即进入当前目录的父目录
*******************************************************/
static void remove_double_dots(char *s)
{
char* p = s;
while (*s != '\0')
{
*p++ = *s++;
if (s[-1] == '/' || s[-1] == '\\')
{
while (*s == '.' || *s == '/' || *s == '\\')
{
s++;
}
}
}
*p = '\0';
}
/******************************************************
函数名:uri_parse(char *src, int len)
参数:源字符串及其长度
功能:完成两种转换
*******************************************************/
void uri_parse(char *src, int len)
{
uri_decode(src, len -1, src, len);
remove_double_dots(src);
}
一个简单的wed服务器SHTTPD(8)———— URI分析的更多相关文章
- 一个简单的wed服务器SHTTPD(5)————服务器SHTTPD请求方法解析
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(2)———— 客户端请求分析
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件
主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...
- 一个简单的wed服务器SHTTPD(6)———— SHTTPD错误处理的实现
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(4)————SHTTPD支持CGI的实现
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 一个简单的wed服务器SHTTPD(1)————命令行和文件配置解析
开始学习<LInux网络编程>中的综合案例,虽然代码书上有,还是自己打一下加深理解和印象. 主要有两个函数,完成命令行的解析,另一个实现配置文件的解析,注释还是比较丰富的哦. //star ...
- 一个简单的wed服务器SHTTPD(7)———— SHTTPD内容类型的实现
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 自己动手模拟开发一个简单的Web服务器
开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...
随机推荐
- 8.1 api概述及使用
api文件:JDK_API_1.6.CHM 1:打开帮助文档2:点击显示,找到索引,看到输入框3:你要学习什么内容,你就在框框里面输入什么内容 举例:Random4:看包 java.lang包下的类在 ...
- 7.2 java 类的定义和使用
/* * 类的定义: * 类是用来描述现实世界的事物的 * * 事物: * 属性 事物的描述信息 * 行为 事物能够做什么 * * 类是如何和事物进行对应的呢? * 类: * 成员变量 * 成员方法 ...
- 选择排序(C++,Java,Python实现)
排序算法之选择排序,选择排序,选择排序的基本思想描述为:每一趟在n-i+1(i=1,2,-,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.具体来说,假设长度为n的数组arr,要按照从小 ...
- excel中存储的时间的类型是什么
做了一个excel导入数据的功能,其中需要导入时间,默认到天.在开发过程中发现了一个问题, 导入的数据解析到的时间格式是 02-03-19,发现年份前面的两位数丢失了.这当然是导入数据 的解析包的问题 ...
- 刮刮乐自定义view
说明:该代码是参考鸿洋大神的刮刮乐自定义view来写的. 实现:刮刮乐-刮奖的效果,如下效果 下面直接放代码了:只有一个自定义view,要实现真正的功能还需要进一步封装 /** * 自定义view-刮 ...
- android学习笔记——利用BaseAdapter生成40个列表项
RT: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
- android学习笔记——使用QuickContactBadge关联联系人
本文大部分内容来自<疯狂android讲义>. QuickContactBadge继承了ImageView,因此它的本质也是图片,也可以通过android:src属性指定它显示的图片.Qu ...
- 化繁为简,弱监督目标定位领域的新SOTA - 伪监督目标定位方法(PSOL) | CVPR 2020
论文提出伪监督目标定位方法(PSOL)来解决目前弱监督目标定位方法的问题,该方法将定位与分类分开成两个独立的网络,然后在训练集上使用Deep descriptor transformation(DDT ...
- Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented
在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...
- 数据结构与算法--堆(heap)与栈(stack)的区别
堆和栈的区别 在C.C++编程中,经常需要操作的内存可分为以下几个类别: 栈区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈. 堆区(heap ...