一个简单的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 ...
随机推荐
- Flask 入门(五)
jinjia2模板传参 在html中调用python代码中传入的参数规则己经在上文中说明白了,下面,我们来实用一下: 1.编辑index.py中的代码如下: from flask import Fla ...
- 安卓开发学习日记 DAY4——Button,ImageButton
Button与ImageButton基本类似 也有类似于TextView和ImageView的区别 这里需要注意的是: 在你定义text属性的内容时,最好是在Values文件下的String.xml中 ...
- 【python】利用jieba中文分词进行词频统计
以下代码对鲁迅的<祝福>进行了词频统计: import io import jieba txt = io.open("zhufu.txt", "r" ...
- Pytest系列(14)- 配置文件pytest.ini的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest配置文件可以改变 ...
- xml 文件 和xsd 文件的关系
XML文件和XSD文件的关系 2010-09-29 15:38 2307人阅读 评论(0) 收藏 举报 xml 1. XSD文件在某个namespace中定义element和type.此处定义的typ ...
- dubbo(三):负载均衡实现解析
dubbo作为分布式远程调用框架,要保证的点很多,比如:服务注册与发现.故障转移.高性能通信.负载均衡等等! 负载均衡的目的是为了特定场景下,能够将请求合理地平分到各服务实例上,以便发挥所有机器的叠加 ...
- day22作业
# 1.检索文件夹大小的程序,要求执行方式如下 # python3.8 run.py 文件夹 import os,sys l = sys.argv[1] size = 0 def get_size(f ...
- 最长上升子序列 HDU 1025 Constructing Roads In JGShining's Kingdom
最长上升子序列o(nlongn)写法 dp[]=a[]; ; ;i<=n;i++){ if(a[i]>dp[len]) dp[++len]=a[i]; ,dp++len,a[i])=a[i ...
- [PHP]听说随机数mt_rand()比rand()速度快,闲的无聊测试了一下!
废话不说上码 //microtime() 函数返回当前 Unix 时间戳的微秒数.//当设置为 TRUE 时,规定函数应该返回一个浮点数,否则返回一个字符串.默认为 FALSE. <?php h ...
- PHP反序列化漏洞总结
写在前边 做了不少PHP反序列化的题了,是时候把坑给填上了.参考了一些大佬们的博客,自己再做一下总结 1.面向对象 2.PHP序列化和反序列化 3.PHP反序列化漏洞实例 1.面向对象 在了解序列化和 ...