package org.ovirt.engine.ui.common.uicommon;
import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpNative;
/**
* Class for generating an RDP descriptor and invoking native RDP client.
* This method of console invocation doesn't support automatic login.
*
*/
public class RdpNativeImpl extends AbstractRdp implements IRdpNative {
private static final String BASE_CONFIG_FILE =
"session bpp:i:32\n" + //$NON-NLS-1$
"winposstr:s:0,3,0,0,800,600\n" + //$NON-NLS-1$
"compression:i:1\n" + //$NON-NLS-1$
"keyboardhook:i:2\n" + //$NON-NLS-1$
"audiocapturemode:i:0\n" + //$NON-NLS-1$
"videoplaybackmode:i:1\n" + //$NON-NLS-1$
"connection type:i:2\n" + //$NON-NLS-1$
"displayconnectionbar:i:1\n" + //$NON-NLS-1$
"disable wallpaper:i:1\n" + //$NON-NLS-1$
"allow font smoothing:i:0\n" + //$NON-NLS-1$
"allow desktop composition:i:0\n" + //$NON-NLS-1$
"disable full window drag:i:1\n" + //$NON-NLS-1$
"disable menu anims:i:1\n" + //$NON-NLS-1$
"disable themes:i:0\n" + //$NON-NLS-1$
"disable cursor setting:i:0\n" + //$NON-NLS-1$
"bitmapcachepersistenable:i:1\n" + //$NON-NLS-1$
"audiomode:i:0\n" + //$NON-NLS-1$
"redirectcomports:i:0\n" + //$NON-NLS-1$
"redirectposdevices:i:0\n" + //$NON-NLS-1$
"redirectdirectx:i:1\n" + //$NON-NLS-1$
"autoreconnection enabled:i:1\n" + //$NON-NLS-1$
"prompt for credentials:i:1\n" + //$NON-NLS-1$
"negotiate security layer:i:1\n" + //$NON-NLS-1$
"remoteapplicationmode:i:0\n" + //$NON-NLS-1$
"alternate shell:s:\n" + //$NON-NLS-1$
"shell working directory:s:\n" + //$NON-NLS-1$
"gatewayhostname:s:\n" + //$NON-NLS-1$
"gatewayusagemethod:i:4\n" + //$NON-NLS-1$
"gatewaycredentialssource:i:4\n" + //$NON-NLS-1$
"gatewayprofileusagemethod:i:0\n" + //$NON-NLS-1$
"promptcredentialonce:i:1\n" + //$NON-NLS-1$
"use redirection server name:i:0";//$NON-NLS-1$
private int getScreenMode() {
if (getFullScreen()) {
return 2;
}
return 1;
}
//falsy value to 0; 1 otherwise
private int booleanToInt(Boolean b) {
if (b == null || Boolean.FALSE.equals(b)) {
return 0;
}
return 1;
}
private String getredirectDrivesLines() {
if (getUseLocalDrives()) {
return "\ndrivestoredirect:s:*"; //$NON-NLS-1$
} else {
return "\ndrivestoredirect:s:"; //$NON-NLS-1$
}
}
@Override
public void connect() {
StringBuilder configBuilder = new StringBuilder(BASE_CONFIG_FILE); //$NON-NLS-1$
configBuilder.append("\nscreen mode id:i:").append(getScreenMode()); //$NON-NLS-1$
configBuilder.append("\ndesktopwidth:i:").append(getWidth()); //$NON-NLS-1$
configBuilder.append("\ndesktopheight:i:").append(getHeight()); //$NON-NLS-1$
configBuilder.append("\nauthentication level:i:").append(getAuthenticationLevel()); //$NON-NLS-1$
configBuilder.append("\nfull address:s:").append(getAddress()); //$NON-NLS-1$
configBuilder.append("\nenablecredsspsupport:i:").append(booleanToInt(getEnableCredSspSupport())); //$NON-NLS-1$
configBuilder.append(getredirectDrivesLines());
configBuilder.append("\nredirectprinters:i:").append(booleanToInt(getRedirectPrinters()));//$NON-NLS-1$
configBuilder.append("\nredirectsmartcards:i:").append(booleanToInt(getRedirectSmartCards()));//$NON-NLS-1$
configBuilder.append("\nredirectclipboard:i:").append(booleanToInt(getRedirectClipboard()));//$NON-NLS-1$
configBuilder.append("\nusername:s:").append(getUserNameAndDomain());//$NON-NLS-1$
ConsoleModel.makeConsoleConfigRequest("console.rdp", "application/rdp; charset=UTF-8", configBuilder.toString());//$NON-NLS-1$$NON-NLS-2$
}
@Override
public boolean getEnableCredSspSupport() {
return true;
}
}