Adds support for fence & continuous updates extensions to java viewer.  Adds low level hooks for TurboVNC fine grained quality controls.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4847 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/java/com/tigervnc/rfb/CMsgReaderV3.java b/java/com/tigervnc/rfb/CMsgReaderV3.java
index 6d9e254..915b1e0 100644
--- a/java/com/tigervnc/rfb/CMsgReaderV3.java
+++ b/java/com/tigervnc/rfb/CMsgReaderV3.java
@@ -51,6 +51,8 @@
       case MsgTypes.msgTypeSetColourMapEntries: readSetColourMapEntries(); break;
       case MsgTypes.msgTypeBell:                readBell(); break;
       case MsgTypes.msgTypeServerCutText:       readServerCutText(); break;
+      case MsgTypes.msgTypeServerFence:         readFence(); break;
+      case MsgTypes.msgTypeEndOfContinuousUpdates:  readEndOfContinuousUpdates(); break;
       default:
         vlog.error("unknown message type "+type);
         throw new Exception("unknown message type");
@@ -136,6 +138,33 @@
     handler.setExtendedDesktopSize(x, y, w, h, layout);
   }
 
+  void readFence()
+  {
+    int flags;
+    int len;
+    byte[] data = new byte[64];
+  
+    is.skip(3);
+  
+    flags = is.readU32();
+  
+    len = is.readU8();
+    if (len > data.length) {
+      System.out.println("Ignoring fence with too large payload\n");
+      is.skip(len);
+      return;
+    }
+  
+    is.readBytes(data, 0, len);
+    
+    handler.fence(flags, len, data);
+  }
+  
+  void readEndOfContinuousUpdates()
+  {
+    handler.endOfContinuousUpdates();
+  }
+
   void readClientRedirect(int x, int y, int w, int h) 
   {
     int port = is.readU16();