Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
ea6e3860
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
大约 1 年 前同步成功
通知
9
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ea6e3860
编写于
3月 09, 2012
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
PR: 2756
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de> Fix DTLS timeout handling.
上级
34b61f5a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
27 addition
and
23 deletion
+27
-23
ssl/d1_lib.c
ssl/d1_lib.c
+23
-14
ssl/d1_pkt.c
ssl/d1_pkt.c
+3
-9
ssl/ssl_locl.h
ssl/ssl_locl.h
+1
-0
未找到文件。
ssl/d1_lib.c
浏览文件 @
ea6e3860
...
...
@@ -391,6 +391,7 @@ void dtls1_double_timeout(SSL *s)
void
dtls1_stop_timer
(
SSL
*
s
)
{
/* Reset everything */
memset
(
&
(
s
->
d1
->
timeout
),
0
,
sizeof
(
struct
dtls1_timeout_st
));
memset
(
&
(
s
->
d1
->
next_timeout
),
0
,
sizeof
(
struct
timeval
));
s
->
d1
->
timeout_duration
=
1
;
BIO_ctrl
(
SSL_get_rbio
(
s
),
BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT
,
0
,
&
(
s
->
d1
->
next_timeout
));
...
...
@@ -398,35 +399,43 @@ void dtls1_stop_timer(SSL *s)
dtls1_clear_record_buffer
(
s
);
}
int
dtls1_
handle_timeout
(
SSL
*
s
)
int
dtls1_
check_timeout_num
(
SSL
*
s
)
{
DTLS1_STATE
*
state
;
s
->
d1
->
timeout
.
num_alerts
++
;
/*
if no timer is expired, don't do anything
*/
if
(
!
dtls1_is_timer_expired
(
s
)
)
/*
Reduce MTU after 2 unsuccessful retransmissions
*/
if
(
s
->
d1
->
timeout
.
num_alerts
>
2
)
{
return
0
;
s
->
d1
->
mtu
=
BIO_ctrl
(
SSL_get_wbio
(
s
),
BIO_CTRL_DGRAM_GET_FALLBACK_MTU
,
0
,
NULL
);
}
dtls1_double_timeout
(
s
);
state
=
s
->
d1
;
state
->
timeout
.
num_alerts
++
;
if
(
state
->
timeout
.
num_alerts
>
DTLS1_TMO_ALERT_COUNT
)
if
(
s
->
d1
->
timeout
.
num_alerts
>
DTLS1_TMO_ALERT_COUNT
)
{
/* fail the connection, enough alerts have been sent */
SSLerr
(
SSL_F_DTLS1_HANDLE_TIMEOUT
,
SSL_R_READ_TIMEOUT_EXPIRED
);
return
-
1
;
}
state
->
timeout
.
read_timeouts
++
;
if
(
state
->
timeout
.
read_timeouts
>
DTLS1_TMO_READ_COUNT
)
return
0
;
}
int
dtls1_handle_timeout
(
SSL
*
s
)
{
/* if no timer is expired, don't do anything */
if
(
!
dtls1_is_timer_expired
(
s
))
{
state
->
timeout
.
read_timeouts
=
1
;
return
0
;
}
if
(
state
->
timeout_duration
>
2
)
dtls1_double_timeout
(
s
);
if
(
dtls1_check_timeout_num
(
s
)
<
0
)
return
-
1
;
s
->
d1
->
timeout
.
read_timeouts
++
;
if
(
s
->
d1
->
timeout
.
read_timeouts
>
DTLS1_TMO_READ_COUNT
)
{
s
->
d1
->
mtu
=
BIO_ctrl
(
SSL_get_wbio
(
s
),
BIO_CTRL_DGRAM_GET_FALLBACK_MTU
,
0
,
NULL
);
s
->
d1
->
timeout
.
read_timeouts
=
1
;
}
#ifndef OPENSSL_NO_HEARTBEATS
...
...
ssl/d1_pkt.c
浏览文件 @
ea6e3860
...
...
@@ -179,7 +179,6 @@ static int dtls1_record_needs_buffering(SSL *s, SSL3_RECORD *rr,
static
int
dtls1_buffer_record
(
SSL
*
s
,
record_pqueue
*
q
,
unsigned
char
*
priority
);
static
int
dtls1_process_record
(
SSL
*
s
);
static
void
dtls1_clear_timeouts
(
SSL
*
s
);
/* copy buffered record into SSL structure */
static
int
...
...
@@ -698,7 +697,6 @@ again:
goto
again
;
/* get another record */
}
dtls1_clear_timeouts
(
s
);
/* done waiting */
return
(
1
);
}
...
...
@@ -1250,6 +1248,9 @@ start:
*/
if
(
msg_hdr
.
type
==
SSL3_MT_FINISHED
)
{
if
(
dtls1_check_timeout_num
(
s
)
<
0
)
return
-
1
;
dtls1_retransmit_buffered_messages
(
s
);
rr
->
length
=
0
;
goto
start
;
...
...
@@ -1873,10 +1874,3 @@ dtls1_reset_seq_numbers(SSL *s, int rw)
memset
(
seq
,
0x00
,
seq_bytes
);
}
static
void
dtls1_clear_timeouts
(
SSL
*
s
)
{
memset
(
&
(
s
->
d1
->
timeout
),
0x00
,
sizeof
(
struct
dtls1_timeout_st
));
}
ssl/ssl_locl.h
浏览文件 @
ea6e3860
...
...
@@ -988,6 +988,7 @@ void dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr);
void
dtls1_reset_seq_numbers
(
SSL
*
s
,
int
rw
);
long
dtls1_default_timeout
(
void
);
struct
timeval
*
dtls1_get_timeout
(
SSL
*
s
,
struct
timeval
*
timeleft
);
int
dtls1_check_timeout_num
(
SSL
*
s
);
int
dtls1_handle_timeout
(
SSL
*
s
);
const
SSL_CIPHER
*
dtls1_get_cipher
(
unsigned
int
u
);
void
dtls1_start_timer
(
SSL
*
s
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录