annotate src/myVncProxy/MyRfbProto.java @ 184:134deb9f8148

update
author one
date Mon, 07 Nov 2011 12:41:16 +0900
parents f0dc6e6e85dc
children 00e031baf065
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24
87b29d6039a6 add package myVncProxy
e085711
parents: 23
diff changeset
1 package myVncProxy;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
2
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
3 import static org.junit.Assert.*;
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
4
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
5 import java.awt.Graphics;
cded9fd297ab create png data
e085711
parents: 24
diff changeset
6 import java.awt.Image;
cded9fd297ab create png data
e085711
parents: 24
diff changeset
7 import java.awt.image.BufferedImage;
cded9fd297ab create png data
e085711
parents: 24
diff changeset
8 import java.io.BufferedOutputStream;
15
89e1c5f84407 faile ZRLE encode. success raw encode.
e085711
parents: 13
diff changeset
9 import java.io.BufferedReader;
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
10 import java.io.ByteArrayInputStream;
cded9fd297ab create png data
e085711
parents: 24
diff changeset
11 import java.io.ByteArrayOutputStream;
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
12 import java.io.IOException;
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
13 import java.io.InputStream;
15
89e1c5f84407 faile ZRLE encode. success raw encode.
e085711
parents: 13
diff changeset
14 import java.io.InputStreamReader;
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
15 import java.net.BindException;
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
16 import java.net.ServerSocket;
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
17 import java.net.Socket;
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
18 import java.nio.ByteBuffer;
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
19 import java.util.Iterator;
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
20 import java.util.LinkedList;
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
21
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
22 import javax.imageio.ImageIO;
cded9fd297ab create png data
e085711
parents: 24
diff changeset
23
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
24 import org.junit.Test;
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
25
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
26 import myVncProxy.MulticastQueue.Client;
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
27
40
dd1321b67f95 sendReadData : newSingleThreadExecutor()
e085711
parents: 39
diff changeset
28 import java.util.concurrent.ExecutorService;
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
29 import java.util.concurrent.atomic.AtomicInteger;
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
30 import java.util.zip.DataFormatException;
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
31 import java.util.zip.Deflater;
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
32 import java.util.zip.Inflater;
40
dd1321b67f95 sendReadData : newSingleThreadExecutor()
e085711
parents: 39
diff changeset
33 import java.io.OutputStream;
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
34
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
35 public
107
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
36 class MyRfbProto extends RfbProto {
154
6606b71b64a6 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 153
diff changeset
37 final static String versionMsg_3_855 = "RFB 003.855\n";
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
38 /**
154
6606b71b64a6 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 153
diff changeset
39 * CheckMillis is one of new msgType for RFB 3.855.
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
40 */
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
41 final static byte SpeedCheckMillis = 4;
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
42
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
43 // Secyrity type of OS X
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
44 final static int SecTypeReqAccess = 32;
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
45
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
46 // Supported authentication types
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
47 final static int AuthAccess = 32;
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
48
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
49
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
50
83
d4236fd2efe1 too much memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 82
diff changeset
51 private static final int INFLATE_BUFSIZE = 1024*100;
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
52 boolean printStatusFlag = false;
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
53 long startCheckTime;
18
ccad9909e0e2 raw only version
e085711
parents: 17
diff changeset
54 private int messageType;
ccad9909e0e2 raw only version
e085711
parents: 17
diff changeset
55 private int rectangles;
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
56 private int rectX;
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
57 private int rectY;
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
58 private int rectW;
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
59 private int rectH;
18
ccad9909e0e2 raw only version
e085711
parents: 17
diff changeset
60 private int encoding;
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
61 private int zLen;
104
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
62 private boolean clicomp = false;
18
ccad9909e0e2 raw only version
e085711
parents: 17
diff changeset
63
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
64 private ServerSocket servSock;
144
c1d7d4fbcfb9 modify Xml-Rpc.java
e085711
parents: 141
diff changeset
65 protected int acceptPort;
184
one
parents: 181
diff changeset
66 //private byte initData[];
one
parents: 181
diff changeset
67 byte initData[];
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
68 private LinkedList<Socket> cliListTmp;
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
69 private LinkedList<Socket> cliList;
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
70 boolean createBimgFlag;
155
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
71 boolean proxyFlag = true;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
72
40
dd1321b67f95 sendReadData : newSingleThreadExecutor()
e085711
parents: 39
diff changeset
73 ExecutorService executor;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
74
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
75 byte[] pngBytes;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
76
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
77 // private MulticastQueue<LinkedList<ByteBuffer>> multicastqueue = new MostRecentMultiCast<LinkedList<ByteBuffer>>(10);
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
78 private MulticastQueue<LinkedList<ByteBuffer>> multicastqueue = new MulticastQueue<LinkedList<ByteBuffer>>();
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
79 private int clients = 0;
81
9109273b96dc consume too much memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
80 private Inflater inflater = new Inflater();
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
81 private Deflater deflater = new Deflater();
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
82 private CreateThread geth;
162
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
83 // private Thread requestThread;
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
84 private RequestScreenThread rThread;
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
85 private Thread requestThread;
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
86
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
87 public
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
88 MyRfbProto() throws IOException {
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
89 }
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
90
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
91 MyRfbProto(String h, int p, VncViewer v) throws IOException {
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
92 super(h, p, v);
162
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
93
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
94 rThread = new RequestScreenThread(this);
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
95 requestThread = new Thread(rThread);
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
96 // requestThread = new Thread(new RequestScreenThread(this));
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
97 }
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
98
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
99 MyRfbProto(String h, int p, CreateThread geth) throws IOException {
128
fa2122e5c807 modify ProxyVncCanva
e085711
parents: 127
diff changeset
100 super(h, p);
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
101 this.geth = geth;
155
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
102 proxyFlag = true;
162
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
103
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
104 rThread = new RequestScreenThread(this);
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
105 requestThread = new Thread(rThread);
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
106 // requestThread = new Thread(new RequestScreenThread(this));
128
fa2122e5c807 modify ProxyVncCanva
e085711
parents: 127
diff changeset
107 }
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
108
13
a5d73cafc8fe add ProxyVncCanvas and VncProxyService
e085711
parents: 10
diff changeset
109 MyRfbProto(String h, int p) throws IOException {
a5d73cafc8fe add ProxyVncCanvas and VncProxyService
e085711
parents: 10
diff changeset
110 super(h, p);
162
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
111
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
112 rThread = new RequestScreenThread(this);
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
113 requestThread = new Thread(rThread);
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
114 // requestThread = new Thread(new RequestScreenThread(this));
13
a5d73cafc8fe add ProxyVncCanvas and VncProxyService
e085711
parents: 10
diff changeset
115 }
162
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
116
44
e085711
parents: 43
diff changeset
117 // over write
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
118 void writeVersionMsg() throws IOException {
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
119 clientMajor = 3;
154
6606b71b64a6 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 153
diff changeset
120 if (serverMinor == 855) {
6606b71b64a6 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 153
diff changeset
121 clientMinor = 855;
6606b71b64a6 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 153
diff changeset
122 os.write(versionMsg_3_855.getBytes());
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
123 } else if (serverMajor > 3 || serverMinor >= 8) {
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
124 clientMinor = 8;
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
125 os.write(versionMsg_3_8.getBytes());
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
126 } else if (serverMinor >= 7) {
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
127 clientMinor = 7;
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
128 os.write(versionMsg_3_7.getBytes());
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
129 } else {
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
130 clientMinor = 3;
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
131 os.write(versionMsg_3_3.getBytes());
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
132 }
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
133 protocolTightVNC = false;
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
134 initCapabilities();
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
135 }
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
136
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
137 void initServSock(int port) throws IOException {
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
138 servSock = new ServerSocket(port);
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
139 acceptPort = port;
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
140 }
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
141
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
142 void authenticationRequestAccess() throws IOException {
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
143
181
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
144 byte[] headBuf = new byte[2];
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
145 is.read(headBuf);
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
146 if(headBuf[1] == 2) {
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
147 byte[] b = new byte[258];
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
148 is.read(b);
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
149
181
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
150 byte[] outBuf = new byte[256];
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
151 os.write(outBuf);
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
152 os.flush();
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
153 }else if(headBuf[1] == 23) {
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
154 byte[] b = new byte[130];
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
155 is.read(b);
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
156 byte[] outBuf = new byte[192];
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
157 os.write(outBuf);
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
158 os.flush();
f0dc6e6e85dc modify MyRfbProto.java : method authneticationRequestAccess()
e085711
parents: 180
diff changeset
159 }
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
160
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
161 int result = readU32();
180
da276538c1d5 modify VncProxyService.java
e085711
parents: 176
diff changeset
162 if(result != 0) {
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
163 System.out.println("faild authentication ");
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
164 throw new IOException();
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
165 }
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
167
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
168
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
169
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
170 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
171
153
4fca6f516880 modify MyRfbProto.newCli
e085711
parents: 151
diff changeset
172 /*
4fca6f516880 modify MyRfbProto.newCli
e085711
parents: 151
diff changeset
173 * default port number is 5999.
4fca6f516880 modify MyRfbProto.newCli
e085711
parents: 151
diff changeset
174 */
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
175 void selectPort(int p) {
144
c1d7d4fbcfb9 modify Xml-Rpc.java
e085711
parents: 141
diff changeset
176 if(servSock != null ) return ;
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
177 int port = p;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
178 while (true) {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
179 try {
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
180 initServSock(port);
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
181 break;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
182 } catch (BindException e) {
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
183 port++;
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
184 continue;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
185 } catch (IOException e) {
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
186
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
187 }
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
188 }
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
189 System.out.println("accept port = " + port);
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
190 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
191
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
192 int getAcceptPort() {
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
193 return acceptPort;
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
194 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
195
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
196 void setSoTimeout(int num) throws IOException {
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
197 servSock.setSoTimeout(num);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
198 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
199
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
200 Socket accept() throws IOException {
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
201 return servSock.accept();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
202 }
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
203
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
204 void addSock(Socket sock) {
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
205 cliList.add(sock);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
206 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
207
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
208 void addSockTmp(Socket sock) {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
209 System.out.println("connected " + sock.getInetAddress());
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
210 cliListTmp.add(sock);
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
211 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
212
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
213 boolean markSupported() {
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
214 return is.markSupported();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
215 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
216
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
217 void readServerInit() throws IOException {
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
218
78
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
219 is.mark(255);
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
220 skipBytes(20);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
221 int nlen = readU32();
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
222 int blen = 20 + 4 + nlen;
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
223 initData = new byte[blen];
78
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
224 is.reset();
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
225
78
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
226 is.mark(blen);
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
227 readFully(initData);
78
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
228 is.reset();
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
229
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
230 framebufferWidth = readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
231 framebufferHeight = readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
232 bitsPerPixel = readU8();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
233 depth = readU8();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
234 bigEndian = (readU8() != 0);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
235 trueColour = (readU8() != 0);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
236 redMax = readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
237 greenMax = readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
238 blueMax = readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
239 redShift = readU8();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
240 greenShift = readU8();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
241 blueShift = readU8();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
242 byte[] pad = new byte[3];
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
243 readFully(pad);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
244 int nameLength = readU32();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
245 byte[] name = new byte[nameLength];
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
246 readFully(name);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
247 desktopName = new String(name);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
248
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
249 // Read interaction capabilities (TightVNC protocol extensions)
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
250 if (protocolTightVNC) {
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
251 int nServerMessageTypes = readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
252 int nClientMessageTypes = readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
253 int nEncodingTypes = readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
254 readU16();
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
255 readCapabilityList(serverMsgCaps, nServerMessageTypes);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
256 readCapabilityList(clientMsgCaps, nClientMessageTypes);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
257 readCapabilityList(encodingCaps, nEncodingTypes);
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
258 }
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
259
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
260 inNormalProtocol = true;
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
261 }
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
262
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
263 void sendRfbVersion(OutputStream os) throws IOException {
138
001f0b770f96 modify MyRfbProto
e085711
parents: 137
diff changeset
264 // os.write(versionMsg_3_8.getBytes());
154
6606b71b64a6 modify RFB Protocol Version. From 3.998 to 3.855
e085711
parents: 153
diff changeset
265 os.write(versionMsg_3_855.getBytes());
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
266 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
267
155
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
268 int readVersionMsg(InputStream is, OutputStream os) throws IOException {
45
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
269
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
270 byte[] b = new byte[12];
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
271
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
272 is.read(b);
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
273
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
274 if ((b[0] != 'R') || (b[1] != 'F') || (b[2] != 'B') || (b[3] != ' ')
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
275 || (b[4] < '0') || (b[4] > '9') || (b[5] < '0') || (b[5] > '9')
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
276 || (b[6] < '0') || (b[6] > '9') || (b[7] != '.')
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
277 || (b[8] < '0') || (b[8] > '9') || (b[9] < '0') || (b[9] > '9')
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
278 || (b[10] < '0') || (b[10] > '9') || (b[11] != '\n')) {
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
279 throw new IOException("Host " + host + " port " + port
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
280 + " is not an RFB server");
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
281 }
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
282
155
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
283 int rfbMajor = (b[4] - '0') * 100 + (b[5] - '0') * 10 + (b[6] - '0');
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
284 int rfbMinor = (b[8] - '0') * 100 + (b[9] - '0') * 10 + (b[10] - '0');
45
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
285
155
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
286 if (rfbMajor < 3) {
45
b16072ddc911 modify MyRfbProto.java acceptThread.java
e085711
parents: 44
diff changeset
287 throw new IOException(
141
fc77596d3064 add XMLRPCTest.java
e085711
parents: 138
diff changeset
288 "RFB server does not support protocol version 3");
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
289 }
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
290
155
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
291 if (rfbMinor == 855) {
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
292 sendProxyFlag(os);
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
293 if(proxyFlag)sendPortNumber(os);
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
294 }
155
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
295 return rfbMinor;
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
296 }
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
297 void sendProxyFlag(OutputStream os) throws IOException {
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
298 if(proxyFlag) os.write(1);
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
299 else os.write(0);
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
300 }
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
301
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
302 boolean readProxyFlag() throws IOException{
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
303 int flag = readU8();
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
304 if(flag == 1)
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
305 return true;
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
306 else
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
307 return false;
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
308 }
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
309
131
2a90459a05f0 modify CreateThread
e085711
parents: 130
diff changeset
310 void sendPortNumber(OutputStream os) throws IOException {
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
311 byte[] b = new byte[4];
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
312 b = castIntByte(geth.port);
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
313 os.write(b);
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
314 }
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
315
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
316 void sendSecurityType(OutputStream os) throws IOException {
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
317 // number-of-security-types
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
318 os.write(1);
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
319 // security-types
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
320 // 1:None
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
321 os.write(1);
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
322
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
323 /*
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
324 os.write(4);
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
325 os.write(30);
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
326 os.write(31);
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
327 os.write(32);
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
328 os.write(35);
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
329 os.flush();
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
330 */
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
331 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
332
46
11da7dacbc1a modify MyRfbProto.java and acceptThread.java add readSecType
e085711
parents: 45
diff changeset
333 void readSecType(InputStream is) throws IOException {
11da7dacbc1a modify MyRfbProto.java and acceptThread.java add readSecType
e085711
parents: 45
diff changeset
334 byte[] b = new byte[1];
11da7dacbc1a modify MyRfbProto.java and acceptThread.java add readSecType
e085711
parents: 45
diff changeset
335 is.read(b);
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
336 }
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
337
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
338
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
339 void readSecType(InputStream is, OutputStream os) throws IOException {
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
340 byte[] b = new byte[1];
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
341 is.read(b);
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
342
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
343 int count = 260;
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
344 int[] data = {0, 2, 0, -128, -1, -1, -1, -1, -1, -1, -1, -1, -55, 15, -38, -94, 33, 104, -62, 52, -60, -58, 98, -117, -128, -36, 28, -47, 41, 2, 78, 8, -118, 103, -52, 116, 2, 11, -66, -90, 59, 19, -101, 34, 81, 74, 8, 121, -114, 52, 4, -35, -17, -107, 25, -77, -51, 58, 67, 27, 48, 43, 10, 109, -14, 95, 20, 55, 79, -31, 53, 109, 109, 81, -62, 69, -28, -123, -75, 118, 98, 94, 126, -58, -12, 76, 66, -23, -90, 55, -19, 107, 11, -1, 92, -74, -12, 6, -73, -19, -18, 56, 107, -5, 90, -119, -97, -91, -82, -97, 36, 17, 124, 75, 31, -26, 73, 40, 102, 81, -20, -26, 83, -127, -1, -1, -1, -1, -1, -1, -1, -1, -111, 73, -29, 30, 57, -67, -75, -77, -49, -50, -99, -76, -80, -80, 14, 65, 57, -105, -103, -54, -102, 3, 39, -44, 39, 35, 118, -84, -64, 37, -117, -21, 89, -31, -68, 70, 5, 122, -92, -119, 9, 121, 63, -112, -60, 122, -46, -69, -36, 92, -103, -92, 74, 92, -73, 87, 120, -8, 116, -47, 111, 20, -41, 110, 122, -3, -94, 14, 42, -51, -59, 48, -54, -125, 117, 60, 77, -52, -31, 98, 32, -2, -102, -15, -29, 58, -14, -106, -116, -32, -86, 50, -32, -16, -3, -123, 87, 88, -118, 10, 120, -107, -37, 125, -110, 59, 87, 93, -24, 124, -99, 18, 78, -13, -49, -34, -24, -27, 1, 114, -67, -98, -56, -3, 85, -67, -126, 77};
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
345 for(int i=0; i<count; i++ ) {
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
346 os.write((byte)data[i]);
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
347 os.flush();
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
348 }
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
349
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
350 byte[] c = new byte[256];
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
351 is.read(c);
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
352
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
353 System.out.println(new String(c));
46
11da7dacbc1a modify MyRfbProto.java and acceptThread.java add readSecType
e085711
parents: 45
diff changeset
354
11da7dacbc1a modify MyRfbProto.java and acceptThread.java add readSecType
e085711
parents: 45
diff changeset
355 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
356
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
357
47
b2bf4e44504a modify MyRfbProto.java and acceptThread.java , add sendSecResult
e085711
parents: 46
diff changeset
358 void sendSecResult(OutputStream os) throws IOException {
b2bf4e44504a modify MyRfbProto.java and acceptThread.java , add sendSecResult
e085711
parents: 46
diff changeset
359 byte[] b = castIntByte(0);
b2bf4e44504a modify MyRfbProto.java and acceptThread.java , add sendSecResult
e085711
parents: 46
diff changeset
360 os.write(b);
b2bf4e44504a modify MyRfbProto.java and acceptThread.java , add sendSecResult
e085711
parents: 46
diff changeset
361 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
362
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
363 void readClientInit(InputStream in) throws IOException {
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
364 byte[] b = new byte[0];
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
365 in.read(b);
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
366 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
367
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
368 void sendInitData(OutputStream os) throws IOException {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
369 os.write(initData);
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
370 }
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
371
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
372
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
373 void sendPngImage() {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
374 try {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
375 for (Socket cli : cliListTmp) {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
376 try {
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
377 sendPngData(cli);
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
378 addSock(cli);
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
379 } catch (IOException e) {
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
380 // if socket closed
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
381 cliListTmp.remove(cli);
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
382 }
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
383 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
384 // System.out.println("cliSize="+cliSize());
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
385 } catch (Exception e) {
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
386 }
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
387 cliListTmp.clear();
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
388 }
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
389
15
89e1c5f84407 faile ZRLE encode. success raw encode.
e085711
parents: 13
diff changeset
390 boolean ready() throws IOException {
89e1c5f84407 faile ZRLE encode. success raw encode.
e085711
parents: 13
diff changeset
391 BufferedReader br = new BufferedReader(new InputStreamReader(is));
89e1c5f84407 faile ZRLE encode. success raw encode.
e085711
parents: 13
diff changeset
392 return br.ready();
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
393 }
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
394
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
395 int cliSize() {
10
2840c7a259f1 add acceptThread
e085711
parents:
diff changeset
396 return cliList.size();
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
397 }
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
398
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
399 void printNumBytesRead() {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
400 System.out.println("numBytesRead=" + numBytesRead);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
401 }
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
402
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
403
61
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
404
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
405 void regiFramebufferUpdate() throws IOException {
78
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
406 is.mark(20);
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
407 messageType = readU8(); // 0
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
408 skipBytes(1); // 1
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
409 rectangles = readU16(); // 2
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
410 rectX = readU16(); // 4
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
411 rectY = readU16(); // 6
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
412 rectW = readU16(); // 8
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
413 rectH = readU16(); // 10
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
414 encoding = readU32(); // 12
122
2ff8d5a226c9 modify VncProxyService.java
e085711
parents: 114
diff changeset
415 // System.out.println("encoding = "+encoding);
107
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
416 if (encoding == EncodingZRLE|| encoding==EncodingZRLEE||encoding==EncodingZlib)
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
417 zLen = readU32();
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
418 else
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
419 zLen = 0;
78
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
420 is.reset();
104
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
421
15
89e1c5f84407 faile ZRLE encode. success raw encode.
e085711
parents: 13
diff changeset
422 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
423
61
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
424 int checkAndMark() throws IOException {
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
425 int dataLen;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
426 switch (encoding) {
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
427 case RfbProto.EncodingRaw:
39
f399eec66846 send data:multi thread
e085711
parents: 38
diff changeset
428 dataLen = rectW * rectH * 4 + 16;
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
429 // is.mark(dataLen);
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
430 break;
67
f695bc56eb4f add OptionNoFrame.java. add setEncodings.
e085711
parents: 66
diff changeset
431 case RfbProto.EncodingCopyRect:
f695bc56eb4f add OptionNoFrame.java. add setEncodings.
e085711
parents: 66
diff changeset
432 dataLen = 16 + 4;
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
433 // is.mark(dataLen);
67
f695bc56eb4f add OptionNoFrame.java. add setEncodings.
e085711
parents: 66
diff changeset
434 break;
f695bc56eb4f add OptionNoFrame.java. add setEncodings.
e085711
parents: 66
diff changeset
435 case RfbProto.EncodingRRE:
f695bc56eb4f add OptionNoFrame.java. add setEncodings.
e085711
parents: 66
diff changeset
436 case RfbProto.EncodingCoRRE:
f695bc56eb4f add OptionNoFrame.java. add setEncodings.
e085711
parents: 66
diff changeset
437 case RfbProto.EncodingHextile:
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
438 case RfbProto.EncodingTight:
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
439 dataLen = zLen + 20;
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
440 // is.mark(dataLen);
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
441 break;
67
f695bc56eb4f add OptionNoFrame.java. add setEncodings.
e085711
parents: 66
diff changeset
442 case RfbProto.EncodingZlib:
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
443 case RfbProto.EncodingZRLE:
107
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
444 case RfbProto.EncodingZRLEE:
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
445 dataLen = zLen + 20;
156
e085711
parents: 155
diff changeset
446 // is.mark(dataLen);
78
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
447 break;
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
448 case RfbProto.EncodingXCursor:
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
449 case RfbProto.EncodingRichCursor:
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
450 int pixArray = rectW * rectH * 4;
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
451 int u8Array = (int)Math.floor((rectW + 7)/8) * rectH;
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
452 dataLen = pixArray + u8Array;
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
453 printFramebufferUpdate();
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
454 // is.mark(dataLen);
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
455 break;
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
456 default:
61
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
457 dataLen = 1000000;
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
458 // is.mark(dataLen);
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
459 }
61
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
460 return dataLen;
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
461 }
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
462
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
463
81
9109273b96dc consume too much memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
464 void sendDataToClient() throws Exception {
61
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
465 regiFramebufferUpdate();
153
4fca6f516880 modify MyRfbProto.newCli
e085711
parents: 151
diff changeset
466 // printFramebufferUpdate();
61
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
467 int dataLen = checkAndMark();
626cf8cc002c modify MyRfbProto.java
e085711
parents: 60
diff changeset
468 readSendData(dataLen);
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
469 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
470
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
471 BufferedImage createBufferedImage(Image img) {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
472 BufferedImage bimg = new BufferedImage(img.getWidth(null),
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
473 img.getHeight(null), BufferedImage.TYPE_INT_RGB);
27
13d4d3118cb8 create rfb.cliListTmp
e085711
parents: 26
diff changeset
474
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
475 Graphics g = bimg.getGraphics();
cded9fd297ab create png data
e085711
parents: 24
diff changeset
476 g.drawImage(img, 0, 0, null);
cded9fd297ab create png data
e085711
parents: 24
diff changeset
477 g.dispose();
cded9fd297ab create png data
e085711
parents: 24
diff changeset
478 return bimg;
cded9fd297ab create png data
e085711
parents: 24
diff changeset
479 }
cded9fd297ab create png data
e085711
parents: 24
diff changeset
480
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
481 void createPngBytes(BufferedImage bimg) throws IOException {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
482 pngBytes = getImageBytes(bimg, "png");
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
483 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
484
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
485 byte[] getBytes(BufferedImage img) throws IOException {
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
486 byte[] b = getImageBytes(img, "png");
cded9fd297ab create png data
e085711
parents: 24
diff changeset
487 return b;
cded9fd297ab create png data
e085711
parents: 24
diff changeset
488 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
489
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
490 byte[] getImageBytes(BufferedImage image, String imageFormat)
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
491 throws IOException {
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
492 ByteArrayOutputStream bos = new ByteArrayOutputStream();
cded9fd297ab create png data
e085711
parents: 24
diff changeset
493 BufferedOutputStream os = new BufferedOutputStream(bos);
cded9fd297ab create png data
e085711
parents: 24
diff changeset
494 image.flush();
cded9fd297ab create png data
e085711
parents: 24
diff changeset
495 ImageIO.write(image, imageFormat, os);
cded9fd297ab create png data
e085711
parents: 24
diff changeset
496 os.flush();
cded9fd297ab create png data
e085711
parents: 24
diff changeset
497 os.close();
cded9fd297ab create png data
e085711
parents: 24
diff changeset
498 return bos.toByteArray();
cded9fd297ab create png data
e085711
parents: 24
diff changeset
499 }
cded9fd297ab create png data
e085711
parents: 24
diff changeset
500
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
501 void sendPngData(Socket sock) throws IOException {
26
0aa0e0bd742c succeed drawFirstImage()!!
e085711
parents: 25
diff changeset
502 byte[] dataLength = castIntByte(pngBytes.length);
0aa0e0bd742c succeed drawFirstImage()!!
e085711
parents: 25
diff changeset
503 sock.getOutputStream().write(dataLength);
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
504 sock.getOutputStream().write(pngBytes);
cded9fd297ab create png data
e085711
parents: 24
diff changeset
505 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
506
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
507 byte[] castIntByte(int len) {
26
0aa0e0bd742c succeed drawFirstImage()!!
e085711
parents: 25
diff changeset
508 byte[] b = new byte[4];
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
509 b[0] = (byte) ((len >>> 24) & 0xFF);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
510 b[1] = (byte) ((len >>> 16) & 0xFF);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
511 b[2] = (byte) ((len >>> 8) & 0xFF);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
512 b[3] = (byte) ((len >>> 0) & 0xFF);
26
0aa0e0bd742c succeed drawFirstImage()!!
e085711
parents: 25
diff changeset
513 return b;
0aa0e0bd742c succeed drawFirstImage()!!
e085711
parents: 25
diff changeset
514 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
515
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
516 BufferedImage createBimg() throws IOException {
25
cded9fd297ab create png data
e085711
parents: 24
diff changeset
517 BufferedImage bimg = ImageIO.read(new ByteArrayInputStream(pngBytes));
cded9fd297ab create png data
e085711
parents: 24
diff changeset
518 return bimg;
cded9fd297ab create png data
e085711
parents: 24
diff changeset
519 }
104
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
520
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
521 void printFramebufferUpdate() {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
522
18
ccad9909e0e2 raw only version
e085711
parents: 17
diff changeset
523 System.out.println("messageType=" + messageType);
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
524 System.out.println("rectangles=" + rectangles);
18
ccad9909e0e2 raw only version
e085711
parents: 17
diff changeset
525 System.out.println("encoding=" + encoding);
78
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
526 System.out.println("rectX = "+rectX+": rectY = "+rectY);
5970410efee7 modify VncProxyService. EncodingRAW -> EncodingZlib
e085711
parents: 77
diff changeset
527 System.out.println("rectW = "+rectW+": rectH = "+rectH);
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
528 switch (encoding) {
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
529 case RfbProto.EncodingRaw:
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
530 System.out.println("rectW * rectH * 4 + 16 =" + rectW * rectH * 4
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
531 + 16);
23
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
532 break;
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
533 default:
b51bb7bc0766 test update
e085711
parents: 20
diff changeset
534 }
18
ccad9909e0e2 raw only version
e085711
parents: 17
diff changeset
535 }
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
536 int returnMsgtype() {
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
537 return messageType;
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
538 }
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
539
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
540
77
fe5925bb9a7e modify MyRfb.java
e085711
parents: 76
diff changeset
541 void readSpeedCheck() throws IOException {
fe5925bb9a7e modify MyRfb.java
e085711
parents: 76
diff changeset
542 byte[] b = new byte[1];
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
543 readFully(b);
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
544 }
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
545
77
fe5925bb9a7e modify MyRfb.java
e085711
parents: 76
diff changeset
546 void startSpeedCheck() {
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
547 ByteBuffer b = ByteBuffer.allocate(10);
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
548 b.put((byte)SpeedCheckMillis);
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
549 b.flip();
66
7632606406cb create sendCheckMillis
e085711
parents: 65
diff changeset
550 startCheckTime = System.currentTimeMillis();
7632606406cb create sendCheckMillis
e085711
parents: 65
diff changeset
551 System.out.println("startChckTime = "+ startCheckTime);
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
552 LinkedList<ByteBuffer>bufs = new LinkedList<ByteBuffer>();
84
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
553 bufs.add(b);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
554 multicastqueue.put(bufs);
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
555 }
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
556
77
fe5925bb9a7e modify MyRfb.java
e085711
parents: 76
diff changeset
557 void endSpeedCheck() {
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
558 long accTime = System.currentTimeMillis();
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
559 long time = accTime - startCheckTime;
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
560 System.out.println("checkMillis: " + time);
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
561 }
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
562
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
563
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
564 synchronized void changeStatusFlag() {
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
565 printStatusFlag = true;
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
566 }
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
567
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
568 void printMills() {
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
569 if(printStatusFlag) {
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
570
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
571 changeStatusFlag();
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
572 } else {
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
573 changeStatusFlag();
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
574 }
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
575 }
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
576
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
577 void speedCheckMillis() {
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
578 Runnable stdin = new Runnable() {
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
579 public void run() {
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
580 int c;
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
581 try {
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
582 while( (c = System.in.read()) != -1 ) {
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
583 switch(c) {
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
584 case 's':
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
585 break;
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
586 default:
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
587 startSpeedCheck();
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
588 break;
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
589 }
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
590 }
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
591 }catch(IOException e){
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
592 System.out.println(e);
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
593 }
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
594 }
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
595 };
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
596
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
597 new Thread(stdin).start();
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
598 }
162
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
599
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
600 void requestThreadStart() {
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
601 requestThread.start();
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
602 }
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
603
184
one
parents: 181
diff changeset
604
162
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
605 public synchronized void requestThreadNotify() {
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
606 rThread.reStart();
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
607 }
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
608
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
609
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
610 /**
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
611 * gzip byte arrays
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
612 * @param deflater
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
613 * @param inputs
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
614 * byte data[]
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
615 * @param inputIndex
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
616 * @param outputs
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
617 * byte data[]
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
618 * @return byte length in last byte array
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
619 * @throws IOException
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
620 */
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
621 public int zip(Deflater deflater,LinkedList<ByteBuffer> inputs, int inputIndex, LinkedList<ByteBuffer> outputs) throws IOException {
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
622 int len = 0;
98
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
623 ByteBuffer c1= ByteBuffer.allocate(INFLATE_BUFSIZE);
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
624 while(inputIndex < inputs.size() ) {
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
625 ByteBuffer b1 = inputs.get(inputIndex++);
98
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
626 deflater.setInput(b1.array(),b1.position(),b1.remaining());
106
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
627 /**
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
628 * If we finish() stream and reset() it, Deflater start new gzip stream, this makes continuous zlib reader unhappy.
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
629 * if we remove finish(), Deflater.deflate() never flushes its output. The original zlib deflate has flush flag. I'm pretty
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
630 * sure this a kind of bug of Java library.
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
631 */
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
632 if (inputIndex==inputs.size())
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
633 deflater.finish();
106
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
634 int len1 = 0;
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
635 do {
106
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
636 len1 = deflater.deflate(c1.array(),c1.position(),c1.remaining());
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
637 if (len1>0) {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
638 len += len1;
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
639 c1.position(c1.position()+len1);
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
640 if (c1.remaining()==0) {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
641 c1.flip(); outputs.addLast(c1);
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
642 c1 = ByteBuffer.allocate(INFLATE_BUFSIZE);
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
643 }
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
644 }
106
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
645 } while (len1 >0 || !deflater.needsInput()); // &&!deflater.finished());
98
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
646 }
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
647 if (c1.position()!=0) {
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
648 c1.flip(); outputs.addLast(c1);
98
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
649 }
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
650 deflater.reset();
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
651 return len;
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
652 }
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
653
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
654 /**
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
655 * gunzip byte arrays
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
656 * @param inflater
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
657 * @param inputs
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
658 * byte data[]
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
659 * @param outputs
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
660 * byte data[]
91
4116c19cd76e unzip/zip test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
661 *@return number of total bytes
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
662 * @throws IOException
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
663 */
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
664 public int unzip(Inflater inflater, LinkedList<ByteBuffer> inputs, int inputIndex, LinkedList<ByteBuffer> outputs,int bufSize)
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
665 throws DataFormatException {
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
666 int len=0;
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
667 ByteBuffer buf = ByteBuffer.allocate(bufSize);
98
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
668 while (inputIndex < inputs.size()) {
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
669 ByteBuffer input = inputs.get(inputIndex++);
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
670 inflater.setInput(input.array(),input.position(),input.limit());
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
671 // if (inputIndex==inputs.size()) if inflater/deflater has symmetry, we need this
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
672 // inflater.end(); but this won't work
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
673 do {
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
674 int len0 = inflater.inflate(buf.array(),buf.position(),buf.remaining());
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
675 if (len0>0) {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
676 buf.position(buf.position()+len0);
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
677 len += len0;
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
678 if (buf.remaining()==0) {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
679 buf.flip();
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
680 outputs.addLast(buf);
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
681 buf = ByteBuffer.allocate(bufSize);
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
682 }
91
4116c19cd76e unzip/zip test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
683 }
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
684 } while (!inflater.needsInput());
98
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
685 }
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
686 if (buf.position()!=0) {
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
687 buf.flip();
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
688 outputs.addLast(buf);
3db7ac2b10f7 JUnit test passed, but VNC stopped.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
689 }
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
690 return len;
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
691 }
156
e085711
parents: 155
diff changeset
692
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
693
156
e085711
parents: 155
diff changeset
694 float maxMag = 1;
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
695 /**
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
696 * send data to clients
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
697 * @param dataLen
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
698 * @throws IOException
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
699 * @throws DataFormatException
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
700 *
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
701 * Zlibed packet is compressed in context dependent way, that is, it have to send from the beginning. But this is
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
702 * impossible. So we have to compress it again for each clients. Separate deflater for each clients is necessary.
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
703 *
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
704 * Java's deflater does not support flush. This means to get the result, we have to finish the compression. Reseting
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
705 * start new compression, but it is not accepted well in zlib continuous reading. So we need new Encoding ZRLEE
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
706 * which reset decoder for each packet. ZRLEE can be invisible from user, but it have to be implemented in the clients.
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
707 * ZRLEE compression is not context dependent, so no recompression is necessary.
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
708 */
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
709 void readSendData(int dataLen) throws IOException, DataFormatException {
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
710 LinkedList<ByteBuffer>bufs = new LinkedList<ByteBuffer>();
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
711 ByteBuffer header = ByteBuffer.allocate(16);
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
712 readFully(header.array(),0,16);
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
713 header.limit(16);
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
714 if (header.get(0)==RfbProto.FramebufferUpdate) {
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
715 int encoding = header.getInt(12);
107
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
716 if (encoding==RfbProto.EncodingZRLE||encoding==RfbProto.EncodingZlib) { // ZRLEE is already recompressed
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
717 ByteBuffer len = ByteBuffer.allocate(4);
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
718 readFully(len.array(),0,4); len.limit(4);
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
719 ByteBuffer inputData = ByteBuffer.allocate(dataLen-20);
151
db5f735fd2b4 add xml-rpc.jar
e085711
parents: 144
diff changeset
720
db5f735fd2b4 add xml-rpc.jar
e085711
parents: 144
diff changeset
721 startTiming();
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
722 readFully(inputData.array(),0,inputData.capacity()); inputData.limit(dataLen-20);
151
db5f735fd2b4 add xml-rpc.jar
e085711
parents: 144
diff changeset
723 stopTiming();
db5f735fd2b4 add xml-rpc.jar
e085711
parents: 144
diff changeset
724
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
725 LinkedList<ByteBuffer>inputs = new LinkedList<ByteBuffer>();
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
726 inputs.add(inputData);
107
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
727
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
728 header.putInt(12, RfbProto.EncodingZRLEE); // means recompress every time
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
729 // using new Deflecter every time is incompatible with the protocol, clients have to be modified.
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
730 Deflater nDeflater = deflater; // new Deflater();
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
731 LinkedList<ByteBuffer> out = new LinkedList<ByteBuffer>();
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
732 unzip(inflater, inputs, 0 , out, INFLATE_BUFSIZE);
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
733 // dump32(inputs);
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
734 int len2 = zip(nDeflater, out, 0, bufs);
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
735 ByteBuffer blen = ByteBuffer.allocate(4); blen.putInt(len2); blen.flip();
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
736 bufs.addFirst(blen);
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
737
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
738 bufs.addFirst(header);
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
739 multicastqueue.put(bufs);
156
e085711
parents: 155
diff changeset
740 // is.reset();
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
741
156
e085711
parents: 155
diff changeset
742 /*
e085711
parents: 155
diff changeset
743 System.out.println("ZRLE = "+dataLen);
e085711
parents: 155
diff changeset
744 System.out.println("ZRLEE = "+(len2+20));
e085711
parents: 155
diff changeset
745 float mag = (float)dataLen / (float)(len2 + 20);
e085711
parents: 155
diff changeset
746 System.out.println("ZRLE / ZRLEE = "+ mag);
e085711
parents: 155
diff changeset
747 if(mag > maxMag) maxMag = mag;
e085711
parents: 155
diff changeset
748 System.out.println("maxMag = "+maxMag);
e085711
parents: 155
diff changeset
749 */
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
750 return ;
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
751 }
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
752 bufs.add(header);
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
753 if (dataLen>16) {
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
754 ByteBuffer b = ByteBuffer.allocate(dataLen-16);
156
e085711
parents: 155
diff changeset
755 startTiming();
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
756 readFully(b.array(),0,dataLen-16); b.limit(dataLen-16);
156
e085711
parents: 155
diff changeset
757 stopTiming();
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
758 bufs.add(b);
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
759 }
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
760 multicastqueue.put(bufs);
135
7929f447692f modify OptionNoFrame.java
e085711
parents: 131
diff changeset
761 // is.reset();
7929f447692f modify OptionNoFrame.java
e085711
parents: 131
diff changeset
762 return ;
130
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
763 }
cb00150c223e implement sendEchoPort
e085711
parents: 122
diff changeset
764 is.reset();
86
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
765
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
766 // It may be compressed. We can inflate here to avoid repeating clients decompressing here,
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
767 // but it may generate too many large data. It is better to do it in each client.
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
768 // But we have do inflation for all input data, so we have to do it here.
b7225991184b refactor for tests
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
769 }
43
08317224ce21 create RFB 003.998
e085711
parents: 40
diff changeset
770
71
bf5ac06df675 modify AcceptThread
e085711
parents: 67
diff changeset
771 void newClient(AcceptThread acceptThread, final Socket newCli,
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
772 final OutputStream os, final InputStream is) throws IOException {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
773 // createBimgFlag = true;
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
774 // rfb.addSockTmp(newCli);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
775 // addSock(newCli);
112
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
776 final int myId = clients;
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
777 final Client <LinkedList<ByteBuffer>> c = multicastqueue.newClient();
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
778 final AtomicInteger writerRunning = new AtomicInteger();
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
779 writerRunning.set(1);
112
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
780 /**
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
781 * Timeout thread. If a client is suspended, it has top of queue indefinitely, which caused memory
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
782 * overflow. After the timeout, we poll the queue and discard it. Start long wait if writer is running.
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
783 */
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
784 final Runnable timer = new Runnable() {
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
785 public void run() {
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
786 int count = 0;
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
787 for(;;) {
114
02016fcb9105 short time out
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
788 long timeout = 30000/8;
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
789 try {
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
790 synchronized(this) {
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
791 int state,flag;
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
792 writerRunning.set(0);
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
793 wait(timeout);
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
794 flag = 0;
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
795 while((state=writerRunning.get())==0) {
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
796 c.poll(); // discard, should be timeout
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
797 count++;
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
798 if (flag==0) {
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
799 System.out.println("Discarding "+myId + " count="+ count); flag = 1;
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
800 }
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
801 wait(10); // if this is too short, writer cannot take the poll, if this is too long, memory will overflow...
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
802 }
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
803 if (flag==1) System.out.println("Resuming "+myId + " count="+count);
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
804 if (state!=1) {
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
805 System.out.println("Client died "+myId);
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
806 break;
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
807 }
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
808 }
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
809 } catch (InterruptedException e) {
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
810 }
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
811 }
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
812 }
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
813 };
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
814 new Thread(timer).start();
112
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
815 /**
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
816 * discard all incoming from clients
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
817 */
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
818 final Runnable reader = new Runnable() {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
819 public void run() {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
820 byte b[] = new byte[4096];
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
821 for(;;) {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
822 try {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
823 int c = is.read(b);
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
824 if (c<=0) throw new IOException();
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
825 // System.out.println("client read "+c);
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
826 } catch (IOException e) {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
827 try {
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
828 writerRunning.set(2);
102
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
829 os.close();
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
830 is.close();
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
831 } catch (IOException e1) {
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
832 }
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
833 return;
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
834 }
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
835 }
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
836 }
2ce6077bdb09 needsInput
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
837 };
112
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
838 /**
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
839 * send packets to a client
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
840 */
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
841 Runnable sender = new Runnable() {
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
842 public void run() {
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
843 writerRunning.set(1);
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
844 try {
166
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
845 requestThreadNotify();
3c055da4d050 add authenticate AuthAccess
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
846
65
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
847 /**
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
848 * initial connection of RFB protocol
5fca2bb52dc7 create checkMillis
e085711
parents: 62
diff changeset
849 */
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
850 sendRfbVersion(os);
131
2a90459a05f0 modify CreateThread
e085711
parents: 130
diff changeset
851 // readVersionMsg(is);
155
0510022e9e92 modify MyRfbProto
e085711
parents: 154
diff changeset
852 int rfbMinor = readVersionMsg(is,os);
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
853 sendSecurityType(os);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
854 readSecType(is);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
855 sendSecResult(os);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
856 readClientInit(is);
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
857 sendInitData(os);
112
1a5afcf100a5 comments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
858 new Thread(reader).start(); // discard incoming packet here after.
162
13458f88d8c9 add RequestScreenThread.java
e085711
parents: 158
diff changeset
859 // writeFramebufferUpdateRequest(0,0, framebufferWidth, framebufferHeight, false );
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
860 for (;;) {
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
861 LinkedList<ByteBuffer> bufs = c.poll();
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
862 int inputIndex = 0;
109
3f73ebf918bd add time out to avoid memory overlow caused by suspended clients.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
863 ByteBuffer header = bufs.get(inputIndex);
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
864 if (header==null) continue;
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
865 if (header.get(0)==RfbProto.FramebufferUpdate) {
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
866 // System.out.println("client "+ myId);
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
867 }
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
868 writeToClient(os, bufs, inputIndex);
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
869 writerRunning.set(1); // yes my client is awaking.
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
870 }
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
871 } catch (IOException e) {
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
872 try {
113
8424f64dd736 time out and discarding. kill time out thread after client death.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
873 writerRunning.set(2);
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
874 os.close();
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
875 } catch (IOException e1) {
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
876 }
87
a8c33757ac99 refactoring zip/unzip
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
877 /* if socket closed cliList.remove(newCli); */
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
878 }
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
879 }
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
880
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
881 public void writeToClient(final OutputStream os,
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
882 LinkedList<ByteBuffer> bufs, int inputIndex)
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
883 throws IOException {
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
884 while(inputIndex < bufs.size()) {
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
885 ByteBuffer b = bufs.get(inputIndex++);
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
886 os.write(b.array(), b.position(), b.limit());
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
887 }
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
888 os.flush();
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
889 }
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
890 };
80
712a047908df recompress output
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 78
diff changeset
891 clients++;
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
892 new Thread(sender).start();
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
893
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
894 }
66
7632606406cb create sendCheckMillis
e085711
parents: 65
diff changeset
895
7632606406cb create sendCheckMillis
e085711
parents: 65
diff changeset
896
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
897 public void dump32(LinkedList<ByteBuffer>bufs) {
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
898 int len =0;
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
899 for(ByteBuffer b: bufs) len += b.remaining();
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
900 ByteBuffer top = bufs.getFirst();
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
901 ByteBuffer end = bufs.getLast();
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
902 System.err.println("length: "+len);
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
903 System.err.print("head 0: ");
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
904 for(int i = 0; i<16 && i < top.remaining(); i++) {
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
905 System.err.print(" "+ top.get(i));
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
906 }
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
907 System.err.print("tail 0: ");
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
908 for(int i = 0; i<16 && i < end.remaining(); i++) {
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
909 System.err.print(" "+end.get(i));
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
910 }
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
911 System.err.println();
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
912 }
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
913
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
914 @Test
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
915 public void test1() {
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
916 try {
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
917 LinkedList<ByteBuffer> in = new LinkedList<ByteBuffer>();
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
918 LinkedList<ByteBuffer> out = new LinkedList<ByteBuffer>();
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
919 LinkedList<ByteBuffer> out2 = new LinkedList<ByteBuffer>();
107
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
920 // if (false) {
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
921 // for(int i=0;i<10;i++) {
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
922 // in.add(ByteBuffer.wrap("test1".getBytes()));
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
923 // in.add(ByteBuffer.wrap("test2".getBytes()));
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
924 // in.add(ByteBuffer.wrap("test3".getBytes()));
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
925 // in.add(ByteBuffer.wrap("test44".getBytes()));
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
926 // }
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
927 // } else
a8b2712de4c5 ZRLEE extension
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
928 {
106
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
929 String t = "";
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
930 for(int i=0;i<10;i++) {
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
931 t += "test1";
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
932 t += "test2";
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
933 t += "test3";
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
934 t += "test44";
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
935 }
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
936 in.add(ByteBuffer.wrap(t.getBytes()));
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
937 }
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
938
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
939 LinkedList<ByteBuffer> in1 = clone(in);
90
462bca4c8cec ByteBuffer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
940
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
941 Deflater deflater = new Deflater();
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
942 zip(deflater,in,0,out);
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
943 // LinkedList<ByteBuffer> out3 = clone(out); zipped result is depend on deflator's state
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
944 unzip(inflater, out, 0,out2, INFLATE_BUFSIZE);
106
7a7baebdd3cf minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
945 // inflater.reset();
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
946 equalByteBuffers(in1, out2);
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
947 LinkedList<ByteBuffer> out4 = new LinkedList<ByteBuffer>();
104
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
948 deflater = new Deflater();
96
f0790bcf000d fix concurrent modification
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
949 zip(deflater,out2,0,out4);
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
950 LinkedList<ByteBuffer> out5 = new LinkedList<ByteBuffer>();
105
e166c3cad2b8 new Defleter is working with fixed TightVNC clients
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
951 unzip(inflater,out4,0, out5, INFLATE_BUFSIZE);
99
0c5762c3a8dd Test and VNC not working... Memory Overflow...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
952 int len = equalByteBuffers(in1,out5);
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
953
99
0c5762c3a8dd Test and VNC not working... Memory Overflow...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
954 System.out.println("Test Ok. "+len);
88
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
955 } catch (Exception e) {
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
956 assertEquals(0,1);
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
957 }
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
958 }
9b3b1e3e7db5 add test routine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
959
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
960 private LinkedList<ByteBuffer> clone(LinkedList<ByteBuffer> in) {
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
961 LinkedList<ByteBuffer> copy = new LinkedList<ByteBuffer>();
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
962 for(ByteBuffer b: in) {
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
963 ByteBuffer c = b.duplicate();
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
964 copy.add(c);
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
965 }
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
966 return copy;
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
967 }
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
968
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
969
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
970
99
0c5762c3a8dd Test and VNC not working... Memory Overflow...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
971 public int equalByteBuffers(LinkedList<ByteBuffer> in,
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
972 LinkedList<ByteBuffer> out2) {
99
0c5762c3a8dd Test and VNC not working... Memory Overflow...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
973 int len = 0;
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
974 Iterable<Byte> i = byteBufferIterator(in);
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
975 Iterator<Byte> o = byteBufferIterator(out2).iterator();
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
976
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
977 for(int b: i) {
99
0c5762c3a8dd Test and VNC not working... Memory Overflow...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
978 len ++;
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
979 if (o.hasNext()) {
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
980 int c = o.next();
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
981 assertEquals(b,c);
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
982 } else
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
983 assertEquals(0,1);
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
984 }
104
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
985 if (o.hasNext())
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
986 assertEquals(0,1);
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
987 // System.out.println();
99
0c5762c3a8dd Test and VNC not working... Memory Overflow...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
988 return len;
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
989 }
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
990
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
991 private Iterable<Byte> byteBufferIterator(final LinkedList<ByteBuffer> in) {
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
992 return new Iterable<Byte>() {
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
993 public Iterator<Byte> iterator() {
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
994 return new Iterator<Byte>() {
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
995 int bytes = 0;
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
996 int buffers = 0;
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
997 public boolean hasNext() {
104
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
998 for(;;) {
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
999 if (buffers>=in.size()) return false;
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
1000 ByteBuffer b = in.get(buffers);
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
1001 if (! (bytes<b.remaining())) {
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
1002 buffers ++; bytes=0;
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
1003 } else return true;
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
1004 }
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
1005 }
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1006 public Byte next() {
104
b649584c9712 iterator bug
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
1007 ByteBuffer bf =in.get(buffers);
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1008 byte b = bf.get(bytes++);
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1009 if (bf.remaining()<=bytes) {
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1010 buffers++;
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1011 bytes = 0;
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1012 }
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1013 // System.out.print(b);
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1014 return b;
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1015 }
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1016 public void remove() {
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1017 }
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1018 };
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
1019 }
93
40c22e507655 unzip/zip Test passed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
1020 };
92
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
1021 }
aa7df396e04d Test on going
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
1022
54
796f2b3b8665 modify MyRfbProto.java
e085711
parents: 51
diff changeset
1023 }
66
7632606406cb create sendCheckMillis
e085711
parents: 65
diff changeset
1024
7632606406cb create sendCheckMillis
e085711
parents: 65
diff changeset
1025