changeset 232:6ee4cdca104c

send value of port and localhost in checkdelay framebufferupdate, and get this.
author oc
date Fri, 10 Oct 2014 23:39:44 +0900
parents 0e0e6744432c
children 26b7c0a6d91b
files src/main/java/com/glavsoft/rfb/encoding/decoder/Decoder.java src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEESender.java src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java src/main/java/jp/ac/u_ryukyu/treevnc/UpdateRectangleMessage.java
diffstat 6 files changed, 84 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/encoding/decoder/Decoder.java	Wed Oct 08 17:44:39 2014 +0900
+++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/Decoder.java	Fri Oct 10 23:39:44 2014 +0900
@@ -24,6 +24,8 @@
 
 package com.glavsoft.rfb.encoding.decoder;
 
+import java.io.UnsupportedEncodingException;
+
 import com.glavsoft.drawing.Renderer;
 import com.glavsoft.exceptions.TransportException;
 import com.glavsoft.transport.Reader;
@@ -33,9 +35,10 @@
 
 	/**
 	 * Decode rectangle data.
+	 * @throws UnsupportedEncodingException 
 	 */
 	abstract public void decode(Reader reader, Renderer renderer,
-    		FramebufferUpdateRectangle rect) throws TransportException;
+    		FramebufferUpdateRectangle rect) throws TransportException, UnsupportedEncodingException;
 
 	/**
 	 * Reset decoder when needed. Ex. reset ZLib stream inflaters for Z* and Tight decoders.
--- a/src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java	Wed Oct 08 17:44:39 2014 +0900
+++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java	Fri Oct 10 23:39:44 2014 +0900
@@ -24,6 +24,8 @@
 
 package com.glavsoft.rfb.encoding.decoder;
 
+import java.io.UnsupportedEncodingException;
+
 import com.glavsoft.exceptions.TransportException;
 import com.glavsoft.rfb.encoding.EncodingType;
 import com.glavsoft.transport.Reader;
@@ -44,6 +46,8 @@
     public int height;
     private EncodingType encodingType;
     public long time;
+    public int port;
+    String localhost;
 
     public FramebufferUpdateRectangle() {
         // nop
@@ -54,7 +58,7 @@
         width = w; height = h;
     }
 
-    public void fill(Reader reader) throws TransportException {
+    public void fill(Reader reader) throws TransportException, UnsupportedEncodingException {
         x = reader.readUInt16();
         y = reader.readUInt16();
         width = reader.readUInt16();
@@ -64,6 +68,11 @@
         encodingType = EncodingType.byId(encoding);
         if (encoding == 17) {
             time = reader.readInt64();
+            port = reader.readInt32();
+            int localhostlength = reader.readInt32();
+            byte[] bytelocalhost = new byte[localhostlength];
+            bytelocalhost = reader.readBytes(bytelocalhost, 0, localhostlength);
+            localhost = new String(bytelocalhost, "UTF-8");
 //            System.out.println("time = " + time);
         }
     }
--- a/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEESender.java	Wed Oct 08 17:44:39 2014 +0900
+++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEESender.java	Fri Oct 10 23:39:44 2014 +0900
@@ -1,5 +1,7 @@
 package com.glavsoft.rfb.encoding.decoder;
 
+import java.io.UnsupportedEncodingException;
+
 import jp.ac.u_ryukyu.treevnc.TreeRFBProto;
 
 import com.glavsoft.drawing.Renderer;
@@ -20,7 +22,7 @@
 
 	@Override
 	public void decode(Reader reader, Renderer renderer,
-			FramebufferUpdateRectangle rect) throws TransportException {
+			FramebufferUpdateRectangle rect) throws TransportException, UnsupportedEncodingException {
 		// TreeVNC handling
         int dataLen = getZrleLength(rect, reader);
         byte[] bytes = new byte[rect.width * rect.height * renderer.getBytesPerPixel()];
--- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Wed Oct 08 17:44:39 2014 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Fri Oct 10 23:39:44 2014 +0900
@@ -267,8 +267,7 @@
                 int length = reader.readInt32();
                 reader.reset();
 
-               
-                rfb.readSendData(length + 24, reader, null);
+                rfb.readSendData(length + 52, reader, null);
 //                System.out.println("rect.time=" + rect.time);
                 sendCheckDelayReply(rect.time);
             } else
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java	Wed Oct 08 17:44:39 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java	Fri Oct 10 23:39:44 2014 +0900
@@ -2,6 +2,7 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
 import java.net.BindException;
 import java.net.NetworkInterface;
 import java.net.ServerSocket;
@@ -9,6 +10,7 @@
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.zip.DataFormatException;
@@ -169,6 +171,7 @@
                             } else if (b[0] == ClientToServerMessage.CHECK_DELAY_REPLY) {
                                 ByteBuffer buf = ByteBuffer.wrap(b);
                                 buf.order(ByteOrder.BIG_ENDIAN);
+//                                getNodeNum(port, hostname, localhostname);
                                 Long time = buf.getLong(2);
                                 Long delay = System.currentTimeMillis() - time;
                                 System.out.println("delay = " + delay);
@@ -545,9 +548,10 @@
      * @param dataLen
      * @param reader
      * @throws TransportException
+     * @throws UnsupportedEncodingException 
      */
     public void readSendData(int dataLen, Reader reader, byte[] bytes)
-            throws TransportException {
+            throws TransportException, UnsupportedEncodingException {
         LinkedList<ByteBuffer> bufs = new LinkedList<ByteBuffer>();
         ByteBuffer header = multicastqueue.allocate(16);
         ByteBuffer serial = multicastqueue.allocate(8);
@@ -565,7 +569,10 @@
             if (i%20 == 0) {
                 LinkedList<ByteBuffer> checkdelay = new LinkedList<ByteBuffer>();
                 long time = System.currentTimeMillis();
-                checkdelay.add(new UpdateRectangleMessage(0, 0, 0, 0, time, EncodingType.CHECK_DELAY).getMessage());
+                int port = 1234;
+                String localhost = "133.13.11.9";
+                String mylocalhost = "localhost";
+                checkdelay.add(new UpdateRectangleMessage(0, 0, 0, 0, time, port, localhost, EncodingType.CHECK_DELAY).getMessage());
                 this.addSerialNumber(checkdelay);
                 multicastqueue.put(checkdelay);
               } i++;
@@ -743,9 +750,21 @@
         return reconnectingId;
     }
 
-
     public void setShowTree(boolean showTree) {
         showTreeNode  = showTree;
     }
 
+    public int getNodeNum(int port, String hostname, String localhostname) {
+        int nodeNum = 0;
+        
+        
+
+        for (Iterator<TreeVNCNode> i = nodeList.iterator(); i.hasNext();) {
+            TreeVNCNode tvn = (TreeVNCNode)i.next();
+            System.out.println("port = " + tvn.port + ", hostname = " + tvn.hostname + ", localhostname = " + tvn.localhostname + ", nodeNumber" + tvn.treeNum);
+        }
+        
+        return nodeNum;
+        
+    }
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/UpdateRectangleMessage.java	Wed Oct 08 17:44:39 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/UpdateRectangleMessage.java	Fri Oct 10 23:39:44 2014 +0900
@@ -1,5 +1,6 @@
 package jp.ac.u_ryukyu.treevnc;
 
+import java.io.UnsupportedEncodingException;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 
@@ -7,47 +8,51 @@
 
 public class UpdateRectangleMessage {
 
-	private ByteBuffer msg;
-	
+    private ByteBuffer msg;
+
+    public UpdateRectangleMessage(int i, int j, int width, int height, long time,
+            int port, String localhost, EncodingType desktopSize) throws UnsupportedEncodingException {
+        byte[] bytelocalhost   = localhost.getBytes("UTF-8");
 
-	public UpdateRectangleMessage(int i, int j, int width, int height, long time,
-			EncodingType desktopSize) {
-		msg = ByteBuffer.allocate(24).order(ByteOrder.BIG_ENDIAN);
-		msg.put((byte) 0); // FrameBufferUpdate
-		msg.put((byte) 0); // padding
-		msg.putShort((short) 1); // number of rectangle
-		msg.putShort((short) i);
-		msg.putShort((short) j);
-		msg.putShort((short) width);
-		msg.putShort((short) height);
-		msg.putInt(desktopSize.getId());
-		msg.putLong(time);
-		
-		msg.flip();
+        msg = ByteBuffer.allocate(52).order(ByteOrder.BIG_ENDIAN);
+        msg.put((byte) 0); // FrameBufferUpdate
+        msg.put((byte) 0); // padding
+        msg.putShort((short) 1); // number of rectangle
+        msg.putShort((short) i);
+        msg.putShort((short) j);
+        msg.putShort((short) width);
+        msg.putShort((short) height);
+        msg.putInt(desktopSize.getId());
+        msg.putLong(time);
+        msg.putInt(port);
+        msg.putInt(localhost.length());
+        msg.put(bytelocalhost);
+
+        msg.flip();
+
+    }
 
-	}
-	
-	public UpdateRectangleMessage(int width, int height,
-			EncodingType desktopSize, byte[] initData, short id) {
-		msg = ByteBuffer.allocate(16+4+initData.length).order(ByteOrder.BIG_ENDIAN);
-		msg.put((byte) 0); // FrameBufferUpdate
-		msg.put((byte) 0); // padding
-		msg.putShort((short) 1); // number of rectangle
-		msg.putShort((short) id);
-		msg.putShort((short) 0);
-		msg.putShort((short) width);
-		msg.putShort((short) height);
-		msg.putInt(desktopSize.getId());
-		msg.putInt(initData.length);
-		msg.put(initData);
-		
-		msg.flip();
+    public UpdateRectangleMessage(int width, int height,
+            EncodingType desktopSize, byte[] initData, short id) {
+        msg = ByteBuffer.allocate(16+4+initData.length).order(ByteOrder.BIG_ENDIAN);
+        msg.put((byte) 0); // FrameBufferUpdate
+        msg.put((byte) 0); // padding
+        msg.putShort((short) 1); // number of rectangle
+        msg.putShort((short) id);
+        msg.putShort((short) 0);
+        msg.putShort((short) width);
+        msg.putShort((short) height);
+        msg.putInt(desktopSize.getId());
+        msg.putInt(initData.length);
+        msg.put(initData);
 
-	}
-	
-	public ByteBuffer getMessage(){
-		return msg;
-	}
+        msg.flip();
+
+    }
 
-	
+    public ByteBuffer getMessage(){
+        return msg;
+    }
+
+
 }