Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
ae1d9371
Commit
ae1d9371
authored
6 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化http拆包器代码
parent
b3f2bd5b
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
22 行增加
和
5 行删除
+22
-5
src/Http/HttpRequestSplitter.cpp
+13
-4
src/Http/HttpRequestSplitter.h
+9
-1
没有找到文件。
src/Http/HttpRequestSplitter.cpp
查看文件 @
ae1d9371
...
...
@@ -54,10 +54,12 @@ void HttpRequestSplitter::input(const char *data,uint64_t len) {
//数据按照请求头处理
const
char
*
index
=
nullptr
;
while
(
_content_len
==
0
&&
(
index
=
strstr
(
ptr
,
"
\r\n\r\n
"
))
!=
nullptr
)
{
uint64_t
remain
=
len
;
while
(
_content_len
==
0
&&
remain
>
0
&&
(
index
=
onSearchPacketTail
(
ptr
,
remain
))
!=
nullptr
)
{
//_content_len == 0,这是请求头
_content_len
=
onRecvHeader
(
ptr
,
index
-
ptr
+
4
);
ptr
=
index
+
4
;
_content_len
=
onRecvHeader
(
ptr
,
index
-
ptr
);
ptr
=
index
;
remain
=
len
-
(
ptr
-
data
);
}
/*
...
...
@@ -65,7 +67,6 @@ void HttpRequestSplitter::input(const char *data,uint64_t len) {
*/
tail_ref
=
tail_tmp
;
uint64_t
remain
=
len
-
(
ptr
-
data
);
if
(
remain
<=
0
){
//没有剩余数据,清空缓存
_remain_data
.
clear
();
...
...
@@ -124,6 +125,14 @@ void HttpRequestSplitter::reset() {
_remain_data
.
clear
();
}
const
char
*
HttpRequestSplitter
::
onSearchPacketTail
(
const
char
*
data
,
int
len
)
{
auto
pos
=
strstr
(
data
,
"
\r\n\r\n
"
);
if
(
pos
==
nullptr
){
return
nullptr
;
}
return
pos
+
4
;
}
}
/* namespace mediakit */
This diff is collapsed.
Click to expand it.
src/Http/HttpRequestSplitter.h
查看文件 @
ae1d9371
...
...
@@ -42,7 +42,7 @@ public:
* @param data 需要添加的数据
* @param len 数据长度
*/
void
input
(
const
char
*
data
,
uint64_t
len
);
v
irtual
v
oid
input
(
const
char
*
data
,
uint64_t
len
);
protected
:
/**
* 收到请求头
...
...
@@ -65,6 +65,14 @@ protected:
virtual
void
onRecvContent
(
const
char
*
data
,
uint64_t
len
)
{};
/**
* 判断数据中是否有包尾
* @param data 数据指针
* @param len 数据长度
* @return nullptr代表未找到包位,否则返回包尾指针
*/
virtual
const
char
*
onSearchPacketTail
(
const
char
*
data
,
int
len
);
/**
* 设置content len
*/
void
setContentLen
(
int64_t
content_len
);
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论