# HG changeset patch # User Shinji KONO # Date 1402578065 -32400 # Node ID 649794dfb9d5021ac3a8dec0dc6467d88b8bc4de # Parent 1e004d9c599d2f1d89eb3ccecd548409b0e39bfb add my hostname to handle multiple network diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java --- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Thu Jun 12 22:01:05 2014 +0900 @@ -150,19 +150,16 @@ logger.severe("Close session: " + e.getMessage()); if(!rfb.isRoot() && !(rfb.getTerminationType())) { System.out.println("task stop"); - int counter = 0; // static int ? TreeVncProtocol echo = rfb.getEcho(); - while(true) { - // after set time out. not counter. - if (counter > 3) { - echo.notfoundParent(); - } + int counter = 3; + while(counter-- > 0) { try { - if (echo.lostHost()) break; + echo.lostParent(rfb.getMyAddress(),rfb.getAcceptPort()); + break; } catch (Exception e1) { logger.severe("Cannot send lostHost: " + e1.getMessage()); + sleep(3000); } - counter++; } } else if (isRunning) { // logger.severe("Close proxy: "); @@ -193,7 +190,16 @@ } } - private void setColorMapEntries() throws TransportException { + private void sleep(int i) { + try { + Thread.sleep(i); + } catch (InterruptedException e) { + // nothing. + } + } + + + private void setColorMapEntries() throws TransportException { reader.readByte(); // padding reader.readUInt16(); // first color index int length = reader.readUInt16(); diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java Thu Jun 12 22:01:05 2014 +0900 @@ -12,6 +12,7 @@ private String hostName; private int portNumber = ConnectionParams.DEFAULT_VNC_ROOT; private MyRfbProto rfb; + private String myHostName; public CreateConnectionParam(MyRfbProto rfb) { this.rfb = rfb; @@ -34,7 +35,7 @@ TreeVncProtocol echo = new TreeVncProtocol(hostName,portNumber); rfb.setEcho(echo); try { - echo.whereToConnect(rfb.getMyAddress(),rfb.getAcceptPort()); + echo.whereToConnect(myHostName,rfb.getAcceptPort()); } catch (IOException e) { // cannot send where to connect } @@ -43,14 +44,14 @@ public void runAcceptThread() { rfb.selectPort(ConnectionParams.DEFAULT_VNC_ROOT); AcceptThread acceptThread = new AcceptThread(rfb, rfb.getAcceptPort()); - portNumber = rfb.getAcceptPort(); Thread accThread = new Thread(acceptThread); accThread.start(); } - public synchronized void setHostName(String _hostName, int port) { + public synchronized void setHostName(String _hostName, int port, String _myHostName) { hostName = _hostName; portNumber = port; + myHostName = _myHostName; notify(); } @@ -63,4 +64,7 @@ hostName = hostAndPort; } + public String getMyHostName() { + return myHostName; + } } diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java Thu Jun 12 22:01:05 2014 +0900 @@ -64,7 +64,7 @@ abstract public boolean isRoot() ; - public boolean initialConnection(final Writer os, final Reader is) + public boolean initialConnection(final Writer os, final Reader is, Socket connection) throws IOException, TransportException { /** * initial connection of RFB protocol @@ -72,7 +72,8 @@ sendRfbVersion(os); byte[] b; if ((b = readVersionMsg(is, os))!=null) { - treeVncCommand.treeVncCommand(b,is,os); + String myHostAddress = connection.getLocalAddress().getHostAddress(); + treeVncCommand.treeVncCommand(b,is,os,myHostAddress); return true; } sendSecurityType(os); @@ -96,7 +97,7 @@ public void newClient(AcceptThread acceptThread, final Socket newCli,final Writer os, final Reader is) { try { - if (initialConnection(os, is)) { + if (initialConnection(os, is, newCli)) { // TreeVNC command is processed newCli.close(); return; @@ -704,9 +705,7 @@ // here. } - public void addHostToSelectionPanel(int port, String hostname) { - - } + public abstract void addHostToSelectionPanel(int port, String hostname,String myHostName) ; public void createRootSelectionPanel(CreateConnectionParam createConnectionParam) { diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java Thu Jun 12 22:01:05 2014 +0900 @@ -9,7 +9,6 @@ import com.glavsoft.rfb.protocol.ProtocolContext; import com.glavsoft.transport.Reader; import com.glavsoft.transport.Writer; -import com.glavsoft.viewer.ViewerImpl; import jp.ac.u_ryukyu.treevnc.client.TreeVncProtocol; import jp.ac.u_ryukyu.treevnc.server.VncProxyService; @@ -30,10 +29,11 @@ * @param b 12byte header ( command 4byte, length 4byte, port 4byte, option String ) * @param is * @param os + * @param myHostName * @throws TransportException * @throws IOException */ - void treeVncCommand(byte[] b, Reader is, Writer os) throws TransportException, IOException { + void treeVncCommand(byte[] b, Reader is, Writer os, String myHostName) throws TransportException, IOException { ByteBuffer buf = ByteBuffer.wrap(b); int command = buf.get()&0xff; // make it unsigned buf.position(buf.position()+3); @@ -51,7 +51,7 @@ } switch (command) { case ProtocolContext.FIND_ROOT_REPLY : - handleFindRootReply(port,hostname); + handleFindRootReply(port,hostname,myHostName); break; case ProtocolContext.CONNECT_TO_AS_LEADER : handleConnectTo( port,hostname,true); @@ -68,9 +68,6 @@ case ProtocolContext.LOST_PARENT : handleLostParent(port,hostname); break; - case ProtocolContext.NOT_FOUND_PARENT : - handleNotFoundParent(port,hostname); - break; default: System.out.println("unknown treeVNC command" + command); } @@ -109,8 +106,8 @@ * @param port * @param hostname */ - void handleFindRootReply(int port, String hostname) { - rfb.addHostToSelectionPanel(port, hostname); + void handleFindRootReply(int port, String hostname,String myHostname) { + rfb.addHostToSelectionPanel(port, hostname,myHostname); } /** @@ -123,15 +120,6 @@ viewer.fixLostParent(hostname,port); } - /** - * Some parent is missing. Reorganize tree - * @param port - * @param hostname - */ - private void handleNotFoundParent(int port, String hostname) { - treeProtocol.notfoundParent(hostname, port); - } - public void setVncProtocol(TreeVncProtocol _echo) { this.treeProtocol = _echo; } diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/jp/ac/u_ryukyu/treevnc/client/FindRoot.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/FindRoot.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/FindRoot.java Thu Jun 12 22:01:05 2014 +0900 @@ -74,16 +74,6 @@ } } - - - /** - * @return - * reply to findRootMassage - * - */ - public String textAddress() { - return rootSelectionPanel.getAddress(); - } public String textPort() { return rootSelectionPanel.getPort(); diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java Thu Jun 12 22:01:05 2014 +0900 @@ -58,9 +58,9 @@ } - public void addHostToSelectionPanel(int port, String hostname) { + public void addHostToSelectionPanel(int port, String hostname,String myHostName) { if (rootSelectionPanel != null) { - rootSelectionPanel.checkBox(Integer.toString(port) + ":" + hostname); + rootSelectionPanel.checkBox(Integer.toString(port) + ":" + hostname + ":" + myHostName); rootSelectionPanel.setButton(); rootSelectionPanel.visible(); } diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncProtocol.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncProtocol.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncProtocol.java Thu Jun 12 22:01:05 2014 +0900 @@ -12,13 +12,9 @@ private BufferedReader is = null; private DataOutputStream os = null; private Socket echoSocket = null; - private boolean runflag = false; - private Socket clientSocket = null; private int echoPort; public ViewerImpl client; private String parentAddress; - public String parentNum; - public String treeNum; public boolean leaderFlag; private String myAddress; @@ -52,23 +48,13 @@ } public void whereToConnect(String hostname, int port) throws IOException { - sendWithHostAndPort(ProtocolContext.WHERE_TO_CONNECT, hostname, port); + sendWithHostAndPort(ProtocolContext.WHERE_TO_CONNECT, hostname, port); } public void connectTo(String hostname, int port,int leaderFlag) throws IOException{ - int command = ProtocolContext.CONNECT_TO; - openport(); - ByteBuffer buf = ByteBuffer.allocate(4+4+4+4+hostname.length()); - buf.order(ByteOrder.BIG_ENDIAN); - buf.put((byte) command); - buf.put((byte) leaderFlag); - buf.put((byte) 0); - buf.put((byte) 0); - buf.putInt(4+hostname.length()); // length - buf.putInt(port); - buf.put(hostname.getBytes(), 0, hostname.length()); - sendCommandToTheRoot(buf); - } + int command = leaderFlag == 1 ? ProtocolContext.CONNECT_TO_AS_LEADER : ProtocolContext.CONNECT_TO; + sendWithHostAndPort(command , hostname, port); + } public void lostParent(String hostname, int port) throws IOException { sendWithHostAndPort(ProtocolContext.LOST_PARENT, hostname, port); @@ -99,38 +85,6 @@ streamClose(); } - - /** - * Call at lost host - * @throws IOException - * @throws NumberFormatException - */ - public boolean lostHost() throws NumberFormatException, IOException { - openport(); - if (runflag) return true; - if ("1".equals(leaderFlag)) { - openport(); - lostParent(treeNum,Integer.parseInt(parentNum)); - streamClose(); - } - return true; - } - - public boolean notfoundParent() { - openport(); - runflag = true; - try { - lostParent(treeNum, Integer.parseInt(parentNum)); // 2 - } catch (Exception e) { - } - return true; - } - - public void notfoundParent(String hostname, int port) { - - } - - void streamClose() throws IOException { os.close(); is.close(); @@ -149,45 +103,6 @@ return myAddress; } - // create socket for ReConnection. - public Socket createSocketForClient(Socket soc, boolean flag) throws IOException { - String parentAddress; - int count = 0; - System.out.println("########################PATH************************"); - BufferedReader is = new BufferedReader(new InputStreamReader(soc.getInputStream())); - parentAddress = is.readLine(); - String port = is.readLine(); - // It is called when the screen changes. - if ("reconnection".equals(parentAddress)) { - while (true) { - try { - client.setOpenPort(Integer.parseInt(port)); - System.out.println("----------:"+this.parentAddress+"----------:"+port); - return new Socket(this.parentAddress, - Integer.parseInt(port)); - } catch (IOException e) { - try { - Thread.sleep(1000); - } catch (InterruptedException e1) { - e1.printStackTrace(); - } - if (count++ > 5) - break; - continue; - } - } - } else { - System.out.println("###########################faild" + parentAddress+"port::"+port); - if (parentAddress == null) - return null; - is.readLine();// parentNum - } - Socket socket = new Socket(parentAddress, Integer.parseInt(port)); - socket.setReuseAddress(true); - System.out.println("Return Soket"); - return socket; - } - public String getParentAddress() { return parentAddress; } diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncRootSelectionPanel.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncRootSelectionPanel.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncRootSelectionPanel.java Thu Jun 12 22:01:05 2014 +0900 @@ -6,8 +6,6 @@ import java.awt.*; import java.awt.event.*; -import java.util.ArrayList; - import jp.ac.u_ryukyu.treevnc.CreateConnectionParam; public class TreeVncRootSelectionPanel extends JFrame implements ActionListener, @@ -25,11 +23,9 @@ private double height = 500; private JLabel label; private boolean flag; - private ArrayList temp = new ArrayList(); private int counter = 0; // private JCheckBox[] check = new JCheckBox[20]; private Checkbox[] check = new Checkbox[20]; - private boolean firstFlag = true; private String hostAddress; private String port; private CheckboxGroup ch = new CheckboxGroup(); @@ -108,22 +104,6 @@ return t1.getText(); } - public String getAddress() { - int i = 0; - while (!(flag)) { - if (i >= 50) { - return "notFound"; - } - try { - Thread.sleep(500); - } catch (InterruptedException e) { - e.printStackTrace(); - } - i++; - } - return hostAddress; - } - public String getPortOption() { return t2.getText(); } @@ -137,45 +117,17 @@ for (int t = 0; t < counter; t++) { if (check[t].getState()) { System.out.println(check[t].getLabel()); - setStatus(check[t].getLabel()); - unVisible(); - cp.setHostName(hostAddress,Integer.parseInt(port)); + String str = check[t].getLabel(); + String[] temp = str.split(":"); + String port = temp[0]; + String hostAddress = temp[1]; + String rootAddress = temp[2]; + cp.setHostName(hostAddress,Integer.parseInt(port),rootAddress); + unVisible(); } } } - private void setStatus(String str) { - String[] temp = str.split(":"); - port = temp[0]; - hostAddress = temp[1]; - } - - String splitString(String str) { - String[] split = str.split("\\*"); - String comper; - if (split.length > 4) { - split[4] = null; - } - comper = split[1] + split[3]; - if (firstFlag) { - temp.add(comper); - firstFlag = false; - return "port:" + split[0] + ":host:" + split[1] + ":proxy:" - + split[3]; - } - for (int t = 0; t < temp.size(); t++) { - if (!(comper.equals(temp.get(t)))) { - if (t == temp.size() - 1) { - temp.add(comper); - return "port:" + split[0] + ":host:" + split[1] + ":proxy:" - + split[3]; - } - } else { - break; - } - } - return null; - } public void itemStateChanged(ItemEvent e) { } diff -r 1e004d9c599d -r 649794dfb9d5 src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java Thu Jun 12 19:35:00 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java Thu Jun 12 22:01:05 2014 +0900 @@ -39,9 +39,6 @@ public RequestScreenThread rThread; private Thread requestThread; - private int rangeX = 256; // screenRange XPosition - private int rangeY = 256; // screenRange YPosition - private int rangeHeight = 256; // screenRange Height public MyRfbProtoProxy() { rThread = new RequestScreenThread(this); @@ -117,47 +114,10 @@ - - @SuppressWarnings("unused") - private void testScreenSize(LinkedList list, ByteBuffer header) { - int block = (64*64*3)+1; // size of one-block. - int skip; // skip-byte - int xBlock = (header.getShort(8)-header.getShort(4))/64; //xBlockNum - int yBlock = (header.getShort(10)-header.getShort(6))/64; // yBlockNum; - int outOfRangeT = (rangeY - header.getShort(6))/64 > 0 ? (rangeY - header.getShort(6))/64 : 0; - int outOfRangeB = (header.getShort(6) + header.getShort(10))-(rangeY + rangeHeight)/64 > 0 ? - (header.getShort(6) + header.getShort(10))-(rangeY + rangeHeight)/64 : 0; - int outOfRangeL = (rangeX - header.getShort(4))/64 > 0 ? (rangeY - header.getShort(4))/64 : 0; - int outOfRangeR = (header.getShort(4) + header.getShort(8))-(rangeY + rangeHeight)/64 > 0 ? - (header.getShort(4) + header.getShort(8))-(rangeY + rangeHeight)/64 : 0; - ByteBuffer input = list.getFirst(); - if((header.getShort(8)-header.getShort(4)%64)!=0) - ++xBlock; - if((header.getShort(10)-header.getShort(6)%64)!=0) - ++yBlock; - - for(int i=0; i