Mercurial > hg > Members > nobuyasu > tightVNCClient
annotate RfbProto.java @ 35:b3c9be50ef89
add WaitReply
author | Yu Taninari <you@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 08 Jul 2011 20:20:43 +0900 |
parents | 750ecaa1e1b9 |
children |
rev | line source |
---|---|
29
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1 package myVncClient; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
2 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
3 // Copyright (C) 2001-2004 HorizonLive.com, Inc. All Rights Reserved. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
4 // Copyright (C) 2001-2006 Constantin Kaplinsky. All Rights Reserved. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
5 // Copyright (C) 2000 Tridia Corporation. All Rights Reserved. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
6 // Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
7 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
8 // This is free software; you can redistribute it and/or modify |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
9 // it under the terms of the GNU General Public License as published by |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
10 // the Free Software Foundation; either version 2 of the License, or |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
11 // (at your option) any later version. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
12 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
13 // This software is distributed in the hope that it will be useful, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
16 // GNU General Public License for more details. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
17 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
18 // You should have received a copy of the GNU General Public License |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
19 // along with this software; if not, write to the Free Software |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
20 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
21 // USA. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
22 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
23 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
24 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
25 // RfbProto.java |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
26 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
27 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
28 import java.io.*; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
29 import java.awt.*; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
30 import java.awt.event.*; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
31 import java.net.Socket; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
32 import java.net.ServerSocket; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
33 import java.util.zip.*; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
34 import java.nio.*; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
35 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
36 class RfbProto { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
37 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
38 final static String versionMsg_3_3 = "RFB 003.003\n", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
39 versionMsg_3_7 = "RFB 003.007\n", versionMsg_3_8 = "RFB 003.008\n"; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
40 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
41 // Vendor signatures: standard VNC/RealVNC, TridiaVNC, and TightVNC |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
42 final static String StandardVendor = "STDV", TridiaVncVendor = "TRDV", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
43 TightVncVendor = "TGHT"; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
44 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
45 // Security types |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
46 final static int SecTypeInvalid = 0, SecTypeNone = 1, SecTypeVncAuth = 2, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
47 SecTypeTight = 16; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
48 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
49 // Supported tunneling types |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
50 final static int NoTunneling = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
51 final static String SigNoTunneling = "NOTUNNEL"; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
52 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
53 // Supported authentication types |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
54 final static int AuthNone = 1, AuthVNC = 2, AuthUnixLogin = 129; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
55 final static String SigAuthNone = "NOAUTH__", SigAuthVNC = "VNCAUTH_", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
56 SigAuthUnixLogin = "ULGNAUTH"; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
57 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
58 // VNC authentication results |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
59 final static int VncAuthOK = 0, VncAuthFailed = 1, VncAuthTooMany = 2; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
60 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
61 // Standard server-to-client messages |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
62 final static int FramebufferUpdate = 0, SetColourMapEntries = 1, Bell = 2, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
63 ServerCutText = 3; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
64 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
65 // Non-standard server-to-client messages |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
66 final static int EndOfContinuousUpdates = 150; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
67 final static String SigEndOfContinuousUpdates = "CUS_EOCU"; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
68 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
69 // Standard client-to-server messages |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
70 final static int SetPixelFormat = 0, FixColourMapEntries = 1, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
71 SetEncodings = 2, FramebufferUpdateRequest = 3, KeyboardEvent = 4, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
72 PointerEvent = 5, ClientCutText = 6; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
73 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
74 // Non-standard client-to-server messages |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
75 final static int EnableContinuousUpdates = 150; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
76 final static String SigEnableContinuousUpdates = "CUC_ENCU"; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
77 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
78 // Supported encodings and pseudo-encodings |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
79 final static int EncodingRaw = 0, EncodingCopyRect = 1, EncodingRRE = 2, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
80 EncodingCoRRE = 4, EncodingHextile = 5, EncodingZlib = 6, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
81 EncodingTight = 7, EncodingZRLE = 16, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
82 EncodingCompressLevel0 = 0xFFFFFF00, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
83 EncodingQualityLevel0 = 0xFFFFFFE0, EncodingXCursor = 0xFFFFFF10, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
84 EncodingRichCursor = 0xFFFFFF11, EncodingPointerPos = 0xFFFFFF18, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
85 EncodingLastRect = 0xFFFFFF20, EncodingNewFBSize = 0xFFFFFF21; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
86 final static String SigEncodingRaw = "RAW_____", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
87 SigEncodingCopyRect = "COPYRECT", SigEncodingRRE = "RRE_____", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
88 SigEncodingCoRRE = "CORRE___", SigEncodingHextile = "HEXTILE_", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
89 SigEncodingZlib = "ZLIB____", SigEncodingTight = "TIGHT___", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
90 SigEncodingZRLE = "ZRLE____", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
91 SigEncodingCompressLevel0 = "COMPRLVL", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
92 SigEncodingQualityLevel0 = "JPEGQLVL", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
93 SigEncodingXCursor = "X11CURSR", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
94 SigEncodingRichCursor = "RCHCURSR", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
95 SigEncodingPointerPos = "POINTPOS", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
96 SigEncodingLastRect = "LASTRECT", |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
97 SigEncodingNewFBSize = "NEWFBSIZ"; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
98 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
99 final static int MaxNormalEncoding = 255; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
100 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
101 // Contstants used in the Hextile decoder |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
102 final static int HextileRaw = 1, HextileBackgroundSpecified = 2, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
103 HextileForegroundSpecified = 4, HextileAnySubrects = 8, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
104 HextileSubrectsColoured = 16; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
105 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
106 // Contstants used in the Tight decoder |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
107 final static int TightMinToCompress = 12; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
108 final static int TightExplicitFilter = 0x04, TightFill = 0x08, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
109 TightJpeg = 0x09, TightMaxSubencoding = 0x09, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
110 TightFilterCopy = 0x00, TightFilterPalette = 0x01, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
111 TightFilterGradient = 0x02; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
112 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
113 String host; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
114 int port; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
115 Socket sock; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
116 OutputStream os; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
117 SessionRecorder rec; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
118 boolean inNormalProtocol = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
119 VncViewer viewer; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
120 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
121 // Input stream is declared private to make sure it can be accessed |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
122 // only via RfbProto methods. We have to do this because we want to |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
123 // count how many bytes were read. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
124 // private DataInputStream is; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
125 protected DataInputStream is; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
126 // private long numBytesRead = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
127 protected long numBytesRead = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
128 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
129 public long getNumBytesRead() { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
130 return numBytesRead; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
131 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
132 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
133 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
134 // Java on UNIX does not call keyPressed() on some keys, for example |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
135 // swedish keys To prevent our workaround to produce duplicate |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
136 // keypresses on JVMs that actually works, keep track of if |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
137 // keyPressed() for a "broken" key was called or not. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
138 boolean brokenKeyPressed = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
139 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
140 // This will be set to true on the first framebuffer update |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
141 // containing Zlib-, ZRLE- or Tight-encoded data. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
142 boolean wereZlibUpdates = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
143 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
144 // This will be set to false if the startSession() was called after |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
145 // we have received at least one Zlib-, ZRLE- or Tight-encoded |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
146 // framebuffer update. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
147 boolean recordFromBeginning = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
148 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
149 // This fields are needed to show warnings about inefficiently saved |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
150 // sessions only once per each saved session file. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
151 boolean zlibWarningShown; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
152 boolean tightWarningShown; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
153 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
154 // Before starting to record each saved session, we set this field |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
155 // to 0, and increment on each framebuffer update. We don't flush |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
156 // the SessionRecorder data into the file before the second update. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
157 // This allows us to write initial framebuffer update with zero |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
158 // timestamp, to let the player show initial desktop before |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
159 // playback. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
160 int numUpdatesInSession; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
161 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
162 // Measuring network throughput. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
163 boolean timing; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
164 long timeWaitedIn100us; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
165 long timedKbits; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
166 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
167 // Protocol version and TightVNC-specific protocol options. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
168 int serverMajor, serverMinor; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
169 int clientMajor, clientMinor; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
170 boolean protocolTightVNC; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
171 CapsContainer tunnelCaps, authCaps; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
172 CapsContainer serverMsgCaps, clientMsgCaps; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
173 CapsContainer encodingCaps; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
174 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
175 // If true, informs that the RFB socket was closed. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
176 // private boolean closed; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
177 protected boolean closed; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
178 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
179 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
180 // Constructor. Make TCP connection to RFB server. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
181 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
182 RfbProto(String h, int p, VncViewer v) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
183 viewer = v; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
184 host = h; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
185 port = p; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
186 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
187 if (viewer.socketFactory == null) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
188 sock = new Socket(host, port); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
189 } else { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
190 try { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
191 Class factoryClass = Class.forName(viewer.socketFactory); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
192 SocketFactory factory = (SocketFactory) factoryClass |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
193 .newInstance(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
194 if (viewer.inAnApplet) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
195 sock = factory.createSocket(host, port, viewer); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
196 else |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
197 sock = factory.createSocket(host, port, viewer.mainArgs); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
198 } catch (Exception e) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
199 e.printStackTrace(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
200 throw new IOException(e.getMessage()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
201 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
202 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
203 is = new DataInputStream(new BufferedInputStream(sock.getInputStream(), |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
204 16384)); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
205 os = sock.getOutputStream(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
206 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
207 timing = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
208 timeWaitedIn100us = 5; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
209 timedKbits = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
210 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
211 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
212 RfbProto(String h, int p) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
213 host = h; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
214 port = p; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
215 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
216 sock = new Socket(host, port); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
217 is = new DataInputStream(new BufferedInputStream(sock.getInputStream(), |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
218 16384)); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
219 os = sock.getOutputStream(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
220 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
221 timing = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
222 timeWaitedIn100us = 5; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
223 timedKbits = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
224 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
225 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
226 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
227 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
228 synchronized void close() { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
229 try { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
230 sock.close(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
231 closed = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
232 System.out.println("RFB socket closed"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
233 if (rec != null) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
234 rec.close(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
235 rec = null; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
236 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
237 } catch (Exception e) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
238 e.printStackTrace(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
239 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
240 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
241 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
242 synchronized boolean closed() { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
243 return closed; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
244 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
245 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
246 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
247 // Read server's protocol version message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
248 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
249 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
250 void readVersionMsg() throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
251 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
252 byte[] b = new byte[12]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
253 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
254 readFully(b); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
255 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
256 if ((b[0] != 'R') || (b[1] != 'F') || (b[2] != 'B') || (b[3] != ' ') |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
257 || (b[4] < '0') || (b[4] > '9') || (b[5] < '0') || (b[5] > '9') |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
258 || (b[6] < '0') || (b[6] > '9') || (b[7] != '.') |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
259 || (b[8] < '0') || (b[8] > '9') || (b[9] < '0') || (b[9] > '9') |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
260 || (b[10] < '0') || (b[10] > '9') || (b[11] != '\n')) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
261 throw new Exception("Host " + host + " port " + port |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
262 + " is not an RFB server"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
263 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
264 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
265 serverMajor = (b[4] - '0') * 100 + (b[5] - '0') * 10 + (b[6] - '0'); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
266 serverMinor = (b[8] - '0') * 100 + (b[9] - '0') * 10 + (b[10] - '0'); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
267 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
268 if (serverMajor < 3) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
269 throw new Exception( |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
270 "RFB server does not support protocol version 3"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
271 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
272 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
273 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
274 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
275 // Write our protocol version message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
276 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
277 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
278 void writeVersionMsg() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
279 clientMajor = 3; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
280 if (serverMajor > 3 || serverMinor >= 8) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
281 clientMinor = 8; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
282 os.write(versionMsg_3_8.getBytes()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
283 } else if (serverMinor >= 7) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
284 clientMinor = 7; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
285 os.write(versionMsg_3_7.getBytes()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
286 } else { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
287 clientMinor = 3; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
288 os.write(versionMsg_3_3.getBytes()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
289 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
290 protocolTightVNC = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
291 initCapabilities(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
292 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
293 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
294 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
295 // Negotiate the authentication scheme. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
296 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
297 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
298 int negotiateSecurity() throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
299 return (clientMinor >= 7) ? selectSecurityType() : readSecurityType(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
300 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
301 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
302 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
303 // Read security type from the server (protocol version 3.3). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
304 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
305 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
306 int readSecurityType() throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
307 int secType = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
308 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
309 switch (secType) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
310 case SecTypeInvalid: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
311 readConnFailedReason(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
312 return SecTypeInvalid; // should never be executed |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
313 case SecTypeNone: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
314 case SecTypeVncAuth: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
315 return secType; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
316 default: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
317 throw new Exception("Unknown security type from RFB server: " |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
318 + secType); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
319 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
320 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
321 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
322 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
323 // Select security type from the server's list (protocol versions 3.7/3.8). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
324 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
325 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
326 int selectSecurityType() throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
327 int secType = SecTypeInvalid; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
328 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
329 // Read the list of secutiry types. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
330 int nSecTypes = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
331 if (nSecTypes == 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
332 readConnFailedReason(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
333 return SecTypeInvalid; // should never be executed |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
334 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
335 byte[] secTypes = new byte[nSecTypes]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
336 readFully(secTypes); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
337 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
338 // Find out if the server supports TightVNC protocol extensions |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
339 for (int i = 0; i < nSecTypes; i++) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
340 if (secTypes[i] == SecTypeTight) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
341 protocolTightVNC = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
342 os.write(SecTypeTight); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
343 return SecTypeTight; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
344 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
345 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
346 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
347 // Find first supported security type. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
348 for (int i = 0; i < nSecTypes; i++) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
349 if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
350 secType = secTypes[i]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
351 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
352 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
353 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
354 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
355 if (secType == SecTypeInvalid) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
356 throw new Exception("Server did not offer supported security type"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
357 } else { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
358 os.write(secType); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
359 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
360 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
361 return secType; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
362 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
363 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
364 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
365 // Perform "no authentication". |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
366 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
367 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
368 void authenticateNone() throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
369 if (clientMinor >= 8) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
370 readSecurityResult("No authentication"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
371 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
372 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
373 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
374 // Perform standard VNC Authentication. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
375 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
376 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
377 void authenticateVNC(String pw) throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
378 byte[] challenge = new byte[16]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
379 readFully(challenge); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
380 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
381 if (pw.length() > 8) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
382 pw = pw.substring(0, 8); // Truncate to 8 chars |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
383 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
384 // Truncate password on the first zero byte. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
385 int firstZero = pw.indexOf(0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
386 if (firstZero != -1) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
387 pw = pw.substring(0, firstZero); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
388 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
389 byte[] key = { 0, 0, 0, 0, 0, 0, 0, 0 }; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
390 System.arraycopy(pw.getBytes(), 0, key, 0, pw.length()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
391 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
392 DesCipher des = new DesCipher(key); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
393 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
394 des.encrypt(challenge, 0, challenge, 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
395 des.encrypt(challenge, 8, challenge, 8); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
396 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
397 os.write(challenge); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
398 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
399 readSecurityResult("VNC authentication"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
400 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
401 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
402 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
403 // Read security result. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
404 // Throws an exception on authentication failure. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
405 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
406 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
407 void readSecurityResult(String authType) throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
408 int securityResult = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
409 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
410 switch (securityResult) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
411 case VncAuthOK: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
412 System.out.println(authType + ": success"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
413 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
414 case VncAuthFailed: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
415 if (clientMinor >= 8) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
416 readConnFailedReason(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
417 throw new Exception(authType + ": failed"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
418 case VncAuthTooMany: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
419 throw new Exception(authType + ": failed, too many tries"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
420 default: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
421 throw new Exception(authType + ": unknown result " + securityResult); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
422 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
423 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
424 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
425 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
426 // Read the string describing the reason for a connection failure, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
427 // and throw an exception. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
428 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
429 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
430 void readConnFailedReason() throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
431 int reasonLen = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
432 byte[] reason = new byte[reasonLen]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
433 readFully(reason); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
434 throw new Exception(new String(reason)); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
435 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
436 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
437 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
438 // Initialize capability lists (TightVNC protocol extensions). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
439 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
440 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
441 void initCapabilities() { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
442 tunnelCaps = new CapsContainer(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
443 authCaps = new CapsContainer(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
444 serverMsgCaps = new CapsContainer(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
445 clientMsgCaps = new CapsContainer(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
446 encodingCaps = new CapsContainer(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
447 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
448 // Supported authentication methods |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
449 authCaps.add(AuthNone, StandardVendor, SigAuthNone, "No authentication"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
450 authCaps.add(AuthVNC, StandardVendor, SigAuthVNC, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
451 "Standard VNC password authentication"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
452 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
453 // Supported non-standard server-to-client messages |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
454 // [NONE] |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
455 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
456 // Supported non-standard client-to-server messages |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
457 // [NONE] |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
458 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
459 // Supported encoding types |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
460 encodingCaps.add(EncodingCopyRect, StandardVendor, SigEncodingCopyRect, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
461 "Standard CopyRect encoding"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
462 encodingCaps.add(EncodingRRE, StandardVendor, SigEncodingRRE, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
463 "Standard RRE encoding"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
464 encodingCaps.add(EncodingCoRRE, StandardVendor, SigEncodingCoRRE, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
465 "Standard CoRRE encoding"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
466 encodingCaps.add(EncodingHextile, StandardVendor, SigEncodingHextile, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
467 "Standard Hextile encoding"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
468 encodingCaps.add(EncodingZRLE, StandardVendor, SigEncodingZRLE, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
469 "Standard ZRLE encoding"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
470 encodingCaps.add(EncodingZlib, TridiaVncVendor, SigEncodingZlib, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
471 "Zlib encoding"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
472 encodingCaps.add(EncodingTight, TightVncVendor, SigEncodingTight, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
473 "Tight encoding"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
474 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
475 // Supported pseudo-encoding types |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
476 encodingCaps.add(EncodingCompressLevel0, TightVncVendor, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
477 SigEncodingCompressLevel0, "Compression level"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
478 encodingCaps.add(EncodingQualityLevel0, TightVncVendor, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
479 SigEncodingQualityLevel0, "JPEG quality level"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
480 encodingCaps.add(EncodingXCursor, TightVncVendor, SigEncodingXCursor, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
481 "X-style cursor shape update"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
482 encodingCaps.add(EncodingRichCursor, TightVncVendor, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
483 SigEncodingRichCursor, "Rich-color cursor shape update"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
484 encodingCaps.add(EncodingPointerPos, TightVncVendor, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
485 SigEncodingPointerPos, "Pointer position update"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
486 encodingCaps.add(EncodingLastRect, TightVncVendor, SigEncodingLastRect, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
487 "LastRect protocol extension"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
488 encodingCaps.add(EncodingNewFBSize, TightVncVendor, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
489 SigEncodingNewFBSize, "Framebuffer size change"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
490 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
491 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
492 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
493 // Setup tunneling (TightVNC protocol extensions) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
494 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
495 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
496 void setupTunneling() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
497 int nTunnelTypes = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
498 if (nTunnelTypes != 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
499 readCapabilityList(tunnelCaps, nTunnelTypes); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
500 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
501 // We don't support tunneling yet. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
502 writeInt(NoTunneling); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
503 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
504 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
505 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
506 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
507 // Negotiate authentication scheme (TightVNC protocol extensions) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
508 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
509 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
510 int negotiateAuthenticationTight() throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
511 int nAuthTypes = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
512 if (nAuthTypes == 0) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
513 return AuthNone; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
514 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
515 readCapabilityList(authCaps, nAuthTypes); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
516 for (int i = 0; i < authCaps.numEnabled(); i++) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
517 int authType = authCaps.getByOrder(i); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
518 if (authType == AuthNone || authType == AuthVNC) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
519 writeInt(authType); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
520 return authType; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
521 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
522 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
523 throw new Exception("No suitable authentication scheme found"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
524 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
525 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
526 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
527 // Read a capability list (TightVNC protocol extensions) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
528 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
529 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
530 void readCapabilityList(CapsContainer caps, int count) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
531 int code; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
532 byte[] vendor = new byte[4]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
533 byte[] name = new byte[8]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
534 for (int i = 0; i < count; i++) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
535 code = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
536 readFully(vendor); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
537 readFully(name); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
538 caps.enable(new CapabilityInfo(code, vendor, name)); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
539 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
540 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
541 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
542 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
543 // Write a 32-bit integer into the output stream. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
544 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
545 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
546 void writeInt(int value) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
547 byte[] b = new byte[4]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
548 b[0] = (byte) ((value >> 24) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
549 b[1] = (byte) ((value >> 16) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
550 b[2] = (byte) ((value >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
551 b[3] = (byte) (value & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
552 os.write(b); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
553 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
554 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
555 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
556 // Write the client initialisation message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
557 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
558 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
559 void writeClientInit() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
560 /* |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
561 if (viewer.options.shareDesktop) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
562 os.write(1); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
563 */ |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
564 os.write(0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
565 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
566 // viewer.options.disableShareDesktop(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
567 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
568 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
569 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
570 // Read the server initialisation message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
571 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
572 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
573 String desktopName; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
574 int framebufferWidth, framebufferHeight; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
575 int bitsPerPixel, depth; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
576 boolean bigEndian, trueColour; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
577 int redMax, greenMax, blueMax, redShift, greenShift, blueShift; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
578 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
579 void readServerInit() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
580 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
581 framebufferWidth = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
582 framebufferHeight = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
583 bitsPerPixel = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
584 depth = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
585 bigEndian = (readU8() != 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
586 trueColour = (readU8() != 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
587 redMax = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
588 greenMax = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
589 blueMax = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
590 redShift = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
591 greenShift = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
592 blueShift = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
593 byte[] pad = new byte[3]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
594 readFully(pad); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
595 int nameLength = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
596 byte[] name = new byte[nameLength]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
597 readFully(name); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
598 desktopName = new String(name); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
599 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
600 // Read interaction capabilities (TightVNC protocol extensions) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
601 if (protocolTightVNC) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
602 int nServerMessageTypes = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
603 int nClientMessageTypes = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
604 int nEncodingTypes = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
605 readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
606 readCapabilityList(serverMsgCaps, nServerMessageTypes); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
607 readCapabilityList(clientMsgCaps, nClientMessageTypes); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
608 readCapabilityList(encodingCaps, nEncodingTypes); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
609 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
610 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
611 inNormalProtocol = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
612 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
613 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
614 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
615 // Create session file and write initial protocol messages into it. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
616 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
617 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
618 void startSession(String fname) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
619 rec = new SessionRecorder(fname); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
620 rec.writeHeader(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
621 rec.write(versionMsg_3_3.getBytes()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
622 rec.writeIntBE(SecTypeNone); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
623 rec.writeShortBE(framebufferWidth); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
624 rec.writeShortBE(framebufferHeight); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
625 byte[] fbsServerInitMsg = { 32, 24, 0, 1, 0, (byte) 0xFF, 0, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
626 (byte) 0xFF, 0, (byte) 0xFF, 16, 8, 0, 0, 0, 0 }; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
627 rec.write(fbsServerInitMsg); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
628 rec.writeIntBE(desktopName.length()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
629 rec.write(desktopName.getBytes()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
630 numUpdatesInSession = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
631 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
632 // FIXME: If there were e.g. ZRLE updates only, that should not |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
633 // affect recording of Zlib and Tight updates. So, actually |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
634 // we should maintain separate flags for Zlib, ZRLE and |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
635 // Tight, instead of one ``wereZlibUpdates'' variable. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
636 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
637 if (wereZlibUpdates) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
638 recordFromBeginning = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
639 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
640 zlibWarningShown = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
641 tightWarningShown = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
642 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
643 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
644 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
645 // Close session file. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
646 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
647 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
648 void closeSession() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
649 if (rec != null) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
650 rec.close(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
651 rec = null; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
652 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
653 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
654 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
655 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
656 // Set new framebuffer size |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
657 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
658 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
659 void setFramebufferSize(int width, int height) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
660 framebufferWidth = width; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
661 framebufferHeight = height; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
662 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
663 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
664 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
665 // Read the server message type |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
666 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
667 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
668 int readServerMessageType() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
669 int msgType = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
670 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
671 // If the session is being recorded: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
672 if (rec != null) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
673 if (msgType == Bell) { // Save Bell messages in session files. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
674 rec.writeByte(msgType); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
675 if (numUpdatesInSession > 0) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
676 rec.flush(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
677 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
678 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
679 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
680 return msgType; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
681 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
682 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
683 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
684 // Read a FramebufferUpdate message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
685 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
686 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
687 int updateNRects; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
688 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
689 void readFramebufferUpdate() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
690 skipBytes(1); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
691 updateNRects = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
692 // If the session is being recorded: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
693 if (rec != null) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
694 rec.writeByte(FramebufferUpdate); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
695 rec.writeByte(0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
696 rec.writeShortBE(updateNRects); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
697 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
698 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
699 numUpdatesInSession++; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
700 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
701 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
702 // Read a FramebufferUpdate rectangle header |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
703 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
704 int updateRectX, updateRectY, updateRectW, updateRectH, updateRectEncoding; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
705 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
706 void readFramebufferUpdateRectHdr() throws Exception { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
707 updateRectX = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
708 updateRectY = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
709 updateRectW = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
710 updateRectH = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
711 updateRectEncoding = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
712 // System.out.println("readU16&32"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
713 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
714 if (updateRectEncoding == EncodingZlib |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
715 || updateRectEncoding == EncodingZRLE |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
716 || updateRectEncoding == EncodingTight) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
717 wereZlibUpdates = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
718 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
719 // If the session is being recorded: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
720 if (rec != null) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
721 if (numUpdatesInSession > 1) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
722 rec.flush(); // Flush the output on each rectangle. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
723 rec.writeShortBE(updateRectX); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
724 rec.writeShortBE(updateRectY); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
725 rec.writeShortBE(updateRectW); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
726 rec.writeShortBE(updateRectH); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
727 if (updateRectEncoding == EncodingZlib && !recordFromBeginning) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
728 // Here we cannot write Zlib-encoded rectangles because the |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
729 // decoder won't be able to reproduce zlib stream state. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
730 if (!zlibWarningShown) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
731 System.out.println("Warning: Raw encoding will be used " |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
732 + "instead of Zlib in recorded session."); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
733 zlibWarningShown = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
734 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
735 rec.writeIntBE(EncodingRaw); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
736 } else { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
737 rec.writeIntBE(updateRectEncoding); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
738 if (updateRectEncoding == EncodingTight && !recordFromBeginning |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
739 && !tightWarningShown) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
740 System.out.println("Warning: Re-compressing Tight-encoded " |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
741 + "updates for session recording."); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
742 tightWarningShown = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
743 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
744 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
745 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
746 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
747 if (updateRectEncoding < 0 || updateRectEncoding > MaxNormalEncoding) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
748 return; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
749 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
750 if (updateRectX + updateRectW > framebufferWidth |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
751 || updateRectY + updateRectH > framebufferHeight) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
752 throw new Exception("Framebuffer update rectangle too large: " |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
753 + updateRectW + "x" + updateRectH + " at (" + updateRectX |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
754 + "," + updateRectY + ")"); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
755 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
756 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
757 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
758 // Read CopyRect source X and Y. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
759 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
760 int copyRectSrcX, copyRectSrcY; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
761 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
762 void readCopyRect() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
763 copyRectSrcX = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
764 copyRectSrcY = readU16(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
765 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
766 // If the session is being recorded: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
767 if (rec != null) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
768 rec.writeShortBE(copyRectSrcX); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
769 rec.writeShortBE(copyRectSrcY); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
770 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
771 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
772 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
773 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
774 // Read a ServerCutText message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
775 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
776 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
777 String readServerCutText() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
778 skipBytes(3); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
779 int len = readU32(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
780 byte[] text = new byte[len]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
781 readFully(text); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
782 return new String(text); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
783 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
784 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
785 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
786 // Read an integer in compact representation (1..3 bytes). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
787 // Such format is used as a part of the Tight encoding. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
788 // Also, this method records data if session recording is active and |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
789 // the viewer's recordFromBeginning variable is set to true. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
790 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
791 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
792 int readCompactLen() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
793 int[] portion = new int[3]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
794 portion[0] = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
795 int byteCount = 1; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
796 int len = portion[0] & 0x7F; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
797 if ((portion[0] & 0x80) != 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
798 portion[1] = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
799 byteCount++; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
800 len |= (portion[1] & 0x7F) << 7; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
801 if ((portion[1] & 0x80) != 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
802 portion[2] = readU8(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
803 byteCount++; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
804 len |= (portion[2] & 0xFF) << 14; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
805 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
806 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
807 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
808 if (rec != null && recordFromBeginning) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
809 for (int i = 0; i < byteCount; i++) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
810 rec.writeByte(portion[i]); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
811 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
812 return len; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
813 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
814 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
815 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
816 // Write a FramebufferUpdateRequest message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
817 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
818 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
819 void writeFramebufferUpdateRequest(int x, int y, int w, int h, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
820 boolean incremental) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
821 byte[] b = new byte[10]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
822 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
823 b[0] = (byte) FramebufferUpdateRequest; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
824 b[1] = (byte) (incremental ? 1 : 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
825 b[2] = (byte) ((x >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
826 b[3] = (byte) (x & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
827 b[4] = (byte) ((y >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
828 b[5] = (byte) (y & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
829 b[6] = (byte) ((w >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
830 b[7] = (byte) (w & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
831 b[8] = (byte) ((h >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
832 b[9] = (byte) (h & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
833 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
834 os.write(b); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
835 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
836 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
837 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
838 // Write a SetPixelFormat message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
839 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
840 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
841 void writeSetPixelFormat(int bitsPerPixel, int depth, boolean bigEndian, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
842 boolean trueColour, int redMax, int greenMax, int blueMax, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
843 int redShift, int greenShift, int blueShift) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
844 byte[] b = new byte[20]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
845 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
846 b[0] = (byte) SetPixelFormat; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
847 b[4] = (byte) bitsPerPixel; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
848 b[5] = (byte) depth; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
849 b[6] = (byte) (bigEndian ? 1 : 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
850 b[7] = (byte) (trueColour ? 1 : 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
851 b[8] = (byte) ((redMax >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
852 b[9] = (byte) (redMax & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
853 b[10] = (byte) ((greenMax >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
854 b[11] = (byte) (greenMax & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
855 b[12] = (byte) ((blueMax >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
856 b[13] = (byte) (blueMax & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
857 b[14] = (byte) redShift; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
858 b[15] = (byte) greenShift; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
859 b[16] = (byte) blueShift; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
860 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
861 os.write(b); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
862 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
863 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
864 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
865 // Write a FixColourMapEntries message. The values in the red, green and |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
866 // blue arrays are from 0 to 65535. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
867 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
868 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
869 void writeFixColourMapEntries(int firstColour, int nColours, int[] red, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
870 int[] green, int[] blue) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
871 byte[] b = new byte[6 + nColours * 6]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
872 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
873 b[0] = (byte) FixColourMapEntries; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
874 b[2] = (byte) ((firstColour >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
875 b[3] = (byte) (firstColour & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
876 b[4] = (byte) ((nColours >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
877 b[5] = (byte) (nColours & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
878 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
879 for (int i = 0; i < nColours; i++) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
880 b[6 + i * 6] = (byte) ((red[i] >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
881 b[6 + i * 6 + 1] = (byte) (red[i] & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
882 b[6 + i * 6 + 2] = (byte) ((green[i] >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
883 b[6 + i * 6 + 3] = (byte) (green[i] & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
884 b[6 + i * 6 + 4] = (byte) ((blue[i] >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
885 b[6 + i * 6 + 5] = (byte) (blue[i] & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
886 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
887 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
888 os.write(b); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
889 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
890 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
891 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
892 // Write a SetEncodings message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
893 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
894 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
895 void writeSetEncodings(int[] encs, int len) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
896 byte[] b = new byte[4 + 4 * len]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
897 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
898 b[0] = (byte) SetEncodings; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
899 b[2] = (byte) ((len >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
900 b[3] = (byte) (len & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
901 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
902 for (int i = 0; i < len; i++) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
903 b[4 + 4 * i] = (byte) ((encs[i] >> 24) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
904 b[5 + 4 * i] = (byte) ((encs[i] >> 16) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
905 b[6 + 4 * i] = (byte) ((encs[i] >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
906 b[7 + 4 * i] = (byte) (encs[i] & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
907 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
908 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
909 os.write(b); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
910 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
911 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
912 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
913 // Write a ClientCutText message |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
914 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
915 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
916 void writeClientCutText(String text) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
917 byte[] b = new byte[8 + text.length()]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
918 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
919 b[0] = (byte) ClientCutText; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
920 b[4] = (byte) ((text.length() >> 24) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
921 b[5] = (byte) ((text.length() >> 16) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
922 b[6] = (byte) ((text.length() >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
923 b[7] = (byte) (text.length() & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
924 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
925 System.arraycopy(text.getBytes(), 0, b, 8, text.length()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
926 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
927 os.write(b); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
928 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
929 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
930 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
931 // A buffer for putting pointer and keyboard events before being sent. This |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
932 // is to ensure that multiple RFB events generated from a single Java Event |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
933 // will all be sent in a single network packet. The maximum possible |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
934 // length is 4 modifier down events, a single key event followed by 4 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
935 // modifier up events i.e. 9 key events or 72 bytes. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
936 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
937 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
938 byte[] eventBuf = new byte[72]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
939 int eventBufLen; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
940 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
941 // Useful shortcuts for modifier masks. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
942 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
943 final static int CTRL_MASK = InputEvent.CTRL_MASK; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
944 final static int SHIFT_MASK = InputEvent.SHIFT_MASK; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
945 final static int META_MASK = InputEvent.META_MASK; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
946 final static int ALT_MASK = InputEvent.ALT_MASK; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
947 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
948 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
949 // Write a pointer event message. We may need to send modifier key events |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
950 // around it to set the correct modifier state. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
951 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
952 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
953 int pointerMask = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
954 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
955 void writePointerEvent(MouseEvent evt) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
956 int modifiers = evt.getModifiers(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
957 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
958 int mask2 = 2; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
959 int mask3 = 4; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
960 if (viewer.options.reverseMouseButtons2And3) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
961 mask2 = 4; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
962 mask3 = 2; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
963 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
964 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
965 // Note: For some reason, AWT does not set BUTTON1_MASK on left |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
966 // button presses. Here we think that it was the left button if |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
967 // modifiers do not include BUTTON2_MASK or BUTTON3_MASK. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
968 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
969 if (evt.getID() == MouseEvent.MOUSE_PRESSED) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
970 if ((modifiers & InputEvent.BUTTON2_MASK) != 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
971 pointerMask = mask2; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
972 modifiers &= ~ALT_MASK; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
973 } else if ((modifiers & InputEvent.BUTTON3_MASK) != 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
974 pointerMask = mask3; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
975 modifiers &= ~META_MASK; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
976 } else { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
977 pointerMask = 1; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
978 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
979 } else if (evt.getID() == MouseEvent.MOUSE_RELEASED) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
980 pointerMask = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
981 if ((modifiers & InputEvent.BUTTON2_MASK) != 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
982 modifiers &= ~ALT_MASK; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
983 } else if ((modifiers & InputEvent.BUTTON3_MASK) != 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
984 modifiers &= ~META_MASK; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
985 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
986 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
987 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
988 eventBufLen = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
989 writeModifierKeyEvents(modifiers); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
990 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
991 int x = evt.getX(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
992 int y = evt.getY(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
993 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
994 if (x < 0) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
995 x = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
996 if (y < 0) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
997 y = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
998 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
999 eventBuf[eventBufLen++] = (byte) PointerEvent; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1000 eventBuf[eventBufLen++] = (byte) pointerMask; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1001 eventBuf[eventBufLen++] = (byte) ((x >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1002 eventBuf[eventBufLen++] = (byte) (x & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1003 eventBuf[eventBufLen++] = (byte) ((y >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1004 eventBuf[eventBufLen++] = (byte) (y & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1005 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1006 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1007 // Always release all modifiers after an "up" event |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1008 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1009 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1010 if (pointerMask == 0) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1011 writeModifierKeyEvents(0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1012 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1013 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1014 os.write(eventBuf, 0, eventBufLen); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1015 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1016 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1017 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1018 // Write a key event message. We may need to send modifier key events |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1019 // around it to set the correct modifier state. Also we need to translate |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1020 // from the Java key values to the X keysym values used by the RFB protocol. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1021 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1022 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1023 void writeKeyEvent(KeyEvent evt) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1024 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1025 int keyChar = evt.getKeyChar(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1026 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1027 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1028 // Ignore event if only modifiers were pressed. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1029 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1030 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1031 // Some JVMs return 0 instead of CHAR_UNDEFINED in getKeyChar(). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1032 if (keyChar == 0) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1033 keyChar = KeyEvent.CHAR_UNDEFINED; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1034 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1035 if (keyChar == KeyEvent.CHAR_UNDEFINED) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1036 int code = evt.getKeyCode(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1037 if (code == KeyEvent.VK_CONTROL || code == KeyEvent.VK_SHIFT |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1038 || code == KeyEvent.VK_META || code == KeyEvent.VK_ALT) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1039 return; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1040 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1041 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1042 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1043 // Key press or key release? |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1044 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1045 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1046 boolean down = (evt.getID() == KeyEvent.KEY_PRESSED); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1047 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1048 int key; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1049 if (evt.isActionKey()) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1050 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1051 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1052 // An action key should be one of the following. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1053 // If not then just ignore the event. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1054 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1055 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1056 switch (evt.getKeyCode()) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1057 case KeyEvent.VK_HOME: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1058 key = 0xff50; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1059 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1060 case KeyEvent.VK_LEFT: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1061 key = 0xff51; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1062 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1063 case KeyEvent.VK_UP: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1064 key = 0xff52; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1065 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1066 case KeyEvent.VK_RIGHT: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1067 key = 0xff53; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1068 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1069 case KeyEvent.VK_DOWN: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1070 key = 0xff54; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1071 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1072 case KeyEvent.VK_PAGE_UP: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1073 key = 0xff55; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1074 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1075 case KeyEvent.VK_PAGE_DOWN: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1076 key = 0xff56; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1077 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1078 case KeyEvent.VK_END: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1079 key = 0xff57; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1080 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1081 case KeyEvent.VK_INSERT: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1082 key = 0xff63; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1083 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1084 case KeyEvent.VK_F1: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1085 key = 0xffbe; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1086 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1087 case KeyEvent.VK_F2: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1088 key = 0xffbf; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1089 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1090 case KeyEvent.VK_F3: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1091 key = 0xffc0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1092 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1093 case KeyEvent.VK_F4: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1094 key = 0xffc1; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1095 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1096 case KeyEvent.VK_F5: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1097 key = 0xffc2; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1098 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1099 case KeyEvent.VK_F6: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1100 key = 0xffc3; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1101 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1102 case KeyEvent.VK_F7: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1103 key = 0xffc4; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1104 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1105 case KeyEvent.VK_F8: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1106 key = 0xffc5; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1107 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1108 case KeyEvent.VK_F9: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1109 key = 0xffc6; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1110 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1111 case KeyEvent.VK_F10: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1112 key = 0xffc7; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1113 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1114 case KeyEvent.VK_F11: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1115 key = 0xffc8; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1116 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1117 case KeyEvent.VK_F12: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1118 key = 0xffc9; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1119 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1120 default: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1121 return; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1122 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1123 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1124 } else { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1125 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1126 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1127 // A "normal" key press. Ordinary ASCII characters go straight |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1128 // through. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1129 // For CTRL-<letter>, CTRL is sent separately so just send <letter>. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1130 // Backspace, tab, return, escape and delete have special keysyms. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1131 // Anything else we ignore. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1132 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1133 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1134 key = keyChar; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1135 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1136 if (key < 0x20) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1137 if (evt.isControlDown()) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1138 key += 0x60; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1139 } else { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1140 switch (key) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1141 case KeyEvent.VK_BACK_SPACE: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1142 key = 0xff08; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1143 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1144 case KeyEvent.VK_TAB: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1145 key = 0xff09; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1146 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1147 case KeyEvent.VK_ENTER: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1148 key = 0xff0d; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1149 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1150 case KeyEvent.VK_ESCAPE: |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1151 key = 0xff1b; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1152 break; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1153 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1154 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1155 } else if (key == 0x7f) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1156 // Delete |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1157 key = 0xffff; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1158 } else if (key > 0xff) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1159 // JDK1.1 on X incorrectly passes some keysyms straight through, |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1160 // so we do too. JDK1.1.4 seems to have fixed this. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1161 // The keysyms passed are 0xff00 .. XK_BackSpace .. XK_Delete |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1162 // Also, we pass through foreign currency keysyms |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1163 // (0x20a0..0x20af). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1164 if ((key < 0xff00 || key > 0xffff) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1165 && !(key >= 0x20a0 && key <= 0x20af)) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1166 return; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1167 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1168 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1169 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1170 // Fake keyPresses for keys that only generates keyRelease events |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1171 if ((key == 0xe5) || (key == 0xc5) || // XK_aring / XK_Aring |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1172 (key == 0xe4) || (key == 0xc4) || // XK_adiaeresis / |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1173 // XK_Adiaeresis |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1174 (key == 0xf6) || (key == 0xd6) || // XK_odiaeresis / |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1175 // XK_Odiaeresis |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1176 (key == 0xa7) || (key == 0xbd) || // XK_section / XK_onehalf |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1177 (key == 0xa3)) { // XK_sterling |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1178 // Make sure we do not send keypress events twice on platforms |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1179 // with correct JVMs (those that actually report KeyPress for all |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1180 // keys) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1181 if (down) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1182 brokenKeyPressed = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1183 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1184 if (!down && !brokenKeyPressed) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1185 // We've got a release event for this key, but haven't received |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1186 // a press. Fake it. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1187 eventBufLen = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1188 writeModifierKeyEvents(evt.getModifiers()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1189 writeKeyEvent(key, true); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1190 os.write(eventBuf, 0, eventBufLen); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1191 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1192 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1193 if (!down) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1194 brokenKeyPressed = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1195 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1196 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1197 eventBufLen = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1198 writeModifierKeyEvents(evt.getModifiers()); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1199 writeKeyEvent(key, down); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1200 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1201 // Always release all modifiers after an "up" event |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1202 if (!down) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1203 writeModifierKeyEvents(0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1204 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1205 //os.write(eventBuf, 0, eventBufLen); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1206 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1207 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1208 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1209 // Add a raw key event with the given X keysym to eventBuf. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1210 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1211 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1212 void writeKeyEvent(int keysym, boolean down) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1213 eventBuf[eventBufLen++] = (byte) KeyboardEvent; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1214 eventBuf[eventBufLen++] = (byte) (down ? 1 : 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1215 eventBuf[eventBufLen++] = (byte) 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1216 eventBuf[eventBufLen++] = (byte) 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1217 eventBuf[eventBufLen++] = (byte) ((keysym >> 24) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1218 eventBuf[eventBufLen++] = (byte) ((keysym >> 16) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1219 eventBuf[eventBufLen++] = (byte) ((keysym >> 8) & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1220 eventBuf[eventBufLen++] = (byte) (keysym & 0xff); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1221 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1222 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1223 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1224 // Write key events to set the correct modifier state. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1225 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1226 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1227 int oldModifiers = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1228 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1229 void writeModifierKeyEvents(int newModifiers) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1230 if ((newModifiers & CTRL_MASK) != (oldModifiers & CTRL_MASK)) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1231 writeKeyEvent(0xffe3, (newModifiers & CTRL_MASK) != 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1232 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1233 if ((newModifiers & SHIFT_MASK) != (oldModifiers & SHIFT_MASK)) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1234 writeKeyEvent(0xffe1, (newModifiers & SHIFT_MASK) != 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1235 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1236 if ((newModifiers & META_MASK) != (oldModifiers & META_MASK)) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1237 writeKeyEvent(0xffe7, (newModifiers & META_MASK) != 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1238 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1239 if ((newModifiers & ALT_MASK) != (oldModifiers & ALT_MASK)) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1240 writeKeyEvent(0xffe9, (newModifiers & ALT_MASK) != 0); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1241 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1242 oldModifiers = newModifiers; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1243 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1244 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1245 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1246 // Compress and write the data into the recorded session file. This |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1247 // method assumes the recording is on (rec != null). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1248 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1249 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1250 void recordCompressedData(byte[] data, int off, int len) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1251 Deflater deflater = new Deflater(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1252 deflater.setInput(data, off, len); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1253 int bufSize = len + len / 100 + 12; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1254 byte[] buf = new byte[bufSize]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1255 deflater.finish(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1256 int compressedSize = deflater.deflate(buf); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1257 recordCompactLen(compressedSize); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1258 rec.write(buf, 0, compressedSize); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1259 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1260 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1261 void recordCompressedData(byte[] data) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1262 recordCompressedData(data, 0, data.length); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1263 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1264 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1265 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1266 // Write an integer in compact representation (1..3 bytes) into the |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1267 // recorded session file. This method assumes the recording is on |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1268 // (rec != null). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1269 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1270 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1271 void recordCompactLen(int len) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1272 byte[] buf = new byte[3]; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1273 int bytes = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1274 buf[bytes++] = (byte) (len & 0x7F); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1275 if (len > 0x7F) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1276 buf[bytes - 1] |= 0x80; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1277 buf[bytes++] = (byte) (len >> 7 & 0x7F); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1278 if (len > 0x3FFF) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1279 buf[bytes - 1] |= 0x80; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1280 buf[bytes++] = (byte) (len >> 14 & 0xFF); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1281 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1282 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1283 rec.write(buf, 0, bytes); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1284 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1285 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1286 public void startTiming() { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1287 timing = true; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1288 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1289 // Carry over up to 1s worth of previous rate for smoothing. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1290 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1291 if (timeWaitedIn100us > 10000) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1292 timedKbits = timedKbits * 10000 / timeWaitedIn100us; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1293 timeWaitedIn100us = 10000; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1294 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1295 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1296 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1297 public void stopTiming() { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1298 timing = false; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1299 if (timeWaitedIn100us < timedKbits / 2) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1300 timeWaitedIn100us = timedKbits / 2; // upper limit 20Mbit/s |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1301 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1302 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1303 public long kbitsPerSecond() { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1304 return timedKbits * 10000 / timeWaitedIn100us; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1305 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1306 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1307 public long timeWaited() { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1308 return timeWaitedIn100us; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1309 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1310 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1311 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1312 // Methods for reading data via our DataInputStream member variable (is). |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1313 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1314 // In addition to reading data, the readFully() methods updates variables |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1315 // used to estimate data throughput. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1316 // |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1317 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1318 public void readFully(byte b[]) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1319 readFully(b, 0, b.length); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1320 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1321 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1322 public void readFully(byte b[], int off, int len) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1323 long before = 0; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1324 if (timing) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1325 before = System.currentTimeMillis(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1326 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1327 is.readFully(b, off, len); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1328 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1329 if (timing) { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1330 long after = System.currentTimeMillis(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1331 long newTimeWaited = (after - before) * 10; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1332 int newKbits = len * 8 / 1000; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1333 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1334 // limit rate to between 10kbit/s and 40Mbit/s |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1335 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1336 if (newTimeWaited > newKbits * 1000) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1337 newTimeWaited = newKbits * 1000; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1338 if (newTimeWaited < newKbits / 4) |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1339 newTimeWaited = newKbits / 4; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1340 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1341 timeWaitedIn100us += newTimeWaited; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1342 timedKbits += newKbits; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1343 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1344 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1345 numBytesRead += len; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1346 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1347 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1348 final int available() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1349 return is.available(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1350 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1351 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1352 // FIXME: DataInputStream::skipBytes() is not guaranteed to skip |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1353 // exactly n bytes. Probably we don't want to use this method. |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1354 final int skipBytes(int n) throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1355 int r = is.skipBytes(n); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1356 numBytesRead += r; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1357 return r; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1358 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1359 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1360 final int readU8() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1361 int r = is.readUnsignedByte(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1362 numBytesRead++; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1363 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1364 return r; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1365 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1366 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1367 final int readU16() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1368 int r = is.readUnsignedShort(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1369 numBytesRead += 2; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1370 return r; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1371 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1372 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1373 final int readU32() throws IOException { |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1374 int r = is.readInt(); |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1375 numBytesRead += 4; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1376 return r; |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1377 } |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1378 |
750ecaa1e1b9
add echoClient.java and waitreply.java. modify MyRfbProto.java
e085711
parents:
diff
changeset
|
1379 } |