// ========================================================================= // 函数功能:处理客户端和用户的消息交流 // 输入参数: // 输出参数: // 返回值 :待交流的客户cl // 说明 :不进行参数检测,我们相信调用者自己会解决好的 // : 处理客户端的状态机,从建立连接到正常的消息交流 // ========================================================================= void rfbProcessClientMessage( rfbClientPtr cl) { switch (cl->state) { case RFB_PROTOCOL_VERSION: debug_printf("STATE:RFB_PROTO_VERSION---%s",cl->host); rfbProcessClientProtocolVersion(cl); return; case RFB_SECURITY_TYPE: debug_printf("STATE:RFB_SECURITY_VERSION---%s",cl->host); rfbProcessClientSecurityType(cl); return; case RFB_AUTHENTICATION: debug_printf("STATE:RFB_AUTHENTICATION---%s",cl->host); rfbAuthProcessClientMessage(cl); return; case RFB_INITIALISATION: debug_printf("STATE:RFB_INITIALISATION---%s",cl->host); rfbProcessClientInitMessage(cl); return; default: rfbProcessClientNormalMessage(cl); return; } }
static void rfbVncAuthSendChallenge(rfbClientPtr cl) { rfbLog("tightvnc-filetransfer/rfbVncAuthSendChallenge\n"); /* 4 byte header is alreay sent. Which is rfbSecTypeVncAuth (same as rfbVncAuth). Just send the challenge. */ rfbRandomBytes(cl->authChallenge); if (rfbWriteExact(cl, (char *)cl->authChallenge, CHALLENGESIZE) < 0) { rfbLogPerror("rfbAuthNewClient: write"); rfbCloseClient(cl); return; } /* Dispatch client input to rfbVncAuthProcessResponse. */ /* This methos is defined in auth.c file */ rfbAuthProcessClientMessage(cl); }