changeset 204:d9d234715853

TreeManager for each interface
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 27 Jun 2014 21:37:20 +0900
parents 2f6237fea67e
children 614db20d8fab
files 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/MyRfbProto.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommandChannelListener.java src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java src/viewer_swing/java/com/glavsoft/viewer/Viewer.java src/viewer_swing/java/com/glavsoft/viewer/ViewerInterface.java src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java
diffstat 11 files changed, 45 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEESender.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEESender.java	Fri Jun 27 21:37:20 2014 +0900
@@ -27,7 +27,7 @@
         reader.reset();
 		if (rfb.hasViewer()) {
 			ZRLEDecoder decoder = new ZRLEDecoder();
-			if (rfb.isRoot()) {
+			if (rfb.isTreeManager()) {
                 rfb.readSendData(dataLen, reader, bytes);
 				decoder.decode1(renderer, rect, bytes, 0);
 				return;
--- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Fri Jun 27 21:37:20 2014 +0900
@@ -90,7 +90,7 @@
 		if(!rfb.getCuiVersion())
 		    renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(),context.getPixelFormat());
 		fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(0, 0, context.getFbWidth(), context.getFbHeight(), true);
-		if(rfb.isRoot()) {
+		if(rfb.isTreeManager()) {
 			fullscreenFbUpdateIncrementalRequest.sendFullScreenRequest();
 			connectionFinished();
 		}
@@ -101,7 +101,7 @@
 		isRunning = true;
 		while (isRunning) {
 			try {
-				if(! rfb.isRoot()) {
+				if(! rfb.isTreeManager()) {
 				    // client has 8byte packet sequence number
 					reader.mark(28);
 					getLost(reader); //check seq consistency
@@ -140,7 +140,7 @@
 				}
 			} catch (TransportException e) {
                 logger.severe("Close session: " + e.getMessage());
-				if(!rfb.isRoot() && !(rfb.getTerminationType())) {
+				if(!rfb.isTreeManager() && !(rfb.getTerminationType())) {
 					System.out.println("task stop");
 					TreeVncProtocol echo = new TreeVncProtocol(rfb.getConnectionParam().getHostName(), rfb.getConnectionParam().getPort());
 					int counter = 3;
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java	Fri Jun 27 21:37:20 2014 +0900
@@ -3,11 +3,9 @@
 import java.io.IOException;
 import java.net.BindException;
 import java.net.InetAddress;
-import java.net.InterfaceAddress;
 import java.net.NetworkInterface;
 import java.net.ServerSocket;
 import java.net.Socket;
-import java.net.SocketAddress;
 import java.net.SocketException;
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
@@ -665,7 +663,6 @@
      */
     public void createConnectionAndStart(ViewerInterface v) {
     	selectPort(ConnectionParams.DEFAULT_VNC_ROOT);
-    	createTreeManagers();
         startTreeVncCommandListener();
     	if(isTreeManager() && firstTime) {
     		getCast = new TreeRootFinderListener(v);
@@ -675,13 +672,6 @@
     	}
     }
 
-    private void createTreeManagers() {
-    	setTreeManager(new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, showTree));
-    	if (treeManager!=null) {
-    		treeManager.getList().getFirst().setPort(getAcceptPort());
-    	}
-	}
-
 	public void startTreeVncCommandListener() {
         acceptThread = new TreeVncCommandChannelListener(this, getAcceptPort());
     	Thread thread = new Thread(acceptThread, "TreeVNC-accept");
@@ -721,7 +711,10 @@
 			NetworkInterface ni;
 			ni = e.nextElement();
 			if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) {
-				addNetworkInterface(ni, null);    			
+		        String hostName = ni.getInetAddresses().nextElement().getHostAddress();
+                TreeManagement treeManager = new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, viewer.getShowTree());
+                treeManager.getList().getFirst().setPort(getAcceptPort());
+				addNetworkInterface(ni, treeManager);    			
 				System.out.println("Interfaces :" + ni.getName());
 			}
 		}
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java	Fri Jun 27 21:37:20 2014 +0900
@@ -19,12 +19,14 @@
     private TreeCommand command ;
     private Socket connection;
 	private short value;
+    private String intf;
 
-    public TreeVncCommand(MyRfbProto rfb,String myHostName, TreeCommand command, int port, String hostname, short value) {
+    public TreeVncCommand(MyRfbProto rfb,String myHostName, TreeCommand command, int port, String hostname, String intf, short value) {
         this.rfb = rfb;
         this.myHostName = myHostName;
         this.hostname = hostname;
         this.port = port;
+        this.intf= intf;
         this.command = command;
         this.value = value;
     }
@@ -77,7 +79,7 @@
      * @param myHostName 
      */
     void handleWhereToConnect(int port, String hostname, String myHostName) {
-        rfb.getTreeManager().decideWhereToConnect(hostname,port,myHostName);
+        rfb.getTreeManager(intf).decideWhereToConnect(hostname,port,myHostName);
     }
 
     /**
@@ -91,7 +93,7 @@
      * @throws UnknownHostException 
      */
     void handleConnectTo(int port, String hostname, String myHostName, boolean leader, short id) {
-        if (rfb.isRoot()) {
+        if (rfb.isTreeManager()) {
             return; // we don't have parent
         }
         rfb.setId(id);
@@ -122,7 +124,7 @@
      * @param myHostName 
      */
     private void handleLostParent(int port, String hostname, String myHostName) {
-        rfb.getTreeManager().fixLostParent(hostname,port,myHostName);
+        rfb.getTreeManager(intf).fixLostParent(hostname,port,myHostName);
     }
     
     public TreeCommand getCommand () {
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommandChannelListener.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommandChannelListener.java	Fri Jun 27 21:37:20 2014 +0900
@@ -1,4 +1,6 @@
 package jp.ac.u_ryukyu.treevnc;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
 import java.net.Socket;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
@@ -95,11 +97,13 @@
         /**
          * initial connection of RFB protocol
          */
-        String myHostAddress = connection.getLocalAddress().getHostAddress();
+        InetAddress adr = connection.getLocalAddress();
+        String myHostAddress =adr .getHostAddress();
+        String intf = NetworkInterface.getByInetAddress(adr).getName();
         sendRfbVersion(os);
         byte[] b;
         if ((b = readVersionMsg(is, os))!=null) {
-            TreeVncCommand cmd = treeVncCommand(b,is,os,myHostAddress);
+            TreeVncCommand cmd = treeVncCommand(b,is,os,myHostAddress,intf);
             if (cmd!=null) return cmd;
         }
         sendSecurityType(os);
@@ -126,7 +130,7 @@
      *       port         4 byte 
      *       rest of data ( add padding if it is shorter than 12 byte)
      */
-    TreeVncCommand treeVncCommand(byte[] b, Reader is, Writer os, String myHostName) throws TransportException, IOException {
+    TreeVncCommand treeVncCommand(byte[] b, Reader is, Writer os, String myHostName,String intf) throws TransportException, IOException {
         ByteBuffer buf = ByteBuffer.wrap(b);
         TreeCommand command = TreeCommand.create(buf.get()&0xff);  // make it unsigned
         buf.get();
@@ -147,7 +151,7 @@
             }
             hostname = new String(namebuf);
         }
-        return new TreeVncCommand(rfb, myHostName, command, port, hostname, value);
+        return new TreeVncCommand(rfb, myHostName, command, port, hostname, intf, value);
     }
     
 
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java	Fri Jun 27 21:37:20 2014 +0900
@@ -18,11 +18,10 @@
 	}
 
     @Override
-    public boolean isRoot() {
+    public boolean isTreeManager() {
         return false;
     }
 
-
 	void sendInitData(OutputStream os) throws IOException {
 		os.write(context.getInitData());
 	}
@@ -82,4 +81,5 @@
 //		multicastqueue.put(sendData);
 		
 	}
+
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Fri Jun 27 21:37:20 2014 +0900
@@ -33,7 +33,7 @@
 	}
 
 	@Override
-    public boolean isRoot() {
+    public boolean isTreeManager() {
         return true;
     }
     
--- a/src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java	Fri Jun 27 21:37:20 2014 +0900
@@ -37,6 +37,7 @@
 	private ConnectionPresenter connectionPresenter;
 	protected MyRfbProto myRfb;
 	private boolean cuiVersion;
+    private boolean showTree = false;
 
 	public static void main(String[] args) {
 		Parser parser = new Parser();
@@ -220,9 +221,9 @@
 		} else {
 		    cp.setHostName(hostName);
 		}
+        rfb.setViewer(viewer);
 		rfb.createConnectionAndStart(this);
 		cp.sendWhereToConnect(viewer);
-		rfb.setViewer(viewer);
 		rfb.setCuiVersion(cui);
 		viewer.myRfb = rfb;
 		SwingUtilities.invokeLater(viewer);
@@ -275,4 +276,10 @@
 		return connectionPresenter.getSocket();
 	}
 
+    @Override
+    public boolean getShowTree() {
+        return showTree;
+    }
+
+
 }
--- a/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java	Fri Jun 27 21:37:20 2014 +0900
@@ -295,6 +295,7 @@
 		MyRfbProtoClient rfb = new MyRfbProtoClient();
 		rfb.setCuiVersion(cui);
 		rfb.setHasViewer(true);
+        rfb.setViewer(this);
         rfb.createConnectionAndStart(this);
 		CreateConnectionParam cp = new CreateConnectionParam(rfb);
 		if (hostName!=null) {
@@ -309,7 +310,6 @@
 		}
 		cp.sendWhereToConnect(this);
 		isTreeVNC = true;
-		rfb.setViewer(this);
 		myRfb =  rfb;
         settings.setViewOnly(true); // too avoid unnecessary upward traffic
         rfb.getAcceptThread().waitForShutdown();
@@ -357,7 +357,7 @@
         connectionParams.setConnectionParam(hostName, vncport);
         isApplet = true;
         this.setNoConnection(false);
-        if (myRfb.isRoot()) {
+        if (myRfb.isTreeManager()) {
         	setVisible(false);
         }
         run();
@@ -365,6 +365,7 @@
 
     public void proxyStart(String[] argv, int width, int height, boolean showTree) {
     	fbWidth = width;
+    	this.showTree = showTree;
     	proxyStart(argv, showTree);
     }
 
@@ -415,4 +416,9 @@
 		return connectionPresenter.getSocket();
 	}
 
+    @Override
+    public boolean getShowTree() {
+        return showTree;
+    }
+
 }
--- a/src/viewer_swing/java/com/glavsoft/viewer/ViewerInterface.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/ViewerInterface.java	Fri Jun 27 21:37:20 2014 +0900
@@ -37,4 +37,6 @@
 
 	public Socket getVNCSocket();
 
+    public boolean getShowTree();
+
 }
--- a/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java	Fri Jun 27 19:40:46 2014 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java	Fri Jun 27 21:37:20 2014 +0900
@@ -181,7 +181,7 @@
 //			frame.pack();
             outerPanel.setSize(surface.getPreferredSize());
             internalPack(null);
-            if(viewer.getRfb().isRoot() || viewer.getCuiVersion()) {
+            if(viewer.getRfb().isTreeManager() || viewer.getCuiVersion()) {
             	frame.setVisible(false);
             	viewer.setCuiVersion(false);
             } else 
@@ -833,7 +833,7 @@
         	    // before change server, data from previous server
         	    // should be stopped.
         	    viewer.setCuiVersion(false);
-        	    if (viewer.getRfb().isRoot()) {
+        	    if (viewer.getRfb().isTreeManager()) {
         	        try {
         	            viewer.getRfb().changeVNCServer(viewer, "127.0.0.1", 1980, 1090, viewer.getRfb().getId());
         	        } catch (Exception e1) {