关于android版本spice协议tls端口链接方式的bug问题

最近在搞了搞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()的问题.

原文地址:http://blog.51cto.com/11225159/2164980

时间: 2024-08-01 01:34:46

关于android版本spice协议tls端口链接方式的bug问题的相关文章

android 实现与服务器的长链接 方式

http://blog.csdn.net/coffeeco/article/details/13276437  这边文章主要看服务端,使用tomcat7以上实现服务端的接收消息以及消息发送 http://autobahn.ws/android/  这边文章主要用于介绍android客户端的连接,最下面get started 教你怎么开始以及Examples是例子 最后一个api文档.

我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 Internet 上用于确保您通信的安全性。

早上使用.Net WebClient类采集亚马逊数据,返回http 400 Bad Request错误,内容里面有“我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 Internet 上用于确保您通信的安全性.” 所以就想着可能是WebClient使用TLS版本过低,查了下资料,全局加上这段代码. ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificat

Android实现snmp协议(一)

2015年一月初.接到华为一位老师的电话,让我帮忙做一款他们在北京展会上要用到的App,该App能够展示华为的网络设备运行状态并可以设置一些简单的参数,包括AP.LSW.AP.AR等. 华为老师跟我说他们是使用snmp协议v2c的版本进行管理的,这意味着我也得在Android设备实现该协议,并与他们的网络设备交互. 回去认真研究了一下并请教了一些对这块比较熟悉的小伙伴,总算对snmp有了一些粗浅的认识. snmp是指简单网络设备管理协议,顾名思义就是对网络设备进行管理的通用标准协议,属于TCP/

SPICE协议-----基本简介及普通协议定义

1  SPICE协议简介 SPICE协议定义了一组协议消息来访问.控制.和接收通过网络从远程计算机设备(如:键盘.视频.鼠标)的操作,并回复发送输出.控制设备既可以在客户端,也可以在服务端.另外,协议定义了一组支持远程服务器从一个网络地址迁移到另一个网络地址.加密传输数据,有一个例外,在选择加密方法上比较灵活.SPICE使用简单的消息传递和不依赖于任何RPC标准或特定的传输层. SPICE通信会话分为多种沟通通道道(每个通道针对一个远程设备)为了有能力控制通信和执行根据通道类型的消息(如QOS加

Spice协议初探

转载自 灵跃云 :原文链接 序 言 SPICE,即Simple Protocol for Independent Computing Environment(独立计算环境简单协议)是红帽企业虚拟化桌面版的主要技术组件之一,具有自适应能力的远程提交协议,能够提供与物理桌面完全相同的最终用户体验.借助支持SPICE协议的客户端(如remote-viewer)或者通过浏览器,用户可以访问自己的虚拟桌面,如下图1所示. 图1 spice remote-viewer客户端 1.特点 Spice虚拟桌面传输

Android开发者必备的42个链接

http://mobile.51cto.com/ahot-426035.htm 下面收集了42个帮助大家学习Android的内容链接,部分内容是面向初学者的,帮助大家从头开始学习Android开发,其他则面向较高级的开发者.希望推荐的这些内容对你有帮助. 官方网站 1.谷歌Android开发者页面 这里是主站点,在这您可以找到一切资源帮助您开始Android开发.此站包含了很多关于学习基础知识的资源,完整的API引用,以及你开始开发所需的各种工具.此站共分为五个部分: 作为初学者,你应该从工具开

什么是函数响应式编程(Java&amp;Android版本)

什么是函数响应式编程(Java&Android版本) 原文链接:http://www.bignerdranch.com/blog/what-is-functional-reactive-programming/ 函数响应式编程(FRP)为解决现代编程问题提供了全新的视角.一旦理解它,可以极大地简化你的项目,特别是处理嵌套回调的异步事件,复杂的列表过滤和变换,或者时间相关问题. 我将尽量跳过对函数响应式编程学院式的解释(网络上已经有很多),并重点从实用的角度帮你理解什么是函数响应式编程,以及工作中

邮件协议与端口

      电子邮箱的协议有SMTP.POP2.POP3.IMAP4等,都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25.110和143建立连接.针对不同的用途和功能,我们在邮件服务器设置那会根据自己的需求进行调节. 昨天Foxmail突然坏了,我查了半天查不到原因,重装之后发现web上的邮件和客户端邮箱的邮件不一致了.还幸好不一致,不然无价的数据邮件就不见了.        首先说说协议吧,常用的邮箱协议有以下几种: (1)SMTP(Simple Mail Transfer Pr

SPICE协议------主通道交互定义

1  主通道协议定义 1.1服务器->客户端 enum { SPICE_MSG_MAIN_MIGRATE_BEGIN = 101, SPICE_MSG_MAIN_MIGRATE_CANCEL, SPICE_MSG_MAIN_INIT, SPICE_MSG_MAIN_CHANNELS_LIST, SPICE_MSG_MAIN_MOUSE_MODE, SPICE_MSG_MAIN_MULTI_MEDIA_TIME, SPICE_MSG_MAIN_AGENT_CONNECTED, SPICE_MSG_