annotate src/main/java/jp/ac/u_ryukyu/treevnc/server/GetBroadCastProxy.java @ 83:40d400a7ec84

remove warnings
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 30 Apr 2014 18:07:20 +0900
parents cc72fdbb7c72
children 775ce6a14f89
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
12c3a73be47f rename package
one
parents: 11
diff changeset
1 package jp.ac.u_ryukyu.treevnc.server;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import java.io.IOException;
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
4 import java.io.PrintStream;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 import java.net.DatagramPacket;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 import java.net.InetAddress;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 import java.net.MulticastSocket;
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
8 import java.net.Socket;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 import java.net.SocketAddress;
13
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
10 import java.net.UnknownHostException;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
12 import com.glavsoft.viewer.swing.ConnectionParams;
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
13
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 //import TextBoxProxy;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 public class GetBroadCastProxy implements Runnable {
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
17 public static final String McastAddr = "224.0.0.1";
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 static final int BufSize = 1024;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 private boolean stopFlag = false;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 private VncProxyService vps;
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
21 public static String MULTICAST_FIND_TREEVNC_ROOT = "TREEVNC-who:";
69
21108e863b8a update client list.
one
parents: 68
diff changeset
22 private MulticastSocket soc;
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
23 private String bCast;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
13
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
25 public GetBroadCastProxy(VncProxyService _vps,String desktopName,String host){
80
2951dd85e9fc connect to real connection address instead of bad getLocalAddress().
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
26 String myaddress = getMyAddress();
2951dd85e9fc connect to real connection address instead of bad getLocalAddress().
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
27 // getMyAddress is not always connectable eg. in private segment.
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 vps = _vps;
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
29 bCast = vps.getRfb().getAcceptPort()+":"+host+":"
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
30 +desktopName+":"+myaddress+":";
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
33 /**
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
34 * To find TreeVNC root, a client sends me a multicast, reply our address to him.
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
35 * It contains a port to receive, so multiple TREEVNC clients can run on a PC.
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
36 */
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
37 private void replyToRootSearchMulticast() {
55
9fdb8ff88497 change parameter.
one
parents: 38
diff changeset
38 byte[] buf = new byte[BufSize];
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 try {
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 InetAddress mAddr = InetAddress.getByName(McastAddr);
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
41 soc = new MulticastSocket(ConnectionParams.DEFAULT_VNC_ROOT_FINDER);
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 DatagramPacket recvPacket = new DatagramPacket(buf, BufSize);
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 soc.joinGroup(mAddr);
55
9fdb8ff88497 change parameter.
one
parents: 38
diff changeset
44 while (!stopFlag) {
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 soc.receive(recvPacket);
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
46 String address = getAddress(recvPacket.getSocketAddress());
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
47 byte[] reply = recvPacket.getData();
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
48 int len = recvPacket.getLength();
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
49 int i = 0;
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
50 for(byte b : MULTICAST_FIND_TREEVNC_ROOT.getBytes()) {
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
51 if (b != reply[i]) return;
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
52 i++;
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
53 if (i>len) return;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 }
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
55 int port = parse_code(reply,i,len);
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
56 replyToClient(address,port,bCast);
38
c2f0b6907448 add doc directory
one
parents: 13
diff changeset
57 if(stopFlag) break;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 }
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
59 } catch (Exception e) {
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
60
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
64 public int parse_code( byte[] bs,int offset,int len )
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
65 {
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
66 int intval = 0;
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
67 for( int i = offset; i < len ; i++ ) {
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
68 if (bs[i]==0 ) return intval;
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
69 intval = intval * 10 + ( bs[ i ] - '0' );
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
70 }
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
71 return intval;
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
72 }
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
73
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
74
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
75 /**
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
76 * To find me (TreeVNC root) ,a client send a broadcast with port number.
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
77 * Send the parameter to connect to him.
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
78 * The client's GetDataClient will receive this message.
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
79 *
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
80 * @param addr
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
81 * @param port
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
82 * @param str
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
83 */
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
84 private void replyToClient(String addr, int port_,String str_) {
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
85 final String address = addr;
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
86 final int port = port_;
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
87 final String str = str_;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 Runnable sender = new Runnable() {
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 public void run() {
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
90
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
91 try {
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
92 Thread.sleep(1000);
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
93 Socket socket = new Socket(address, port); // This is a TCP stream to reply
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
94 PrintStream os = new PrintStream(socket.getOutputStream());
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
95 os.println(str);
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
96 os.print(Integer.toString(port));
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
97 os.close();
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
98 socket.close();
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
99 } catch (IOException e) {
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
100 System.out.println("Connection faild");
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
101 } catch (InterruptedException e) {
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
102 System.out.println("Connection faild");
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
103 }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 };
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 new Thread(sender).start();
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 private String getAddress(SocketAddress addr) {
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 String str = addr.toString();
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 str = str.substring(1,str.indexOf(":"));
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 return str;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 }
55
9fdb8ff88497 change parameter.
one
parents: 38
diff changeset
114
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 public void run() {
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
116 replyToRootSearchMulticast();
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 public void setStopFlag(boolean stopFlag) {
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 this.stopFlag = stopFlag;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 public boolean isStopFlag() {
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 return stopFlag;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 }
13
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
126
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
127 /**
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
128 * getLocalHost() returns hostname's address. It may not connectable, but
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
129 * it gives readable hostname. Do not use it to connect.
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
130 * @return
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
131 */
13
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
132 String getMyAddress () {
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
133 InetAddress addr = null;
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
134 try {
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
135 addr = InetAddress.getLocalHost();
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
136 } catch (UnknownHostException e) {
80
2951dd85e9fc connect to real connection address instead of bad getLocalAddress().
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
137 return "localhost";
13
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
138 }
80
2951dd85e9fc connect to real connection address instead of bad getLocalAddress().
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
139 return addr.getHostAddress();
13
406fa09ae645 modify VncProxyService.java
one
parents: 12
diff changeset
140 }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 }