Mercurial > hg > Members > riono > TreeVNC_ja_comment
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 |
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 | 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 | 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 | 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 | 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 | 28 int treeId = 0; |
208 | 29 for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) { |
30 NetworkInterface ni = e.nextElement(); | |
31 if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) { | |
463 | 32 TreeManagement treeManager = new TreeManagement(ni.getDisplayName(), ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree(),treeId++); |
33 addNetworkInterface(ni, treeManager); // it looks like only last address is used | |
34 for (InterfaceAddress ipaddress : ni.getInterfaceAddresses()) { | |
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 | 40 treeManager.getList().getFirst().setPort(myRfb.getAcceptPort()); |
208 | 41 byte[] netaddr = ipaddress.getAddress().getAddress(); |
42 for(int i=0;i<netaddr.length;i++) { | |
43 netaddr[i] &= netmask[i]; | |
44 } | |
463 | 45 treeManager.setNetMask(netmask,netaddr,ipaddress.getAddress()); |
46 System.out.println("Interfaces :" + ni.getName() + " treeId=" + treeId + " " + hostName); | |
208 | 47 } |
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 | 52 private byte[] getNetMask(InterfaceAddress ipaddress) { |
53 short prefix = ipaddress.getNetworkPrefixLength(); | |
54 byte[] netmask = ipaddress.getAddress().getAddress(); | |
55 for(int i = 0; i < netmask.length; i++) { | |
56 int bitpos = i * 8; | |
213 | 57 if (bitpos+7 < prefix) { |
58 netmask[i] = (byte)0xff; | |
59 } else if (bitpos < prefix) { | |
208 | 60 // ex. bitpos = 0, prefix = 2 |
61 // bitpos+8-prefix | |
62 // 1100 0000 | |
63 int bytemask = 0x80; | |
64 for(int j = 1; j < bitpos+8-prefix; j++) { | |
65 bytemask >>= 1; | |
66 bytemask |= 0x80; | |
67 } | |
68 netmask[i] = (byte)bytemask; | |
213 | 69 } else { |
70 netmask[i] = 0; | |
208 | 71 } |
72 } | |
73 return netmask ; | |
74 } | |
75 | |
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 | 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 | 89 public void setTreeManager(String intf, TreeManagement treeManager) { |
90 interfaces.put(intf, treeManager); | |
91 } | |
92 | |
93 public TreeManagement getTreeManager(String intf) { | |
94 return interfaces.get(intf); | |
95 } | |
96 | |
208 | 97 |
205
614db20d8fab
try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 } |