annotate src/viewer_swing/java/com/glavsoft/viewer/swing/ParametersHandler.java @ 0:daa24f8a557b

TightVNC original
author YU
date Thu, 11 Sep 2014 07:30:03 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
daa24f8a557b TightVNC original
YU
parents:
diff changeset
1 // Copyright (C) 2010, 2011, 2012, 2013 GlavSoft LLC.
daa24f8a557b TightVNC original
YU
parents:
diff changeset
2 // All rights reserved.
daa24f8a557b TightVNC original
YU
parents:
diff changeset
3 //
daa24f8a557b TightVNC original
YU
parents:
diff changeset
4 //-------------------------------------------------------------------------
daa24f8a557b TightVNC original
YU
parents:
diff changeset
5 // This file is part of the TightVNC software. Please visit our Web site:
daa24f8a557b TightVNC original
YU
parents:
diff changeset
6 //
daa24f8a557b TightVNC original
YU
parents:
diff changeset
7 // http://www.tightvnc.com/
daa24f8a557b TightVNC original
YU
parents:
diff changeset
8 //
daa24f8a557b TightVNC original
YU
parents:
diff changeset
9 // This program is free software; you can redistribute it and/or modify
daa24f8a557b TightVNC original
YU
parents:
diff changeset
10 // it under the terms of the GNU General Public License as published by
daa24f8a557b TightVNC original
YU
parents:
diff changeset
11 // the Free Software Foundation; either version 2 of the License, or
daa24f8a557b TightVNC original
YU
parents:
diff changeset
12 // (at your option) any later version.
daa24f8a557b TightVNC original
YU
parents:
diff changeset
13 //
daa24f8a557b TightVNC original
YU
parents:
diff changeset
14 // This program is distributed in the hope that it will be useful,
daa24f8a557b TightVNC original
YU
parents:
diff changeset
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
daa24f8a557b TightVNC original
YU
parents:
diff changeset
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
daa24f8a557b TightVNC original
YU
parents:
diff changeset
17 // GNU General Public License for more details.
daa24f8a557b TightVNC original
YU
parents:
diff changeset
18 //
daa24f8a557b TightVNC original
YU
parents:
diff changeset
19 // You should have received a copy of the GNU General Public License along
daa24f8a557b TightVNC original
YU
parents:
diff changeset
20 // with this program; if not, write to the Free Software Foundation, Inc.,
daa24f8a557b TightVNC original
YU
parents:
diff changeset
21 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
daa24f8a557b TightVNC original
YU
parents:
diff changeset
22 //-------------------------------------------------------------------------
daa24f8a557b TightVNC original
YU
parents:
diff changeset
23 //
daa24f8a557b TightVNC original
YU
parents:
diff changeset
24
daa24f8a557b TightVNC original
YU
parents:
diff changeset
25 package com.glavsoft.viewer.swing;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
26
daa24f8a557b TightVNC original
YU
parents:
diff changeset
27 import com.glavsoft.rfb.encoding.EncodingType;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
28 import com.glavsoft.rfb.protocol.LocalPointer;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
29 import com.glavsoft.rfb.protocol.ProtocolSettings;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
30 import com.glavsoft.utils.Strings;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
31 import com.glavsoft.viewer.UiSettings;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
32 import com.glavsoft.viewer.cli.Parser;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
33
daa24f8a557b TightVNC original
YU
parents:
diff changeset
34 import javax.swing.*;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
35
daa24f8a557b TightVNC original
YU
parents:
diff changeset
36 public class ParametersHandler {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
37 public static final String ARG_LOCAL_POINTER = "LocalPointer";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
38 public static final String ARG_SCALING_FACTOR = "ScalingFactor";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
39 public static final String ARG_FULL_SCREEN = "FullScreen";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
40 public static final String ARG_COLOR_DEPTH = "ColorDepth";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
41 public static final String ARG_JPEG_IMAGE_QUALITY = "JpegImageQuality";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
42 public static final String ARG_COMPRESSION_LEVEL = "CompressionLevel";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
43 public static final String ARG_ENCODING = "Encoding";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
44 public static final String ARG_SHARE_DESKTOP = "ShareDesktop";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
45 public static final String ARG_ALLOW_COPY_RECT = "AllowCopyRect";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
46 public static final String ARG_VIEW_ONLY = "ViewOnly";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
47 public static final String ARG_SHOW_CONTROLS = "ShowControls";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
48 public static final String ARG_OPEN_NEW_WINDOW = "OpenNewWindow";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
49 public static final String ARG_PASSWORD = "password";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
50 public static final String ARG_PORT = "port";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
51 public static final String ARG_HOST = "host";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
52 public static final String ARG_HELP = "help";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
53 public static final String ARG_VERBOSE = "v";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
54 public static final String ARG_VERBOSE_MORE = "vv";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
55 public static final String ARG_CONVERT_TO_ASCII = "ConvertToASCII";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
56 public static final String ARG_ALLOW_CLIPBOARD_TRANSFER = "AllowClipboardTransfer";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
57 public static final String ARG_REMOTE_CHARSET = "RemoteCharset";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
58 public static final String ARG_SSH_HOST = "sshHost";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
59 public static final String ARG_SSH_USER = "sshUser";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
60 public static final String ARG_SSH_PORT = "sshPort";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
61 public static final String ARG_ALLOW_APPLET_INTERACTIVE_CONNECTIONS = "AllowAppletInteractiveConnections";
daa24f8a557b TightVNC original
YU
parents:
diff changeset
62
daa24f8a557b TightVNC original
YU
parents:
diff changeset
63 public static boolean isSeparateFrame;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
64 public static boolean allowAppletInteractiveConnections;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
65
daa24f8a557b TightVNC original
YU
parents:
diff changeset
66 public static void completeParserOptions(Parser parser) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
67 parser.addOption(ARG_HELP, null, "Print this help.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
68 parser.addOption(ARG_HOST, "", "Server host name.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
69 parser.addOption(ARG_PORT, "0", "Port number.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
70 parser.addOption(ARG_PASSWORD, null, "Password to the server.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
71 parser.addOption(ARG_SHOW_CONTROLS, null, "Set to \"No\" if you want to get rid of that " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
72 "button panel at the top. Default: \"Yes\".");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
73 parser.addOption(ARG_VIEW_ONLY, null, "When set to \"Yes\", then all keyboard and mouse " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
74 "events in the desktop window will be silently ignored and will not be passed " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
75 "to the remote side. Default: \"No\".");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
76 parser.addOption(ARG_ALLOW_CLIPBOARD_TRANSFER, null, "When set to \"Yes\", transfer of clipboard contents is allowed. " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
77 "Default: \"Yes\".");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
78 parser.addOption(ARG_REMOTE_CHARSET, null, "Charset encoding is used on remote system. Use this option to specify character encoding will be used for encoding clipboard text content to. Default value: local system default character encoding. Set the value to 'standard' for using 'Latin-1' charset which is only specified by rfb standard for clipboard transfers.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
79 parser.addOption(ARG_SHARE_DESKTOP, null, "Share the connection with other clients " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
80 "on the same VNC server. The exact behaviour in each case depends on the server " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
81 "configuration. Default: \"Yes\".");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
82 parser.addOption(ARG_ALLOW_COPY_RECT, null, "The \"CopyRect\" encoding saves bandwidth " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
83 "and drawing time when parts of the remote screen are moving around. " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
84 "Most likely, you don't want to change this setting. Default: \"Yes\".");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
85 parser.addOption(ARG_ENCODING, null, "The preferred encoding. Possible values: \"Tight\", " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
86 "\"Hextile\", \"ZRLE\", and \"Raw\". Default: \"Tight\".");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
87 parser.addOption(ARG_COMPRESSION_LEVEL, null, "Use specified compression level for " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
88 "\"Tight\" and \"Zlib\" encodings. Values: 1-9. Level 1 uses minimum of CPU " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
89 "time on the server but achieves weak compression ratios. Level 9 offers best " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
90 "compression but may be slow.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
91 //noinspection ConstantConditions
daa24f8a557b TightVNC original
YU
parents:
diff changeset
92 parser.addOption(ARG_JPEG_IMAGE_QUALITY, null, "Use the specified image quality level " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
93 "in \"Tight\" encoding. Values: 1-9, Lossless. Default value: " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
94 (ProtocolSettings.DEFAULT_JPEG_QUALITY > 0 ?
daa24f8a557b TightVNC original
YU
parents:
diff changeset
95 String.valueOf(ProtocolSettings.DEFAULT_JPEG_QUALITY) :
daa24f8a557b TightVNC original
YU
parents:
diff changeset
96 "\"Lossless\"")
daa24f8a557b TightVNC original
YU
parents:
diff changeset
97 + ". To prevent server of using " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
98 "lossy JPEG compression in \"Tight\" encoding, use \"Lossless\" value here.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
99 parser.addOption(ARG_LOCAL_POINTER, null, "Possible values: on/yes/true (draw pointer locally), off/no/false (let server draw pointer), hide). " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
100 "Default: \"On\".");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
101 parser.addOption(ARG_CONVERT_TO_ASCII, null, "Whether to convert keyboard input to ASCII ignoring locale. Possible values: yes/true, no/false). " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
102 "Default: \"No\".");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
103 parser.addOption(ARG_COLOR_DEPTH, null, "Bits per pixel color format. Possible values: 3 (for 8 colors), 6 (64 colors), 8 (256 colors), 16 (65 536 colors), 24 (16 777 216 colors), 32 (same as 24).");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
104 parser.addOption(ARG_SCALING_FACTOR, null, "Scale local representation of the remote desktop on startup. " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
105 "The value is interpreted as scaling factor in percents. The default value of 100% " +
daa24f8a557b TightVNC original
YU
parents:
diff changeset
106 "corresponds to the original framebuffer size.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
107 parser.addOption(ARG_FULL_SCREEN, null, "Full screen mode. Possible values: yes/true and no/false. Default: no.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
108 parser.addOption(ARG_SSH_HOST, "", "SSH host name.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
109 parser.addOption(ARG_SSH_PORT, "0",
daa24f8a557b TightVNC original
YU
parents:
diff changeset
110 "SSH port number. When empty, standard SSH port number (" + ConnectionParams.DEFAULT_SSH_PORT + ") is used.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
111 parser.addOption(ARG_SSH_USER, "", "SSH user name.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
112 parser.addOption(ARG_ALLOW_APPLET_INTERACTIVE_CONNECTIONS, null, "Allow applet interactively connect to other hosts then in HostName param or hostbase. Possible values: yes/true, no/false. Default: false.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
113 parser.addOption(ARG_VERBOSE, null, "Verbose console output.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
114 parser.addOption(ARG_VERBOSE_MORE, null, "More verbose console output.");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
115
daa24f8a557b TightVNC original
YU
parents:
diff changeset
116 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
117
daa24f8a557b TightVNC original
YU
parents:
diff changeset
118 public static int completeSettingsFromCLI(final Parser parser, ConnectionParams connectionParams, ProtocolSettings rfbSettings, UiSettings uiSettings) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
119 int mask = completeSettings(
daa24f8a557b TightVNC original
YU
parents:
diff changeset
120 new ParamsRetriever() {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
121 @Override
daa24f8a557b TightVNC original
YU
parents:
diff changeset
122 public String getParamByName(String name) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
123 return parser.getValueFor(name);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
124 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
125 },
daa24f8a557b TightVNC original
YU
parents:
diff changeset
126 connectionParams, rfbSettings, uiSettings);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
127 // when hostName == a.b.c.d:3 where :3 is display num (X Window) we need add display num to port number
daa24f8a557b TightVNC original
YU
parents:
diff changeset
128 if ( ! Strings.isTrimmedEmpty(connectionParams.hostName)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
129 splitConnectionParams(connectionParams, connectionParams.hostName);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
130 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
131 if (parser.isSetPlainOptions()) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
132 splitConnectionParams(connectionParams, parser.getPlainOptionAt(0));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
133 if (parser.getPlainOptionsNumber() > 1) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
134 try {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
135 connectionParams.parseRfbPortNumber(parser.getPlainOptionAt(1));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
136 } catch (WrongParameterException e) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
137 //nop
daa24f8a557b TightVNC original
YU
parents:
diff changeset
138 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
139 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
140 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
141 return mask;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
142 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
143
daa24f8a557b TightVNC original
YU
parents:
diff changeset
144
daa24f8a557b TightVNC original
YU
parents:
diff changeset
145 /**
daa24f8a557b TightVNC original
YU
parents:
diff changeset
146 * Split host string into hostName + port number and set ConnectionParans.
daa24f8a557b TightVNC original
YU
parents:
diff changeset
147 * a.b.c.d:5000 -> hostName == a.b.c.d, portNumber == 5000
daa24f8a557b TightVNC original
YU
parents:
diff changeset
148 * a.b.c.d::5000 -> hostName == a.b.c.d, portNumber == 5000
daa24f8a557b TightVNC original
YU
parents:
diff changeset
149 */
daa24f8a557b TightVNC original
YU
parents:
diff changeset
150 public static void splitConnectionParams(final ConnectionParams connectionParams, String host) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
151 int indexOfColon = host.indexOf(':');
daa24f8a557b TightVNC original
YU
parents:
diff changeset
152 if (indexOfColon > 0) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
153 String[] splitted = host.split(":");
daa24f8a557b TightVNC original
YU
parents:
diff changeset
154 connectionParams.hostName = splitted[0];
daa24f8a557b TightVNC original
YU
parents:
diff changeset
155 if (splitted.length > 1) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
156 try {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
157 connectionParams.parseRfbPortNumber(splitted[splitted.length - 1]);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
158 } catch (WrongParameterException e) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
159 //nop
daa24f8a557b TightVNC original
YU
parents:
diff changeset
160 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
161 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
162 } else {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
163 connectionParams.hostName = host;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
164 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
165 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
166
daa24f8a557b TightVNC original
YU
parents:
diff changeset
167 interface ParamsRetriever {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
168 String getParamByName(String name);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
169 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
170 private static int completeSettings(ParamsRetriever pr, ConnectionParams connectionParams, ProtocolSettings rfbSettings, UiSettings uiSettings) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
171 String hostName = pr.getParamByName(ARG_HOST);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
172 String portNumber = pr.getParamByName(ARG_PORT);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
173 String showControlsParam = pr.getParamByName(ARG_SHOW_CONTROLS);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
174 String viewOnlyParam = pr.getParamByName(ARG_VIEW_ONLY);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
175 String allowClipboardTransfer = pr.getParamByName(ARG_ALLOW_CLIPBOARD_TRANSFER);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
176 String remoteCharsetName = pr.getParamByName(ARG_REMOTE_CHARSET);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
177 String allowCopyRectParam = pr.getParamByName(ARG_ALLOW_COPY_RECT);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
178 String shareDesktopParam = pr.getParamByName(ARG_SHARE_DESKTOP);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
179 String encodingParam = pr.getParamByName(ARG_ENCODING);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
180 String compressionLevelParam = pr.getParamByName(ARG_COMPRESSION_LEVEL);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
181 String jpegQualityParam = pr.getParamByName(ARG_JPEG_IMAGE_QUALITY);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
182 String colorDepthParam = pr.getParamByName(ARG_COLOR_DEPTH);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
183 String scaleFactorParam = pr.getParamByName(ARG_SCALING_FACTOR);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
184 String fullScreenParam = pr.getParamByName(ARG_FULL_SCREEN);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
185 String localPointerParam = pr.getParamByName(ARG_LOCAL_POINTER);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
186 String convertToAsciiParam = pr.getParamByName(ARG_CONVERT_TO_ASCII);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
187 String sshHostNameParam = pr.getParamByName(ARG_SSH_HOST);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
188 String sshPortNumberParam = pr.getParamByName(ARG_SSH_PORT);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
189 String sshUserNameParam = pr.getParamByName(ARG_SSH_USER);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
190
daa24f8a557b TightVNC original
YU
parents:
diff changeset
191 connectionParams.hostName = hostName;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
192 try {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
193 connectionParams.parseRfbPortNumber(portNumber);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
194 } catch (WrongParameterException e) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
195 //nop
daa24f8a557b TightVNC original
YU
parents:
diff changeset
196 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
197
daa24f8a557b TightVNC original
YU
parents:
diff changeset
198 connectionParams.sshHostName = sshHostNameParam;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
199 connectionParams.setUseSsh( ! Strings.isTrimmedEmpty(sshHostNameParam));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
200 connectionParams.parseSshPortNumber(sshPortNumberParam);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
201 connectionParams.sshUserName = sshUserNameParam;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
202
daa24f8a557b TightVNC original
YU
parents:
diff changeset
203 int rfbMask = 0;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
204 uiSettings.showControls = parseBooleanOrDefault(showControlsParam, true);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
205 allowAppletInteractiveConnections =
daa24f8a557b TightVNC original
YU
parents:
diff changeset
206 parseBooleanOrDefault(pr.getParamByName(ARG_ALLOW_APPLET_INTERACTIVE_CONNECTIONS), false);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
207 rfbSettings.setViewOnly(parseBooleanOrDefault(viewOnlyParam, false));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
208 if (isGiven(viewOnlyParam)) rfbMask |= ProtocolSettings.CHANGED_VIEW_ONLY;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
209 rfbSettings.setAllowClipboardTransfer(parseBooleanOrDefault(allowClipboardTransfer, true));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
210 if (isGiven(allowClipboardTransfer)) rfbMask |= ProtocolSettings.CHANGED_ALLOW_CLIPBOARD_TRANSFER;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
211 rfbSettings.setRemoteCharsetName(remoteCharsetName);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
212 rfbSettings.setAllowCopyRect(parseBooleanOrDefault(allowCopyRectParam, true));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
213 if (isGiven(allowCopyRectParam)) rfbMask |= ProtocolSettings.CHANGED_ALLOW_COPY_RECT;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
214 rfbSettings.setSharedFlag(parseBooleanOrDefault(shareDesktopParam, true));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
215 if (isGiven(shareDesktopParam)) rfbMask |= ProtocolSettings.CHANGED_SHARED;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
216 rfbSettings.setConvertToAscii(parseBooleanOrDefault(convertToAsciiParam, false));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
217 if (isGiven(convertToAsciiParam)) rfbMask |= ProtocolSettings.CHANGED_CONVERT_TO_ASCII;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
218 if (EncodingType.TIGHT.getName().equalsIgnoreCase(encodingParam)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
219 rfbSettings.setPreferredEncoding(EncodingType.TIGHT);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
220 rfbMask |= ProtocolSettings.CHANGED_ENCODINGS;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
221 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
222 if (EncodingType.HEXTILE.getName().equalsIgnoreCase(encodingParam)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
223 rfbSettings.setPreferredEncoding(EncodingType.HEXTILE);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
224 rfbMask |= ProtocolSettings.CHANGED_ENCODINGS;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
225 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
226 if (EncodingType.ZRLE.getName().equalsIgnoreCase(encodingParam)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
227 rfbSettings.setPreferredEncoding(EncodingType.ZRLE);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
228 rfbMask |= ProtocolSettings.CHANGED_ENCODINGS;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
229 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
230 if (EncodingType.RAW_ENCODING.getName().equalsIgnoreCase(encodingParam)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
231 rfbSettings.setPreferredEncoding(EncodingType.RAW_ENCODING);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
232 rfbMask |= ProtocolSettings.CHANGED_ENCODINGS;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
233 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
234 try {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
235 int compLevel = Integer.parseInt(compressionLevelParam);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
236 if (compLevel > 0 && compLevel <= 9) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
237 rfbSettings.setCompressionLevel(compLevel);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
238 rfbMask |= ProtocolSettings.CHANGED_COMPRESSION_LEVEL;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
239 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
240 } catch (NumberFormatException e) { /* nop */ }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
241 try {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
242 int jpegQuality = Integer.parseInt(jpegQualityParam);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
243 if (jpegQuality > 0 && jpegQuality <= 9) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
244 rfbSettings.setJpegQuality(jpegQuality);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
245 rfbMask |= ProtocolSettings.CHANGED_JPEG_QUALITY;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
246 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
247 } catch (NumberFormatException e) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
248 if ("lossless".equalsIgnoreCase(jpegQualityParam)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
249 rfbSettings.setJpegQuality( - Math.abs(rfbSettings.getJpegQuality()));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
250 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
251 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
252 try {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
253 int colorDepth = Integer.parseInt(colorDepthParam);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
254 rfbSettings.setColorDepth(colorDepth);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
255 rfbMask |= ProtocolSettings.CHANGED_COLOR_DEPTH;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
256 } catch (NumberFormatException e) { /* nop */ }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
257 int uiMask = 0;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
258 if (scaleFactorParam != null) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
259 try {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
260 int scaleFactor = Integer.parseInt(scaleFactorParam.replaceAll("\\D", ""));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
261 if (scaleFactor >= 10 && scaleFactor <= 200) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
262 uiSettings.setScalePercent(scaleFactor);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
263 uiMask |= UiSettings.CHANGED_SCALE_FACTOR;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
264 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
265 } catch (NumberFormatException e) { /* nop */ }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
266 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
267 uiSettings.setFullScreen(parseBooleanOrDefault(fullScreenParam, false));
daa24f8a557b TightVNC original
YU
parents:
diff changeset
268 if (isGiven(fullScreenParam)) uiMask |= UiSettings.CHANGED_FULL_SCREEN;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
269
daa24f8a557b TightVNC original
YU
parents:
diff changeset
270 if ("on".equalsIgnoreCase(localPointerParam) ||
daa24f8a557b TightVNC original
YU
parents:
diff changeset
271 "true".equalsIgnoreCase(localPointerParam) ||
daa24f8a557b TightVNC original
YU
parents:
diff changeset
272 "yes".equalsIgnoreCase(localPointerParam)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
273 rfbSettings.setMouseCursorTrack(LocalPointer.ON);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
274 rfbMask |= ProtocolSettings.CHANGED_MOUSE_CURSOR_TRACK;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
275 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
276 if ("off".equalsIgnoreCase(localPointerParam) ||
daa24f8a557b TightVNC original
YU
parents:
diff changeset
277 "no".equalsIgnoreCase(localPointerParam) ||
daa24f8a557b TightVNC original
YU
parents:
diff changeset
278 "false".equalsIgnoreCase(localPointerParam)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
279 rfbSettings.setMouseCursorTrack(LocalPointer.OFF);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
280 rfbMask |= ProtocolSettings.CHANGED_MOUSE_CURSOR_TRACK;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
281 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
282 if ("hide".equalsIgnoreCase(localPointerParam) ||
daa24f8a557b TightVNC original
YU
parents:
diff changeset
283 "hidden".equalsIgnoreCase(localPointerParam)) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
284 rfbSettings.setMouseCursorTrack(LocalPointer.HIDE);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
285 rfbMask |= ProtocolSettings.CHANGED_MOUSE_CURSOR_TRACK;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
286 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
287 return (uiMask << 16) | rfbMask;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
288 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
289
daa24f8a557b TightVNC original
YU
parents:
diff changeset
290 private static boolean isGiven(String param) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
291 return ! Strings.isTrimmedEmpty(param);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
292 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
293
daa24f8a557b TightVNC original
YU
parents:
diff changeset
294 static boolean parseBooleanOrDefault(String param, boolean defaultValue) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
295 return defaultValue ?
daa24f8a557b TightVNC original
YU
parents:
diff changeset
296 ! ("no".equalsIgnoreCase(param) || "false".equalsIgnoreCase(param)) :
daa24f8a557b TightVNC original
YU
parents:
diff changeset
297 "yes".equalsIgnoreCase(param) || "true".equalsIgnoreCase(param);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
298 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
299
daa24f8a557b TightVNC original
YU
parents:
diff changeset
300 public static int completeSettingsFromApplet(final JApplet applet,
daa24f8a557b TightVNC original
YU
parents:
diff changeset
301 ConnectionParams connectionParams, ProtocolSettings rfbSettings, UiSettings uiSettings) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
302 isSeparateFrame = parseBooleanOrDefault(applet.getParameter(ARG_OPEN_NEW_WINDOW), true);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
303 final int paramsMask = completeSettings(
daa24f8a557b TightVNC original
YU
parents:
diff changeset
304 new ParamsRetriever() {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
305 @Override
daa24f8a557b TightVNC original
YU
parents:
diff changeset
306 public String getParamByName(String name) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
307 return applet.getParameter(name);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
308 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
309 },
daa24f8a557b TightVNC original
YU
parents:
diff changeset
310 connectionParams, rfbSettings, uiSettings);
daa24f8a557b TightVNC original
YU
parents:
diff changeset
311 if ( ! allowAppletInteractiveConnections && connectionParams.isHostNameEmpty()) {
daa24f8a557b TightVNC original
YU
parents:
diff changeset
312 connectionParams.hostName = applet.getCodeBase().getHost();
daa24f8a557b TightVNC original
YU
parents:
diff changeset
313 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
314 return paramsMask;
daa24f8a557b TightVNC original
YU
parents:
diff changeset
315 }
daa24f8a557b TightVNC original
YU
parents:
diff changeset
316
daa24f8a557b TightVNC original
YU
parents:
diff changeset
317
daa24f8a557b TightVNC original
YU
parents:
diff changeset
318 }