# HG changeset patch # User oshiro # Date 1550483183 -32400 # Node ID af958194248bebf84b9e11e344a655a1dbb7bd6a # Parent d409e89ec8ec03dfae05feae0aa5c266aa355e1f change replyToRootSearchMulticast diff -r d409e89ec8ec -r af958194248b src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java --- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Mon Feb 18 18:33:48 2019 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Mon Feb 18 18:46:23 2019 +0900 @@ -50,7 +50,7 @@ public class ReceiverTask implements Runnable { - private static final byte FRAMEBUFFER_UPDATE = 0; + public static final byte FRAMEBUFFER_UPDATE = 0; private static final byte SET_COLOR_MAP_ENTRIES = 1; private static final byte BELL = 2; private static final byte SERVER_CUT_TEXT = 3; @@ -120,15 +120,7 @@ // pass the input stream to the TreeVNC protocol reader return; } - if(! rfb.isTreeManager() && rfb.isAddSerialNum()) { - // client has 8byte packet sequence number - // add serial number flag (4byte) - reader.mark(20+8+4); - getLost(reader); //check seq consistency - } else { - reader.mark(20+4); - } - byte messageId = reader.readByte(); + byte messageId = getMessageId(); switch (messageId) { case FRAMEBUFFER_UPDATE: @@ -200,6 +192,18 @@ } } + public byte getMessageId() throws Exception { + if(! rfb.isTreeManager() && rfb.isAddSerialNum()) { + // client has 8byte packet sequence number + // add serial number flag (4byte) + reader.mark(20+8+4); + getLost(reader); //check seq consistency + } else { + reader.mark(20+4); + } + return reader.readByte(); + } + public void sendFrameBufferUpdateRequest() { if (rfb.isTreeManager()) { sendFrameBufferUpdateRequest0(); @@ -418,4 +422,8 @@ } } } + + public void setReader(Reader reader) { + this.reader = reader; + } } diff -r d409e89ec8ec -r af958194248b src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java Mon Feb 18 18:33:48 2019 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRootFinderListener.java Mon Feb 18 18:46:23 2019 +0900 @@ -1,18 +1,24 @@ package jp.ac.u_ryukyu.treevnc; import com.glavsoft.rfb.protocol.ProtocolContext.TreeCommand; +import com.glavsoft.rfb.protocol.ReceiverTask; +import com.glavsoft.transport.Reader; import com.glavsoft.viewer.ViewerInterface; import com.glavsoft.viewer.swing.ConnectionParams; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.*; +import static com.glavsoft.rfb.protocol.ReceiverTask.FRAMEBUFFER_UPDATE; + public class TreeRootFinderListener implements Runnable { public static final String Ipv4McastAddr = "224.0.0.1"; public static final String Ipv6McastAddr = "ff02::1"; public static String McastAddr = Ipv4McastAddr; static final int BufSize = 1024; + private ReceiverTask receiverTask; private boolean stopFlag = false; private ViewerInterface vps; private MulticastSocket soc; @@ -22,6 +28,11 @@ vps = vncProxyService; } + public TreeRootFinderListener(ViewerInterface vncProxyService, ReceiverTask receiverTask) { + vps = vncProxyService; + this.receiverTask = receiverTask; + } + public static MulticastSocket createMulticastSocket() throws IOException { MulticastSocket soc = new MulticastSocket(ConnectionParams.DEFAULT_VNC_ROOT_FINDER); try { @@ -53,20 +64,22 @@ String hostname = recvPacket.getAddress().getHostAddress(); byte[] reply = recvPacket.getData(); int len = recvPacket.getLength(); - if (len != 12) { - continue; - } - if ((reply[0]&0xff) != TreeCommand.FIND_ROOT.cmd) { - continue; + if (len == 12 && (reply[0] & 0xff) == TreeCommand.FIND_ROOT.cmd) { + int port = reply[8]; + port = port * 256 + reply[9]; + port = port * 256 + reply[10]; + port = port * 256 + reply[11]; + + TreeVncProtocol t = new TreeVncProtocol(hostname, port); + t.findRootReply(vps.getRfb().getAcceptPort()); + } else { + if (receiverTask != null) { + receiverTask.setReader(new Reader(new ByteArrayInputStream(reply))); + if (receiverTask.getMessageId() == FRAMEBUFFER_UPDATE) { + receiverTask.framebufferUpdateMessage(); + } + } } - int port = reply[8]; - port = port * 256 + reply[9]; - port = port * 256 + reply[10]; - port = port * 256 + reply[11]; - - TreeVncProtocol t = new TreeVncProtocol(hostname, port); - t.findRootReply(vps.getRfb().getAcceptPort()); - if(stopFlag) break; } } catch (Exception e) { System.out.println("tree-root-find-listener :" + e.getMessage());