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