230 {
231 BookmarkBase.ScreenSettings screenSettings = bookmark.getActiveScreenSettings();
232 BookmarkBase.AdvancedSettings advanced = bookmark.getAdvancedSettings();
233 BookmarkBase.DebugSettings debug = bookmark.getDebugSettings();
234
235 String arg;
236 ArrayList<String> args = new ArrayList<>();
237
238 args.add(TAG);
239 args.add("/gdi:sw");
240
241 final String clientName = ApplicationSettingsActivity.getClientName(context);
242 if (!clientName.isEmpty())
243 {
244 args.add("/client-hostname:" + clientName);
245 }
246 String certName = "";
247 if (bookmark.getType() != BookmarkBase.TYPE_MANUAL)
248 {
249 return false;
250 }
251
252 int port = bookmark.getPort();
253 String hostname = bookmark.getHostname();
254
255 args.add("/v:" + hostname);
256 args.add("/port:" + port);
257
258 final int level = advanced.getTlsSecLevel();
259 List<String> tls = new ArrayList<>();
260
261 if (level >= 0)
262 {
263 tls.add("seclevel:" + level);
264 }
265
266 final int tlsMinLevel = advanced.getTlsMinLevel();
267 if (tlsMinLevel >= 0)
268 {
269 tls.add("enforce:" + tlsMinLevel);
270 }
271
272 if (!tls.isEmpty())
273 {
274 StringBuilder sb = new StringBuilder();
275 for (String s : tls)
276 {
277 if (sb.length() > 0)
278 {
279 sb.append(',');
280 }
281 sb.append(s);
282 }
283 args.add("/tls:" + sb);
284 }
285
286 arg = bookmark.getUsername();
287 if (!arg.isEmpty())
288 {
289 args.add("/u:" + arg);
290 }
291 arg = bookmark.getDomain();
292 if (!arg.isEmpty())
293 {
294 args.add("/d:" + arg);
295 }
296 arg = bookmark.getPassword();
297 if (!arg.isEmpty())
298 {
299 args.add("/p:" + arg);
300 }
301
302 args.add(
303 String.format("/size:%dx%d", screenSettings.getWidth(), screenSettings.getHeight()));
304 args.add("/bpp:" + screenSettings.getColors());
305
306 if (advanced.getConsoleMode())
307 {
308 args.add("/admin");
309 }
310
311 switch (advanced.getSecurity())
312 {
313 case 3:
314 args.add("/sec:nla");
315 break;
316 case 2:
317 args.add("/sec:tls");
318 break;
319 case 1:
320 args.add("/sec:rdp");
321 break;
322 default:
323 break;
324 }
325
326 if (!certName.isEmpty())
327 {
328 args.add("/cert-name:" + certName);
329 }
330
331 BookmarkBase.PerformanceFlags flags = bookmark.getActivePerformanceFlags();
332 if (flags.getRemoteFX())
333 {
334 args.add("/rfx");
335 args.add("/network:auto");
336 }
337
338 if (flags.getGfx())
339 {
340 args.add("/gfx");
341 args.add("/network:auto");
342 }
343
344 if (flags.getH264() && mHasH264)
345 {
346 args.add("/gfx:AVC444");
347 args.add("/network:auto");
348 }
349
350 args.add(addFlag("wallpaper", flags.getWallpaper()));
351 args.add(addFlag("window-drag", flags.getFullWindowDrag()));
352 args.add(addFlag("menu-anims", flags.getMenuAnimations()));
353 args.add(addFlag("themes", flags.getTheming()));
354 args.add(addFlag("fonts", flags.getFontSmoothing()));
355 args.add(addFlag("aero", flags.getDesktopComposition()));
356
357 if (!advanced.getRemoteProgram().isEmpty())
358 {
359 args.add("/shell:" + advanced.getRemoteProgram());
360 }
361
362 if (!advanced.getWorkDir().isEmpty())
363 {
364 args.add("/shell-dir:" + advanced.getWorkDir());
365 }
366
367 args.add(addFlag("async-channels", debug.getAsyncChannel()));
368 args.add(addFlag("async-update", debug.getAsyncUpdate()));
369
370 if (advanced.getRedirectSDCard())
371 {
372 String path = android.os.Environment.getExternalStorageDirectory().getPath();
373 args.add("/drive:sdcard," + path);
374 }
375
376 args.add("/clipboard");
377
378
379 if (bookmark.getType() == BookmarkBase.TYPE_MANUAL && bookmark.getEnableGatewaySettings())
380 {
381 BookmarkBase.GatewaySettings gateway = bookmark.getGatewaySettings();
382
383 StringBuilder carg = new StringBuilder();
384 carg.append(
385 String.format("/gateway:g:%s:%d", gateway.getHostname(), gateway.getPort()));
386
387 arg = gateway.getUsername();
388 if (!arg.isEmpty())
389 {
390 carg.append(",u:" + arg);
391 }
392 arg = gateway.getDomain();
393 if (!arg.isEmpty())
394 {
395 carg.append(",d:" + arg);
396 }
397 arg = gateway.getPassword();
398 if (!arg.isEmpty())
399 {
400 carg.append(",p:" + arg);
401 }
402 args.add(carg.toString());
403 }
404
405
406
407
408 args.add("/audio-mode:" + advanced.getRedirectSound());
409 if (advanced.getRedirectSound() == 0)
410 {
411 args.add("/sound");
412 }
413
414 if (advanced.getRedirectMicrophone())
415 {
416 args.add("/microphone");
417 }
418
419 args.add("/kbd:unicode:on");
420 args.add("/cert:ignore");
421 args.add("/log-level:" + debug.getDebugLevel());
422 String[] arrayArgs = args.toArray(new String[0]);
423 return freerdp_parse_arguments(inst, arrayArgs);
424 }