Mercurial > hg > Members > riono > TreeVNC_ja_comment
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 |
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 |
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 | 17 private TreeRFBProto myRfb; |
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 | 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 | 27 for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) { |
28 NetworkInterface ni = e.nextElement(); | |
29 if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) { | |
30 for (InterfaceAddress ipaddress : ni.getInterfaceAddresses()) { | |
31 byte [] netmask = getNetMask(ipaddress); | |
32 String hostName = ipaddress.getAddress().getHostName(); | |
33 TreeManagement treeManager = new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree()); | |
34 treeManager.getList().getFirst().setPort(myRfb.getAcceptPort()); | |
35 byte[] netaddr = ipaddress.getAddress().getAddress(); | |
36 for(int i=0;i<netaddr.length;i++) { | |
37 netaddr[i] &= netmask[i]; | |
38 } | |
39 treeManager.setNetMask(netmask,netaddr); | |
40 addNetworkInterface(ni, treeManager); | |
41 System.out.println("Interfaces :" + ni.getName()); | |
42 } | |
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 | 47 private byte[] getNetMask(InterfaceAddress ipaddress) { |
48 short prefix = ipaddress.getNetworkPrefixLength(); | |
49 byte[] netmask = ipaddress.getAddress().getAddress(); | |
50 for(int i = 0; i < netmask.length; i++) { | |
51 int bitpos = i * 8; | |
213 | 52 if (bitpos+7 < prefix) { |
53 netmask[i] = (byte)0xff; | |
54 } else if (bitpos < prefix) { | |
208 | 55 // ex. bitpos = 0, prefix = 2 |
56 // bitpos+8-prefix | |
57 // 1100 0000 | |
58 int bytemask = 0x80; | |
59 for(int j = 1; j < bitpos+8-prefix; j++) { | |
60 bytemask >>= 1; | |
61 bytemask |= 0x80; | |
62 } | |
63 netmask[i] = (byte)bytemask; | |
213 | 64 } else { |
65 netmask[i] = 0; | |
208 | 66 } |
67 } | |
68 return netmask ; | |
69 } | |
70 | |
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 | 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 | 84 public void setTreeManager(String intf, TreeManagement treeManager) { |
85 interfaces.put(intf, treeManager); | |
86 } | |
87 | |
88 public TreeManagement getTreeManager(String intf) { | |
89 return interfaces.get(intf); | |
90 } | |
91 | |
208 | 92 |
93 | |
205
614db20d8fab
try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 } |