# HG changeset patch # User oc # Date 1402653074 -32400 # Node ID 1c95bd5bebcf9a1bf5732ab3a7767842c1f34a02 # Parent c3158d9e2c0bc54e9d2aab4599fb50cd1883ffdf root finder for multiple network. diff -r c3158d9e2c0b -r 1c95bd5bebcf src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncProtocol.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncProtocol.java Fri Jun 13 18:16:27 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncProtocol.java Fri Jun 13 18:51:14 2014 +0900 @@ -45,8 +45,8 @@ } - public void findRootReply(String hostname, int port) throws IOException { - sendWithHostAndPort(ProtocolContext.FIND_ROOT_REPLY, hostname, port); + public void findRootReply(int port) throws IOException { + sendWithHostAndPort(ProtocolContext.FIND_ROOT_REPLY, null, port); } public void whereToConnect(String hostname, int port) throws IOException { @@ -65,6 +65,11 @@ public void sendWithHostAndPort(int command, String hostname, int port) throws IOException { openport(); + if (hostname == null) { + // in case of root finder, we can't get localaddress from datagram packet. + // so use local part of TCP socket. + hostname = echoSocket.getLocalAddress().getHostAddress(); + } int cmdlen = 4+4+4+hostname.length(); if (cmdlen < 12) cmdlen=12; ByteBuffer buf = ByteBuffer.allocate(cmdlen); diff -r c3158d9e2c0b -r 1c95bd5bebcf src/main/java/jp/ac/u_ryukyu/treevnc/server/TreeRootFinderListener.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/TreeRootFinderListener.java Fri Jun 13 18:16:27 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/TreeRootFinderListener.java Fri Jun 13 18:51:14 2014 +0900 @@ -35,6 +35,7 @@ soc.joinGroup(mAddr); while (!stopFlag) { soc.receive(recvPacket); + String hostname = recvPacket.getAddress().getHostAddress(); byte[] reply = recvPacket.getData(); int len = recvPacket.getLength(); if (len != 12) { @@ -49,9 +50,9 @@ port = port * 256 + reply[10]; port = port * 256 + reply[11]; - TreeVncProtocol t = new TreeVncProtocol("", port); + TreeVncProtocol t = new TreeVncProtocol(hostname, port); try { - t.findRootReply(getMyAddress(), vps.getRfb().getAcceptPort()); + t.findRootReply(vps.getRfb().getAcceptPort()); } catch (IOException e) { e.printStackTrace(); }