# HG changeset patch # User Shinji KONO # Date 1403872640 -32400 # Node ID d9d2347158532e9bbd247da2dc895ed72b14d591 # Parent 2f6237fea67e965aac354db59e198a149a86b2fd TreeManager for each interface diff -r 2f6237fea67e -r d9d234715853 src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEESender.java --- 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; diff -r 2f6237fea67e -r d9d234715853 src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java --- 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; diff -r 2f6237fea67e -r d9d234715853 src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java --- 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()); } } diff -r 2f6237fea67e -r d9d234715853 src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java --- 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 () { diff -r 2f6237fea67e -r d9d234715853 src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommandChannelListener.java --- 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); } diff -r 2f6237fea67e -r d9d234715853 src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java --- 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); } + } diff -r 2f6237fea67e -r d9d234715853 src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java --- 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; } diff -r 2f6237fea67e -r d9d234715853 src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java --- 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; + } + + } diff -r 2f6237fea67e -r d9d234715853 src/viewer_swing/java/com/glavsoft/viewer/Viewer.java --- 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; + } + } diff -r 2f6237fea67e -r d9d234715853 src/viewer_swing/java/com/glavsoft/viewer/ViewerInterface.java --- 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(); + } diff -r 2f6237fea67e -r d9d234715853 src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java --- 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) {