251 {
252 BookmarkBase.ScreenSettings screenSettings = bookmark.getActiveScreenSettings();
253 BookmarkBase.AdvancedSettings advanced = bookmark.getAdvancedSettings();
254 BookmarkBase.DebugSettings debug = bookmark.getDebugSettings();
255
256 String arg;
257 ArrayList<String> args = new ArrayList<>();
258
259 args.add(TAG);
260 args.add("/gdi:sw");
261
262 final String clientName = ApplicationSettingsActivity.getClientName(context);
263 if (!clientName.isEmpty())
264 {
265 args.add("/client-hostname:" + clientName);
266 }
267 String certName = "";
268 if (bookmark.getType() != BookmarkBase.TYPE_MANUAL)
269 {
270 return false;
271 }
272
273 int port = bookmark.getPort();
274 String hostname = bookmark.getHostname();
275
276 args.add("/v:" + hostname);
277 args.add("/port:" + port);
278
279 final int level = advanced.getTlsSecLevel();
280 List<String> tls = new ArrayList<>();
281
282 if (level >= 0)
283 {
284 tls.add("seclevel:" + level);
285 }
286
287 final int tlsMinLevel = advanced.getTlsMinLevel();
288 if (tlsMinLevel >= 0)
289 {
290 tls.add("enforce:" + tlsMinLevel);
291 }
292
293 if (!tls.isEmpty())
294 {
295 StringBuilder sb = new StringBuilder();
296 for (String s : tls)
297 {
298 if (sb.length() > 0)
299 {
300 sb.append(',');
301 }
302 sb.append(s);
303 }
304 args.add("/tls:" + sb);
305 }
306
307 arg = bookmark.getUsername();
308 if (!arg.isEmpty())
309 {
310 args.add("/u:" + arg);
311 }
312 arg = bookmark.getDomain();
313 if (!arg.isEmpty())
314 {
315 args.add("/d:" + arg);
316 }
317 arg = bookmark.getPassword();
318 if (!arg.isEmpty())
319 {
320 args.add("/p:" + arg);
321 }
322
323 args.add(String.format(java.util.Locale.US, "/size:%dx%d", screenSettings.getWidth(),
324 screenSettings.getHeight()));
325 args.add("/bpp:" + screenSettings.getColors());
326
327 if (screenSettings.isCustomScale())
328 {
329 args.add("/scale-desktop:" + screenSettings.getScaleDesktop());
330 args.add("/scale-device:" + screenSettings.getScaleDevice());
331 }
332 else
333 {
334 args.add("/scale:" + screenSettings.getScalePreset());
335 }
336
337 if (advanced.getConsoleMode())
338 {
339 args.add("/admin");
340 }
341
342 if (advanced.getVmConnectMode())
343 {
344 String guid = advanced.getVmConnectGuid();
345 if (!guid.isEmpty())
346 args.add("/vmconnect:" + guid);
347 else
348 args.add("/vmconnect");
349 }
350
351 switch (advanced.getSecurity())
352 {
353 case 3:
354 args.add("/sec:nla");
355 break;
356 case 2:
357 args.add("/sec:tls");
358 break;
359 case 1:
360 args.add("/sec:rdp");
361 break;
362 default:
363 break;
364 }
365
366 if (!certName.isEmpty())
367 {
368 args.add("/cert-name:" + certName);
369 }
370
371 BookmarkBase.PerformanceFlags flags = bookmark.getActivePerformanceFlags();
372 if (flags.getRemoteFX())
373 {
374 args.add("/rfx");
375 args.add("/network:auto");
376 }
377
378 if (flags.getGfx())
379 {
380 args.add("/gfx");
381 args.add("/network:auto");
382 }
383
384 if (flags.getH264() && mHasH264)
385 {
386 args.add("/gfx:AVC444");
387 args.add("/network:auto");
388 }
389
390 args.add(addFlag("wallpaper", flags.getWallpaper()));
391 args.add(addFlag("window-drag", flags.getFullWindowDrag()));
392 args.add(addFlag("menu-anims", flags.getMenuAnimations()));
393 args.add(addFlag("themes", flags.getTheming()));
394 args.add(addFlag("fonts", flags.getFontSmoothing()));
395 args.add(addFlag("aero", flags.getDesktopComposition()));
396
397 if (!advanced.getRemoteProgram().isEmpty())
398 {
399 args.add("/app:program:" + advanced.getRemoteProgram());
400 if (!advanced.getWorkDir().isEmpty())
401 args.add("/app:workdir:" + advanced.getWorkDir());
402 }
403 else
404 {
405 if (!advanced.getAlternateShell().isEmpty())
406 args.add("/shell:" + advanced.getAlternateShell());
407 if (!advanced.getWorkDir().isEmpty())
408 args.add("/shell-dir:" + advanced.getWorkDir());
409 }
410
411 args.add(addFlag("async-channels", debug.getAsyncChannel()));
412 args.add(addFlag("async-update", debug.getAsyncUpdate()));
413
414 if (advanced.getRedirectSDCard())
415 {
416 String path = android.os.Environment.getExternalStorageDirectory().getPath();
417 args.add("/drive:sdcard," + path);
418 }
419
420 String info = advanced.getLoadBalanceInfo();
421 if (!info.isEmpty())
422 {
423 args.add("/load-balance-info:" + info);
424 }
425 args.add("/clipboard");
426 args.add("/disp");
427
428 if (advanced.getRedirectPrinter())
429 args.add("/printer:aFreeRDP Print,Microsoft Print to PDF,default");
430
431
432 if (bookmark.getType() == BookmarkBase.TYPE_MANUAL && bookmark.getEnableGatewaySettings())
433 {
434 BookmarkBase.GatewaySettings gateway = bookmark.getGatewaySettings();
435
436 StringBuilder carg = new StringBuilder();
437 carg.append(String.format(java.util.Locale.US, "/gateway:g:%s:%d",
438 gateway.getHostname(), gateway.getPort()));
439
440 arg = gateway.getUsername();
441 if (!arg.isEmpty())
442 {
443 carg.append(",u:" + arg);
444 }
445 arg = gateway.getDomain();
446 if (!arg.isEmpty())
447 {
448 carg.append(",d:" + arg);
449 }
450 arg = gateway.getPassword();
451 if (!arg.isEmpty())
452 {
453 carg.append(",p:" + arg);
454 }
455 args.add(carg.toString());
456 }
457
458
459
460
461 args.add("/audio-mode:" + advanced.getRedirectSound());
462 if (advanced.getRedirectSound() == 0)
463 {
464 args.add("/sound");
465 }
466
467 if (advanced.getRedirectMicrophone())
468 {
469 args.add("/microphone");
470 }
471
472 if (advanced.getRedirectCamera() && mHasCameraRedirection)
473 {
474 args.add("/dvc:rdpecam");
475 }
476
477 args.add("/kbd:unicode:on");
478 args.add("/cert:ignore");
479 args.add("/log-level:" + debug.getDebugLevel());
480 String[] arrayArgs = args.toArray(new String[0]);
481 return freerdp_parse_arguments(inst, arrayArgs);
482 }