changeset 145:649794dfb9d5

add my hostname to handle multiple network
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 12 Jun 2014 22:01:05 +0900
parents 1e004d9c599d
children 5be1d92e7835
files src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.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/client/FindRoot.java src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncProtocol.java src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncRootSelectionPanel.java src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java
diffstat 9 files changed, 49 insertions(+), 235 deletions(-) [+]
line wrap: on
line diff
--- 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();
--- 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;
+	}
 }
--- 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) {
 		
--- 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;
 	}
--- 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();
--- 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();			
 		}
--- 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;
 	}
--- 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<String> temp = new ArrayList<String>();
 	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) {
 	}
--- 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<ByteBuffer> 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<yBlock; i++) {
-			for(int g=0; g<xBlock; g++) {
-				if(outOfRangeT < i && i < yBlock - outOfRangeB) {
-					input.get(block);
-				}
-			}
-		}
-		if((rangeX-header.getShort(4))%64==0)
-			skip = 4*block*(header.getShort(8)/64);
-		else 
-			skip =  (4*block*(header.getShort(8)/64))+1;
-		
-
-	}
-	
-	@SuppressWarnings("unused")
-    private void createHeader(ByteBuffer buf) {
-			buf.putShort(4, (short)256);	
-			buf.putShort(6, (short)256);
-			buf.putShort(8, (short)512);	
-			buf.putShort(10, (short)256);
-	}
+    @Override
+    public void addHostToSelectionPanel(int port, String hostname,
+            String myHostName) {
+    }
 
 
 }