瀏覽代碼

Move version reading/writing out of ConnParams

That object is just a container for the current state. Move the I/O
to the classes already doing such stuff.
tags/v1.9.90
Pierre Ossman 6 年之前
父節點
當前提交
ea7ede9838
共有 4 個文件被更改,包括 41 次插入42 次删除
  1. 19
    4
      common/rfb/CConnection.cxx
  2. 1
    27
      common/rfb/ConnParams.cxx
  3. 0
    7
      common/rfb/ConnParams.h
  4. 21
    4
      common/rfb/SConnection.cxx

+ 19
- 4
common/rfb/CConnection.cxx 查看文件

@@ -128,13 +128,25 @@ void CConnection::processMsg()

void CConnection::processVersionMsg()
{
char verStr[13];
int majorVersion;
int minorVersion;

vlog.debug("reading protocol version");
bool done;
if (!cp.readVersion(is, &done)) {

if (!is->checkNoWait(12))
return;

is->readBytes(verStr, 12);
verStr[12] = '\0';

if (sscanf(verStr, "RFB %03d.%03d\n",
&majorVersion, &minorVersion) != 2) {
state_ = RFBSTATE_INVALID;
throw Exception("reading version failed: not an RFB server?");
}
if (!done) return;

cp.setVersion(majorVersion, minorVersion);

vlog.info("Server supports RFB protocol version %d.%d",
cp.majorVersion, cp.minorVersion);
@@ -152,7 +164,10 @@ void CConnection::processVersionMsg()
cp.setVersion(3,8);
}

cp.writeVersion(os);
sprintf(verStr, "RFB %03d.%03d\n", cp.majorVersion, cp.minorVersion);
os->writeBytes(verStr, 12);
os->flush();

state_ = RFBSTATE_SECURITY_TYPES;

vlog.info("Using RFB protocol version %d.%d",

+ 1
- 27
common/rfb/ConnParams.cxx 查看文件

@@ -18,8 +18,6 @@
* USA.
*/
#include <stdio.h>
#include <rdr/InStream.h>
#include <rdr/OutStream.h>
#include <rfb/Exception.h>
#include <rfb/encodings.h>
#include <rfb/ledStates.h>
@@ -39,7 +37,7 @@ ConnParams::ConnParams()
supportsSetDesktopSize(false), supportsFence(false),
supportsContinuousUpdates(false),
compressLevel(2), qualityLevel(-1), fineQualityLevel(-1),
subsampling(subsampleUndefined), name_(0), verStrPos(0),
subsampling(subsampleUndefined), name_(0),
ledState_(ledUnknown)
{
setName("");
@@ -52,30 +50,6 @@ ConnParams::~ConnParams()
delete cursor_;
}

bool ConnParams::readVersion(rdr::InStream* is, bool* done)
{
if (verStrPos >= 12) return false;
while (is->checkNoWait(1) && verStrPos < 12) {
verStr[verStrPos++] = is->readU8();
}

if (verStrPos < 12) {
*done = false;
return true;
}
*done = true;
verStr[12] = 0;
return (sscanf(verStr, "RFB %03d.%03d\n", &majorVersion,&minorVersion) == 2);
}

void ConnParams::writeVersion(rdr::OutStream* os)
{
char str[13];
sprintf(str, "RFB %03d.%03d\n", majorVersion, minorVersion);
os->writeBytes(str, 12);
os->flush();
}

void ConnParams::setPF(const PixelFormat& pf)
{
pf_ = pf;

+ 0
- 7
common/rfb/ConnParams.h 查看文件

@@ -30,8 +30,6 @@
#include <rfb/PixelFormat.h>
#include <rfb/ScreenSet.h>

namespace rdr { class InStream; }

namespace rfb {

const int subsampleUndefined = -1;
@@ -47,9 +45,6 @@ namespace rfb {
ConnParams();
~ConnParams();

bool readVersion(rdr::InStream* is, bool* done);
void writeVersion(rdr::OutStream* os);

int majorVersion;
int minorVersion;

@@ -114,8 +109,6 @@ namespace rfb {
char* name_;
Cursor* cursor_;
std::set<rdr::S32> encodings_;
char verStr[13];
int verStrPos;
unsigned int ledState_;
};
}

+ 21
- 4
common/rfb/SConnection.cxx 查看文件

@@ -80,7 +80,12 @@ void SConnection::setStreams(rdr::InStream* is_, rdr::OutStream* os_)

void SConnection::initialiseProtocol()
{
cp.writeVersion(os);
char str[13];

sprintf(str, "RFB %03d.%03d\n", defaultMajorVersion, defaultMinorVersion);
os->writeBytes(str, 12);
os->flush();

state_ = RFBSTATE_PROTOCOL_VERSION;
}

@@ -104,13 +109,25 @@ void SConnection::processMsg()

void SConnection::processVersionMsg()
{
char verStr[13];
int majorVersion;
int minorVersion;

vlog.debug("reading protocol version");
bool done;
if (!cp.readVersion(is, &done)) {

if (!is->checkNoWait(12))
return;

is->readBytes(verStr, 12);
verStr[12] = '\0';

if (sscanf(verStr, "RFB %03d.%03d\n",
&majorVersion, &minorVersion) != 2) {
state_ = RFBSTATE_INVALID;
throw Exception("reading version failed: not an RFB client?");
}
if (!done) return;

cp.setVersion(majorVersion, minorVersion);

vlog.info("Client needs protocol version %d.%d",
cp.majorVersion, cp.minorVersion);

Loading…
取消
儲存