void RfbInitializer::initVersion() { char initVersionMsg[] = "RFB 003.008\n"; char clientVersionMsg[13]; size_t msgLen = 12; m_output->writeFully(initVersionMsg, msgLen); m_input->readFully(clientVersionMsg, msgLen); clientVersionMsg[12] = 0; m_minorVerNum = getProtocolMinorVersion(clientVersionMsg); try { checkForLoopback(); // Checking for a ban before auth and then after. checkForBan(); } catch (Exception &e) { if (m_minorVerNum == 3) { m_output->writeUInt32(0); } else { m_output->writeUInt8(0); } AnsiStringStorage reason(&StringStorage(e.getMessage())); unsigned int reasonLen = (unsigned int)reason.getLength(); _ASSERT(reasonLen == reason.getLength()); m_output->writeUInt32(reasonLen); m_output->writeFully(reason.getString(), reasonLen); throw; } }
void RfbInitializer::initVersion() { char initVersionMsg[] = "RFB 003.008\n"; char clientVersionMsg[13]; size_t msgLen = 12; m_output->writeFully(initVersionMsg, msgLen); m_input->readFully(clientVersionMsg, msgLen); clientVersionMsg[12] = 0; m_minorVerNum = getProtocolMinorVersion(clientVersionMsg); try { checkForLoopback(); checkForBan(); } catch (Exception &e) { if (m_minorVerNum == 3) { m_output->writeUInt32(0); } else { m_output->writeUInt8(0); } StringStorage errorMessage(e.getMessage()); size_t reasonLen = errorMessage.getLength(); char *reason = new char[reasonLen + 1]; try { if (errorMessage.toAnsiString(reason, reasonLen + 1)) { m_output->writeUInt32(reasonLen); m_output->writeFully(reason, reasonLen); } } catch (...) { } delete reason; throw; } }