# HG changeset patch # User oc # Date 1404294749 -32400 # Node ID f1d7cb4a1868bab24ce4d674d992fae20d306985 # Parent b31903e5b02d7ec2cafbf9c6e77e374cb3540173 compute netmask and netaddress diff -r b31903e5b02d -r f1d7cb4a1868 src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java Wed Jul 02 18:14:20 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java Wed Jul 02 18:52:29 2014 +0900 @@ -2,6 +2,7 @@ import java.io.IOException; +import java.net.InetAddress; import java.util.LinkedList; public class TreeManagement { @@ -10,6 +11,8 @@ boolean runflag = false; private final int treebranch = 2; private boolean showTreeNode = false; + private byte[] netmask; + private byte[] netaddress; public TreeManagement(String hostName, int vncport, boolean showTree) { TreeVNCNode me = new TreeVNCNode(hostName, vncport,"localhost"); @@ -193,4 +196,18 @@ return treebranch; } + public void setNetMask(byte[] netmask,byte[] netaddress) { + this.netmask = netmask; + this.netaddress = netaddress; + } + + public boolean onTheSameNetwork(InetAddress adr ) { + byte [] byteadr = adr.getAddress(); + if (byteadr.length != netmask.length) return false; + for(int i=0; i < netmask.length; i++) { + if ((netmask[i] & byteadr[i])!=netaddress[i]) return false; + } + return true; + } + } \ No newline at end of file diff -r b31903e5b02d -r f1d7cb4a1868 src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java Wed Jul 02 18:14:20 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java Wed Jul 02 18:52:29 2014 +0900 @@ -1,6 +1,7 @@ package jp.ac.u_ryukyu.treevnc; import java.net.InetAddress; +import java.net.InterfaceAddress; import java.net.NetworkInterface; import java.net.Socket; import java.net.SocketException; @@ -23,20 +24,49 @@ } public void getNetworkInterfaces() throws SocketException { - for (Enumeration e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) { - NetworkInterface ni; - ni = e.nextElement(); - if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) { - String hostName = ni.getInetAddresses().nextElement().getHostAddress(); - TreeManagement treeManager = new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree()); - treeManager.getList().getFirst().setPort(myRfb.getAcceptPort()); - addNetworkInterface(ni, treeManager); - System.out.println("Interfaces :" + ni.getName()); - } + for (Enumeration e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) { + NetworkInterface ni = e.nextElement(); + if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) { + for (InterfaceAddress ipaddress : ni.getInterfaceAddresses()) { + byte [] netmask = getNetMask(ipaddress); + String hostName = ipaddress.getAddress().getHostName(); + TreeManagement treeManager = new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree()); + treeManager.getList().getFirst().setPort(myRfb.getAcceptPort()); + byte[] netaddr = ipaddress.getAddress().getAddress(); + for(int i=0;i prefix) { + netmask[i] = 0; + } else if (bitpos+8 > prefix) { + // ex. bitpos = 0, prefix = 2 + // bitpos+8-prefix + // 1100 0000 + int bytemask = 0x80; + for(int j = 1; j < bitpos+8-prefix; j++) { + bytemask >>= 1; + bytemask |= 0x80; + } + netmask[i] = (byte)bytemask; + } + } + return netmask ; + } + + NetworkInterface getInterface(Socket vncSocket) { InetAddress address = vncSocket.getInetAddress(); try { return NetworkInterface.getByInetAddress(address); @@ -57,4 +87,6 @@ return interfaces.get(intf); } + + }