]> source.dussan.org Git - tigervnc.git/commitdiff
cleaned up readVersion/writeVersion routines in java client. readVersion wasn't faili...
authorBrian Hinz <bphinz@users.sourceforge.net>
Wed, 29 Jun 2011 20:18:06 +0000 (20:18 +0000)
committerBrian Hinz <bphinz@users.sourceforge.net>
Wed, 29 Jun 2011 20:18:06 +0000 (20:18 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4572 3789f03b-4d11-0410-bbf8-ca57d06f2519

java/src/com/tigervnc/rfb/CConnection.java
java/src/com/tigervnc/rfb/ConnParams.java

index 2a7ecfcce7c3b417c3d0a501ecca5947ab8c4564..da4ac6fd3c5768aebbc461cd3bce08eb3c4da5e8 100644 (file)
@@ -66,12 +66,12 @@ abstract public class CConnection extends CMsgHandler {
 
   private void processVersionMsg() {
     vlog.debug("reading protocol version");
-    boolean done = true;
+    Boolean done = new Boolean(true);
     if (!cp.readVersion(is, done)) {
       state_ = RFBSTATE_INVALID;
       throw new Exception("reading version failed: not an RFB server?");
     }
-    if (!done) return;
+    if (!done.booleanValue()) return;
 
     vlog.info("Server supports RFB protocol version "+cp.majorVersion+"."+
               cp.minorVersion);
index c5e50d51d6cbbe663152e3a795c86b242f9dea9f..70d6114f925260cc62e4d9a955b19b1168b39016 100644 (file)
@@ -39,37 +39,32 @@ public class ConnParams {
     setName("");
   }
 
-  public boolean readVersion(InStream is, boolean done) {
+  public boolean readVersion(InStream is, Boolean done) 
+  {
     if (verStrPos >= 12) return false;
-    byte[] verStr = new byte[13];
-    while (verStrPos < 12) {
-      verStr[verStrPos++] = (byte)is.readU8();
+    verStr = new StringBuilder(13);
+    while (verStrPos < 12 && is.checkNoWait(1)) {
+      verStr.insert(verStrPos++,(char)is.readU8());
     }
 
     if (verStrPos < 12) {
-      done = false;
+      done = Boolean.valueOf(false);
       return true;
     }
-    done = true;
-    verStr[12] = 0;
-    majorVersion = (verStr[4] - '0') * 100 + (verStr[5] - '0') * 10 + (verStr[6] - '0');
-    minorVersion = (verStr[8] - '0') * 100 + (verStr[9] - '0') * 10 + (verStr[10] - '0');
+    done = Boolean.valueOf(true);
+    verStr.insert(12,'0');
     verStrPos = 0;
-    return true;
+    if (verStr.toString().matches("RFB \\d{3}\\.\\d{3}\\n0")) {
+      majorVersion = Integer.parseInt(verStr.substring(4,7));
+      minorVersion = Integer.parseInt(verStr.substring(8,11));
+      return true;
+    }
+    return false;
   }
 
   public void writeVersion(OutStream os) {
-    byte[] b = new byte[12];
-    b[0] = (byte)'R'; b[1] = (byte)'F'; b[2] = (byte)'B'; b[3] = (byte)' ';
-    b[4] = (byte)('0' + (majorVersion / 100) % 10);
-    b[5] = (byte)('0' + (majorVersion / 10) % 10);
-    b[6] = (byte)('0' + majorVersion % 10);
-    b[7] = (byte)'.';
-    b[8] = (byte)('0' + (minorVersion / 100) % 10);
-    b[9] = (byte)('0' + (minorVersion / 10) % 10);
-    b[10] = (byte)('0' + minorVersion % 10);
-    b[11] = (byte)'\n';
-    os.writeBytes(b, 0, 12);
+    String str = String.format("RFB %03d.%03d\n", majorVersion, minorVersion);
+    os.writeBytes(str.getBytes(), 0, 12);
     os.flush();
   }
 
@@ -171,6 +166,6 @@ public class ConnParams {
   private int nEncodings_;
   private int[] encodings_;
   private int currentEncoding_;
-  private String verStr;
+  private StringBuilder verStr;
   private int verStrPos;
 }