博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于android版本spice协议tls端口链接方式的bug问题
阅读量:6213 次
发布时间:2019-06-21

本文共 1648 字,大约阅读时间需要 5 分钟。

最近在搞了搞android版本的spice协议.在andorid-spice官方github代码下载下来之后,编译成功并且顺利的运行在android系统上链接云桌面的时候,在非安全端口的情况下可以成功的链接到虚拟云桌面,但是非常非常让人头疼的是在tls端口下链接的时候总是链接不到云桌面,并且后台报了一堆ssl问题的错误.经过反复查找问题,原来这个问题是一个本来就存在的bug,是在ssl_read()函数执行的时候由于系统自身的某些原因导致有时候协议的数据是读取不成功的,如果在这时候让ssl_read()函数在读取异常情况下等待后台处理完之后再读几次就可以读取正确的业务数据.具体修改方法如下:

1.找到spice-channel.c文件.
2.找到spice_channel_read_wire函数.
3.修改逻辑如下
static int spice_channel_read_wire(SpiceChannel channel, void data, size_t len)
{
SpiceChannelPrivate *c = channel->priv;
gssize ret;
GIOCondition cond;
int tmp_value_01;

cond = 0;while (1) {

reread:

if (c->has_error) {
return 0; / has_error is set by disconnect(), return no error /
}
if (c->tls) {
ret = SSL_read(c->ssl, data, len);
if (ret < 0) {
ret = SSL_get_error(c->ssl, ret);
if (ret == SSL_ERROR_WANT_READ)
cond |= G_IO_IN;
if (ret == SSL_ERROR_WANT_WRITE)
cond |= G_IO_OUT;
if(ret == SSL_ERROR_SYSCALL){
g_socket_condition_wait(c->sock, G_IO_OUT | G_IO_ERROR | G_IO_HUP, NULL, NULL);
continue;//goto reread;//
}
ret = -1;
}else{
//MC_DEBUG("66666666666666666666666666666 ret == %d ::%x",ret,c->ssl);
}
}

if (ret == -1) {        if (cond != 0) {            g_socket_condition_wait(c->sock, G_IO_OUT | G_IO_ERROR | G_IO_HUP, NULL, NULL);            continue;//goto reread;//        } else {            c->has_error = TRUE;            return -errno;        }    }    break;}if (ret == 0) {    CHANNEL_DEBUG(channel, "Closing the connection: spice_channel_read() - ret=0");    c->has_error = TRUE;    return 0;}//MC_DEBUG("[123456] read_wire: ret = [%d] [%d]", ret, len);return ret;

}

这是一个很全身疼的问题,在x86版本的spice-gtk代码中就没有这个ssl_read()的问题.

转载于:https://blog.51cto.com/11225159/2164980

你可能感兴趣的文章
Java中final 关键字相关 JVM编译static,final
查看>>
grep及正则表达式系列---03
查看>>
CentOS服务器远程桌面解决方案之FreeNX
查看>>
Lync Server 2010迁移至Lync Server 2013故障排错 Part 2: Lync Server 迁移后部分用户无法移池问题...
查看>>
CentOS 7 下安装 mysql ,以及用到的命令
查看>>
OpenStack实践(九):Open vSwitch方式实现floating IP
查看>>
快速排序的题
查看>>
JDBC的事务
查看>>
软件测试的发展
查看>>
how to add custom objects to the process instance?
查看>>
Python爬虫入门(3-4):Urllib库的高级用法
查看>>
第五章(Web Service)
查看>>
Oracle 12c新特性对于业务上的一些影响总结
查看>>
Java逆向基础之AspectJ的Around方法修改方法体
查看>>
python中的try...except...finally函数
查看>>
oracle 11g rac 监听程序offline
查看>>
CNCF
查看>>
网络基础知识
查看>>
Python IO编程——操作文件和目录
查看>>
Exchange2010 Outlook自动发现
查看>>