Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
06f4536a
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
10
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看板
提交
06f4536a
编写于
25年前
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix to make s_client and s_server work under Windows. A bit of a hack but
an improvement on not working at all.
上级
bf196635
无相关合并请求
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
81 addition
and
10 deletion
+81
-10
CHANGES
CHANGES
+13
-0
apps/s_client.c
apps/s_client.c
+45
-7
apps/s_server.c
apps/s_server.c
+23
-3
未找到文件。
CHANGES
浏览文件 @
06f4536a
...
...
@@ -4,6 +4,19 @@
Changes between 0.9.4 and 0.9.5 [xx XXX 1999]
*) Ugly workaround to get s_client and s_server working under Windows. The
old code wouldn't work because it needed to select() on sockets and the
tty (for keypresses and to see if data could be written). Win32 only
supports select() on sockets so we select() with a 1s timeout on the
sockets and then see if any characters are waiting to be read, if none
are present then we retry, we also assume we can always write data to
the tty. This isn't nice because the code then blocks until we've
received a complete line of data and it is effectively polling the
keyboard at 1s intervals: however it's quite a bit better than not
working at all :-) A dedicated Windows application might handle this
with an event loop for example.
[Steve Henson]
*) Enhance RSA_METHOD structure. Now there are two extra methods, rsa_sign
and rsa_verify. When the RSA_FLAGS_SIGN_VER option is set these functions
will be called when RSA_sign() and RSA_verify() are used. This is useful
...
...
This diff is collapsed.
Click to expand it.
apps/s_client.c
浏览文件 @
06f4536a
...
...
@@ -81,6 +81,11 @@ typedef unsigned int u_int;
#include <openssl/pem.h>
#include "s_apps.h"
#ifdef WINDOWS
#include <conio.h>
#endif
#if (defined(VMS) && __VMS_VER < 70000000)
/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
#undef FIONBIO
...
...
@@ -173,7 +178,9 @@ int MAIN(int argc, char **argv)
int
ret
=
1
,
in_init
=
1
,
i
,
nbio_test
=
0
;
SSL_METHOD
*
meth
=
NULL
;
BIO
*
sbio
;
/*static struct timeval timeout={10,0};*/
#ifdef WINDOWS
struct
timeval
tv
;
#endif
#if !defined(NO_SSL2) && !defined(NO_SSL3)
meth
=
SSLv23_client_method
();
...
...
@@ -465,12 +472,18 @@ re_start:
if
(
read_tty
)
FD_SET
(
fileno
(
stdin
),
&
readfds
);
if
(
write_tty
)
FD_SET
(
fileno
(
stdout
),
&
writefds
);
}
#endif
if
(
read_ssl
)
FD_SET
(
SSL_get_fd
(
con
),
&
readfds
);
if
(
write_ssl
)
FD_SET
(
SSL_get_fd
(
con
),
&
writefds
);
#else
if
(
!
tty_on
||
!
write_tty
)
{
if
(
read_ssl
)
FD_SET
(
SSL_get_fd
(
con
),
&
readfds
);
if
(
write_ssl
)
FD_SET
(
SSL_get_fd
(
con
),
&
writefds
);
}
#endif
/* printf("mode tty(%d %d%d) ssl(%d%d)\n",
tty_on,read_tty,write_tty,read_ssl,write_ssl);*/
...
...
@@ -480,8 +493,28 @@ re_start:
* will choke the compiler: if you do have a cast then
* you can either go for (int *) or (void *).
*/
#ifdef WINDOWS
/* Under Windows we make the assumption that we can
* always write to the tty: therefore if we need to
* write to the tty we just fall through. Otherwise
* we timeout the select every second and see if there
* are any keypresses. Note: this is a hack, in a proper
* Windows application we wouldn't do this.
*/
if
(
!
write_tty
)
{
if
(
read_tty
)
{
tv
.
tv_sec
=
1
;
tv
.
tv_usec
=
0
;
i
=
select
(
width
,(
void
*
)
&
readfds
,(
void
*
)
&
writefds
,
NULL
,
&
tv
);
if
(
!
i
&&
(
!
_kbhit
()
||
!
read_tty
)
)
continue
;
}
else
i
=
select
(
width
,(
void
*
)
&
readfds
,(
void
*
)
&
writefds
,
NULL
,
NULL
);
}
#else
i
=
select
(
width
,(
void
*
)
&
readfds
,(
void
*
)
&
writefds
,
NULL
,
NULL
);
#endif
if
(
i
<
0
)
{
BIO_printf
(
bio_err
,
"bad select %d
\n
"
,
...
...
@@ -558,8 +591,12 @@ re_start:
goto
shut
;
}
}
#ifndef WINDOWS
#ifdef WINDOWS
/* Assume Windows can always write */
else
if
(
!
ssl_pending
&&
write_tty
)
#else
else
if
(
!
ssl_pending
&&
FD_ISSET
(
fileno
(
stdout
),
&
writefds
))
#endif
{
#ifdef CHARSET_EBCDIC
ascii2ebcdic
(
&
(
sbuf
[
sbuf_off
]),
&
(
sbuf
[
sbuf_off
]),
sbuf_len
);
...
...
@@ -581,7 +618,6 @@ re_start:
write_tty
=
0
;
}
}
#endif
else
if
(
ssl_pending
||
FD_ISSET
(
SSL_get_fd
(
con
),
&
readfds
))
{
#ifdef RENEG
...
...
@@ -636,8 +672,11 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
}
}
#ifndef WINDOWS
#ifdef WINDOWS
else
if
(
_kbhit
())
#else
else
if
(
FD_ISSET
(
fileno
(
stdin
),
&
readfds
))
#endif
{
if
(
crlf
)
{
...
...
@@ -688,7 +727,6 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
write_ssl
=
1
;
read_tty
=
0
;
}
#endif
}
shut:
SSL_shutdown
(
con
);
...
...
This diff is collapsed.
Click to expand it.
apps/s_server.c
浏览文件 @
06f4536a
...
...
@@ -85,6 +85,10 @@ typedef unsigned int u_int;
#include <openssl/ssl.h>
#include "s_apps.h"
#ifdef WINDOWS
#include <conio.h>
#endif
#if (defined(VMS) && __VMS_VER < 70000000)
/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
#undef FIONBIO
...
...
@@ -748,6 +752,9 @@ static int sv_body(char *hostname, int s, unsigned char *context)
unsigned
long
l
;
SSL
*
con
=
NULL
;
BIO
*
sbio
;
#ifdef WINDOWS
struct
timeval
tv
;
#endif
if
((
buf
=
Malloc
(
bufsize
))
==
NULL
)
{
...
...
@@ -807,9 +814,22 @@ static int sv_body(char *hostname, int s, unsigned char *context)
* the compiler: if you do have a cast then you can either
* go for (int *) or (void *).
*/
i
=
select
(
width
,(
void
*
)
&
readfds
,
NULL
,
NULL
,
NULL
);
if
(
i
<=
0
)
continue
;
if
(
FD_ISSET
(
fileno
(
stdin
),
&
readfds
))
#ifdef WINDOWS
/* Under Windows we can't select on stdin: only
* on sockets. As a workaround we timeout the select every
* second and check for any keypress. In a proper Windows
* application we wouldn't do this because it is inefficient.
*/
tv
.
tv_sec
=
1
;
tv
.
tv_usec
=
0
;
i
=
select
(
width
,(
void
*
)
&
readfds
,
NULL
,
NULL
,
&
tv
);
if
((
i
<
0
)
||
(
!
i
&&
!
_kbhit
()
)
)
continue
;
if
(
_kbhit
())
#else
i
=
select
(
width
,(
void
*
)
&
readfds
,
NULL
,
NULL
,
NULL
);
if
(
i
<=
0
)
continue
;
if
(
FD_ISSET
(
fileno
(
stdin
),
&
readfds
))
#endif
{
if
(
s_crlf
)
{
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
反馈
建议
客服
返回
顶部