免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1812 | 回复: 0

vnc调试------之反向连接(2) [复制链接]

论坛徽章:
0
发表于 2011-12-22 08:51 |显示全部楼层
接上一篇文章,下面的代码是处理版本信息的。
BOOL
vncClientThread::InitVersion()
{
    rfbProtocolVersionMsg protocol_ver;
    protocol_ver[12] = 0;
    if (strcmp(m_client->ProtocolVersionMsg,"0.0.0.0")==NULL)
    {
        // Generate the server's protocol version
        rfbProtocolVersionMsg protocolMsg;
        if (SPECIAL_SC_PROMPT)
        {
            //This break rfb protocol, SC in ultravnc only  rfb 3.14/16
            sprintf((char *)protocolMsg,
                    rfbProtocolVersionFormat,
                    rfbProtocolMajorVersion,
                    rfbProtocolMinorVersion +10+ (m_server->MSLogonRequired() ? 0 : 2));
        }
        else
        {
            sprintf((char *)protocolMsg,
                    rfbProtocolVersionFormat,
                    rfbProtocolMajorVersion,
                    rfbProtocolMinorVersion + (m_server->MSLogonRequired() ? 0 : 2)); // 4: mslogon+FT,
                                                                                  // 6: VNClogon+FT
        }
        // Send the protocol message
        //m_socket->SetTimeout(0); // sf@2006 - Trying to fix neverending authentication bug - Not sure it's a good idea...
        //adzm 2009-06-20 - if SC, wait for a connection, rather than timeout too quickly.
        if (SPECIAL_SC_PROMPT) {
            //adzm 2009-06-20 - TODO - perhaps this should only occur if we can determine we are using a repeater?
            m_socket->SetTimeout(0);
        }

        if (!m_socket->SendExact((char *)&protocolMsg, sz_rfbProtocolVersionMsg))
            return FALSE;

        // Now, get the client's protocol version
        if (!m_socket->ReadExact((char *)&protocol_ver, sz_rfbProtocolVersionMsg))
            return FALSE;
    }
    else
        memcpy(protocol_ver,m_client->ProtocolVersionMsg, sz_rfbProtocolVersionMsg);

    // sf@2006 - Trying to fix neverending authentication bug - Check if this is RFB protocole
    if (strncmp(protocol_ver,"RFB", 3)!=NULL)
        return FALSE;

    // Check viewer's the protocol version
    int major, minor;
    sscanf((char *)&protocol_ver, rfbProtocolVersionFormat, &major, &minor);
    if (major != rfbProtocolMajorVersion)
        return FALSE;

    // TODO: Maybe change this UltraVNC specific minor value because
    // TightVNC viewer uses minor = 5 ...
    // For now:
    // UltraViewer always sends minor = 4 (sf@2005: or 6, as it returns the minor version received from the server)
    // UltraServer sends minor = 4 or minor = 6
    // m_ms_logon = false; // For all non-UltraVNC logon compatible viewers
    m_ms_logon = m_server->MSLogonRequired();
    vnclog.Print(LL_INTINFO, VNCLOG("m_ms_logon set to %s"), m_ms_logon ? "true" : "false");
    //SC
    if (minor == 4 || minor == 6) m_client->SetUltraViewer(true);
    else if ((minor ==14 || minor ==16)&& SPECIAL_SC_PROMPT)
    {
        m_client->SetUltraViewer(true);
        char mytext[1024];
        getinfo(mytext);
        int size=strlen(mytext);
        if (!m_socket->SendExact((char *)&size, sizeof(int)))
        return FALSE;
        if (!m_socket->SendExact((char *)mytext, size))
        return FALSE;
        int nummer;
        if (!m_socket->ReadExact((char *)&nummer, sizeof(int)))
        {
            return FALSE;
        }
        if (nummer==0) return FALSE;
    }
    else m_client->SetUltraViewer(false); // sf@2005 - Fix Open TextChat from server bug
    return TRUE;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP