annotate src/myVncProxy/MyRfbProto.java @ 165:107b965effc1

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