Fixes handshake failure caused by premature loop break when data is not ready.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4872 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/java/com/tigervnc/rfb/CConnection.java b/java/com/tigervnc/rfb/CConnection.java
index 1e55f04..e5392a1 100644
--- a/java/com/tigervnc/rfb/CConnection.java
+++ b/java/com/tigervnc/rfb/CConnection.java
@@ -74,12 +74,11 @@
private void processVersionMsg()
{
vlog.debug("reading protocol version");
- Boolean done = new Boolean(true);
- if (!cp.readVersion(is, done)) {
+ if (!cp.readVersion(is)) {
state_ = RFBSTATE_INVALID;
throw new Exception("reading version failed: not an RFB server?");
}
- if (!done.booleanValue()) return;
+ if (!cp.done) return;
vlog.info("Server supports RFB protocol version "
+cp.majorVersion+"."+ cp.minorVersion);
diff --git a/java/com/tigervnc/rfb/ConnParams.java b/java/com/tigervnc/rfb/ConnParams.java
index 0803723..3ea0496 100644
--- a/java/com/tigervnc/rfb/ConnParams.java
+++ b/java/com/tigervnc/rfb/ConnParams.java
@@ -43,20 +43,20 @@
setName("");
}
- public boolean readVersion(InStream is, Boolean done)
+ public boolean readVersion(InStream is)
{
+ done = false;
if (verStrPos >= 12) return false;
verStr = new StringBuilder(13);
- is.check(12);
- while (verStrPos < 12) {
+ while (is.checkNoWait(1) && verStrPos < 12) {
verStr.insert(verStrPos++,(char)is.readU8());
}
if (verStrPos < 12) {
- done = Boolean.valueOf(false);
+ done = false;
return true;
}
- done = Boolean.valueOf(true);
+ done = true;
verStr.insert(12,'0');
verStrPos = 0;
if (verStr.toString().matches("RFB \\d{3}\\.\\d{3}\\n0")) {
@@ -181,6 +181,7 @@
}
}
}
+ public boolean done;
public boolean useCopyRect;
public boolean supportsLocalCursor;