關於android版本spice協議tls連接埠連結方式的bug問題

來源:互聯網
上載者:User

標籤:一個   ssl   %x   oid   版本   tin   null   cond   channel   

最近在搞了搞android版本的spice協議.在andorid-spice官方github代碼下載下來之後,編譯成功並且順利的運行在android系統上連結CloudDesktop的時候,在非安全連接埠的情況下可以成功的連結到虛擬CloudDesktop,但是非常非常讓人頭疼的是在tls連接埠下連結的時候總是連結不到CloudDesktop,並且後台報了一堆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()的問題.

關於android版本spice協議tls連接埠連結方式的bug問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.