package org.ovirt.engine.ui.userportal.client.protocols;
import org.ovirt.engine.core.compat.Event;
import org.ovirt.engine.ui.frontend.Frontend;
import com.google.gwt.core.client.GWT;
public class RdpConnector {
private String server;
private Boolean fullScreen = true;
private String fullScreenTitle;
private Integer width = 640;
private Integer height = 480;
private Integer authenticationLevel = 2;
private Boolean enableCredSspSupport = false; // Disable 'Credential Security Support Provider (CredSSP)' to enable SSO.
private Boolean redirectDrives = false;
private Boolean redirectPrinters = false;
private Boolean redirectClipboard = false;
private Boolean redirectSmartCards = false;
private Event disconnectedEvent;
public RdpConnector() {
}
public RdpConnector(String server, Event disconnectedEvent) {
setServer(server);
setDisconnectedEvent(disconnectedEvent);
}
public Event getDisconnectedEvent() {
return disconnectedEvent;
}
public void setDisconnectedEvent(Event disconnectedEvent) {
this.disconnectedEvent = disconnectedEvent;
}
public String getServer() {
return server;
}
public void setServer(String server) {
this.server = server;
}
public Boolean getFullScreen() {
return fullScreen;
}
public void setFullScreen(Boolean fullScreen) {
this.fullScreen = fullScreen;
}
public String getFullScreenTitle() {
return fullScreenTitle;
}
public void setFullScreenTitle(String fullScreenTitle) {
this.fullScreenTitle = fullScreenTitle;
}
public Integer getWidth() {
return width;
}
public void setWidth(Integer width) {
this.width = width;
}
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
public Integer getAuthenticationLevel() {
return authenticationLevel;
}
public void setAuthenticationLevel(Integer authenticationLevel) {
this.authenticationLevel = authenticationLevel;
}
public Boolean getEnableCredSspSupport() {
return enableCredSspSupport;
}
public void setEnableCredSspSupport(Boolean enableCredSspSupport) {
this.enableCredSspSupport = enableCredSspSupport;
}
public Boolean getRedirectDrives() {
return redirectDrives;
}
public void setRedirectDrives(Boolean redirectDrives) {
this.redirectDrives = redirectDrives;
}
public Boolean getRedirectPrinters() {
return redirectPrinters;
}
public void setRedirectPrinters(Boolean redirectPrinters) {
this.redirectPrinters = redirectPrinters;
}
public Boolean getRedirectClipboard() {
return redirectClipboard;
}
public void setRedirectClipboard(Boolean redirectClipboard) {
this.redirectClipboard = redirectClipboard;
}
public Boolean getRedirectSmartCards() {
return redirectSmartCards;
}
public void setRedirectSmartCards(Boolean redirectSmartCards) {
this.redirectSmartCards = redirectSmartCards;
}
public String getRdpCabURL() {
return GWT.getModuleBaseURL() + "msrdp.cab";
}
public String getVdcUserNameAndDomain() {
String username = Frontend.getLoggedInUser().getUserName();
String domain = Frontend.getLoggedInUser().getDomainControler();
return username.contains("@") ? username : username + "@" + domain;
}
public String getVdcUserName() {
return Frontend.getLoggedInUser().getUserName();
}
public String getVdcUserPassword() {
return Frontend.getLoggedInUser().getPassword();
}
public String getVdcUserDomainController() {
return Frontend.getLoggedInUser().getDomainControler();
}
public native void init() /*-{
var server = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getServer()();
var rdpCabURL = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getRdpCabURL()();
var connectAreaDiv = document.createElement("<div style='display: none' id='connectArea'/>");
//var objStr = "<object id='MsRdpClient_" + server + "' onReadyStateChange='OnControlLoad()' onError='OnControlLoadError()' classid='CLSID:4eb89ff4-7f78-4a0f-8b8d-2bf02e94e4b2' width='800' height='600'></object>";
var objStr = "<object id='MsRdpClient_" + server + "' codebase='" + rdpCabURL + "' classid='CLSID:4eb89ff4-7f78-4a0f-8b8d-2bf02e94e4b2' width='800' height='600'></object>";
var client = document.createElement(objStr);
connectAreaDiv.appendChild(client);
document.body.appendChild(connectAreaDiv);
function OnControlLoad() {}
function OnControlLoadError() {}
}-*/;
public native void connect() /*-{
function OnConnected() {
}
function OnDisconnected(disconnectCode){
var extendedDiscReason = MsRdpClient.ExtendedDisconnectReason;
var errorCodeEventArgs = @org.ovirt.engine.ui.uicommon.models.vms.ErrorCodeEventArgs::new(I)(disconnectCode);
disconnectedEvent.@org.ovirt.engine.core.compat.Event::raise(Ljava/lang/Object;Lorg/ovirt/engine/core/compat/EventArgs;)(model, errorCodeEventArgs);
$wnd.document.body.removeChild(MsRdpClient);
}
var server = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getServer()();
var fullScreen = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getFullScreen()();
var fullScreenTitle = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getFullScreenTitle()();
var width = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getWidth()();
var height = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getHeight()();
var authenticationLevel = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getAuthenticationLevel()();
var enableCredSspSupport = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getEnableCredSspSupport()();
var redirectDrives = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getRedirectDrives()();
var redirectPrinters = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getRedirectPrinters()();
var redirectClipboard = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getRedirectClipboard()();
var redirectSmartCards = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getRedirectSmartCards()();
var disconnectedEvent = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getDisconnectedEvent()();
var userName = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getVdcUserNameAndDomain()();
var password = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getVdcUserPassword()();
var domain = this.@org.ovirt.engine.ui.userportal.client.protocols.RdpConnector::getVdcUserDomainController()();
var model = this;
// var MsRdpClient = document.getElementById("MsRdpClient_"+server);
//TODO: Only in DEBUG mode
// alert("Server [" + server + "] fullScreen? [" + fullScreen + "], FullScreen Title [" +
// fullScreenTitle + "], width [" + width + "], height [" + height + "], auth level [" + authenticationLevel + "] enableCredSSPSupport? [" +
// enableCredSspSupport + "] redirect drives? [" + redirectDrives + "], redirect printers? [" + redirectPrinters + "], redirect clipboard? [" +
// redirectClipboard + "], redirect SmartCards [" + redirectSmartCards + "]");
// Remove previous client object
var previousMsRdpClient = $wnd.document.getElementById('MsRdpClient_' + server);
if (previousMsRdpClient)
$wnd.document.body.removeChild(previousMsRdpClient);
var MsRdpClient = $wnd.document.createElement("object");
$wnd.document.body.appendChild(MsRdpClient);
MsRdpClient.id = "MsRdpClient_" + server;
MsRdpClient.classid = "CLSID:4eb89ff4-7f78-4a0f-8b8d-2bf02e94e4b2";
MsRdpClient.server = server;
MsRdpClient.FullScreen = fullScreen;
MsRdpClient.desktopWidth = screen.width;
MsRdpClient.desktopHeight = screen.height;
MsRdpClient.width = 1;
MsRdpClient.height = 1;
MsRdpClient.UserName = userName;
MsRdpClient.AdvancedSettings.ClearTextPassword = password;
MsRdpClient.AdvancedSettings5.AuthenticationLevel = authenticationLevel;
MsRdpClient.AdvancedSettings7.EnableCredSspSupport = enableCredSspSupport;
MsRdpClient.AdvancedSettings2.RedirectDrives = redirectDrives;
MsRdpClient.AdvancedSettings2.RedirectPrinters = redirectPrinters;
MsRdpClient.AdvancedSettings2.RedirectClipboard = redirectClipboard;
MsRdpClient.AdvancedSettings2.RedirectSmartCards = redirectSmartCards;
MsRdpClient.AdvancedSettings2.ConnectionBarShowRestoreButton = false;
MsRdpClient.attachEvent('OnConnected', OnConnected);
MsRdpClient.attachEvent('OnDisconnected', OnDisconnected);
MsRdpClient.connect();
}-*/;
}