annotate src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java @ 213:a8ae952191b8

netmask done
author kono
date Wed, 02 Jul 2014 21:21:20 +0900
parents 2132018b8c68
children 606953a43198
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
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 private HashMap<String, TreeManagement> interfaces = new HashMap<String, TreeManagement>();
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
17 private TreeRFBProto myRfb;
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
18 public TreeRFBProto getMyRfb() {
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 return myRfb;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
22 public void setMyRfb(TreeRFBProto myRfb) {
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 this.myRfb = myRfb;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 }
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 public void getNetworkInterfaces() throws SocketException {
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
27 for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
28 NetworkInterface ni = e.nextElement();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
29 if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
30 for (InterfaceAddress ipaddress : ni.getInterfaceAddresses()) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
31 byte [] netmask = getNetMask(ipaddress);
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
32 String hostName = ipaddress.getAddress().getHostName();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
33 TreeManagement treeManager = new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree());
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
34 treeManager.getList().getFirst().setPort(myRfb.getAcceptPort());
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
35 byte[] netaddr = ipaddress.getAddress().getAddress();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
36 for(int i=0;i<netaddr.length;i++) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
37 netaddr[i] &= netmask[i];
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
38 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
39 treeManager.setNetMask(netmask,netaddr);
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
40 addNetworkInterface(ni, treeManager);
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
41 System.out.println("Interfaces :" + ni.getName());
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
42 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
43 }
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
47 private byte[] getNetMask(InterfaceAddress ipaddress) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
48 short prefix = ipaddress.getNetworkPrefixLength();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
49 byte[] netmask = ipaddress.getAddress().getAddress();
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
50 for(int i = 0; i < netmask.length; i++) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
51 int bitpos = i * 8;
213
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
52 if (bitpos+7 < prefix) {
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
53 netmask[i] = (byte)0xff;
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
54 } else if (bitpos < prefix) {
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
55 // ex. bitpos = 0, prefix = 2
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
56 // bitpos+8-prefix
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
57 // 1100 0000
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
58 int bytemask = 0x80;
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
59 for(int j = 1; j < bitpos+8-prefix; j++) {
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
60 bytemask >>= 1;
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
61 bytemask |= 0x80;
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
62 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
63 netmask[i] = (byte)bytemask;
213
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
64 } else {
a8ae952191b8 netmask done
kono
parents: 210
diff changeset
65 netmask[i] = 0;
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
66 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
67 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
68 return netmask ;
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
69 }
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
70
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
71 NetworkInterface getInterface(Socket vncSocket) {
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 InetAddress address = vncSocket.getInetAddress();
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 try {
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 return NetworkInterface.getByInetAddress(address);
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 } catch (SocketException e) {
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 return null;
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 }
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 private void addNetworkInterface(NetworkInterface ni, TreeManagement treeManager) {
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
81 setTreeManager(ni.getName(), treeManager);
205
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
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
84 public void setTreeManager(String intf, TreeManagement treeManager) {
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
85 interfaces.put(intf, treeManager);
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
86 }
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
87
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
88 public TreeManagement getTreeManager(String intf) {
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
89 return interfaces.get(intf);
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
90 }
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
91
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
92
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 207
diff changeset
93
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 }