annotate src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java @ 470:f7210f834403

add unique node id
author mir3636
date Wed, 03 Aug 2016 19:09:11 +0900
parents 5bef0f09f088
children 141f627665ab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 package jp.ac.u_ryukyu.treevnc;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import java.net.InetAddress;
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
4 import java.net.InterfaceAddress;
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 import java.net.NetworkInterface;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 import java.net.Socket;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 import java.net.SocketException;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 import java.util.Enumeration;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 import java.util.HashMap;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 import com.glavsoft.viewer.swing.ConnectionParams;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 public class TreeVNCNetwork {
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 private HashMap<String, TreeManagement> interfaces = new HashMap<String, TreeManagement>();
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
16 private TreeRFBProto myRfb;
390
dc168770dbe3 Add flag useHostName is call getHostName() method
innparusu
parents: 259
diff changeset
17 private boolean useHostName = false;
dc168770dbe3 Add flag useHostName is call getHostName() method
innparusu
parents: 259
diff changeset
18
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
19 public TreeRFBProto getMyRfb() {
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 return myRfb;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
23 public void setMyRfb(TreeRFBProto myRfb) {
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 this.myRfb = myRfb;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 public void getNetworkInterfaces() throws SocketException {
462
b5459c7c8e4d only one treeManager in a network interface
kono
parents: 390
diff changeset
28 int treeId = 0;
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
29 for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
30 NetworkInterface ni = e.nextElement();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
31 if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) {
463
5bef0f09f088 create NetworkAddress class
mir3636
parents: 462
diff changeset
32 TreeManagement treeManager = new TreeManagement(ni.getDisplayName(), ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree(),treeId++);
5bef0f09f088 create NetworkAddress class
mir3636
parents: 462
diff changeset
33 addNetworkInterface(ni, treeManager); // it looks like only last address is used
5bef0f09f088 create NetworkAddress class
mir3636
parents: 462
diff changeset
34 for (InterfaceAddress ipaddress : ni.getInterfaceAddresses()) {
5bef0f09f088 create NetworkAddress class
mir3636
parents: 462
diff changeset
35 byte [] netmask = getNetMask(ipaddress);
390
dc168770dbe3 Add flag useHostName is call getHostName() method
innparusu
parents: 259
diff changeset
36 String hostName = ipaddress.getAddress().toString();
dc168770dbe3 Add flag useHostName is call getHostName() method
innparusu
parents: 259
diff changeset
37 if (useHostName) {
dc168770dbe3 Add flag useHostName is call getHostName() method
innparusu
parents: 259
diff changeset
38 hostName = ipaddress.getAddress().getHostName();
dc168770dbe3 Add flag useHostName is call getHostName() method
innparusu
parents: 259
diff changeset
39 }
463
5bef0f09f088 create NetworkAddress class
mir3636
parents: 462
diff changeset
40 treeManager.getList().getFirst().setPort(myRfb.getAcceptPort());
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
41 byte[] netaddr = ipaddress.getAddress().getAddress();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
42 for(int i=0;i<netaddr.length;i++) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
43 netaddr[i] &= netmask[i];
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
44 }
463
5bef0f09f088 create NetworkAddress class
mir3636
parents: 462
diff changeset
45 treeManager.setNetMask(netmask,netaddr,ipaddress.getAddress());
5bef0f09f088 create NetworkAddress class
mir3636
parents: 462
diff changeset
46 System.out.println("Interfaces :" + ni.getName() + " treeId=" + treeId + " " + hostName);
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
47 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
48 }
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
52 private byte[] getNetMask(InterfaceAddress ipaddress) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
53 short prefix = ipaddress.getNetworkPrefixLength();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
54 byte[] netmask = ipaddress.getAddress().getAddress();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
55 for(int i = 0; i < netmask.length; i++) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
56 int bitpos = i * 8;
213
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
57 if (bitpos+7 < prefix) {
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
58 netmask[i] = (byte)0xff;
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
59 } else if (bitpos < prefix) {
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
60 // ex. bitpos = 0, prefix = 2
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
61 // bitpos+8-prefix
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
62 // 1100 0000
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
63 int bytemask = 0x80;
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
64 for(int j = 1; j < bitpos+8-prefix; j++) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
65 bytemask >>= 1;
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
66 bytemask |= 0x80;
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
67 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
68 netmask[i] = (byte)bytemask;
213
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
69 } else {
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
70 netmask[i] = 0;
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
71 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
72 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
73 return netmask ;
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
74 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
75
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
76 NetworkInterface getInterface(Socket vncSocket) {
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 InetAddress address = vncSocket.getInetAddress();
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 try {
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 return NetworkInterface.getByInetAddress(address);
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 } catch (SocketException e) {
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 return null;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 private void addNetworkInterface(NetworkInterface ni, TreeManagement treeManager) {
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
86 setTreeManager(ni.getName(), treeManager);
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
89 public void setTreeManager(String intf, TreeManagement treeManager) {
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
90 interfaces.put(intf, treeManager);
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
91 }
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
92
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
93 public TreeManagement getTreeManager(String intf) {
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
94 return interfaces.get(intf);
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
95 }
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
96
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
97
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 }