package org.ovirt.engine.ui.common.uicommon; import java.util.logging.Logger; import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol; import org.ovirt.engine.ui.uicommonweb.models.vms.ErrorCodeEventArgs; import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpPlugin; import org.ovirt.engine.ui.uicommonweb.models.vms.RdpConsoleModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventDefinition; import org.ovirt.engine.ui.uicompat.IEventListener; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Window; public class RdpPluginImpl extends AbstractRdp implements IRdpPlugin, IEventListener<ErrorCodeEventArgs> { private static final Logger logger = Logger.getLogger(RdpPluginImpl.class.getName()); private static EventDefinition RdpDisconnectedEventDefinition = new EventDefinition("RdpDisconnected", RdpConsoleModel.class); //$NON-NLS-1$ private final Event<ErrorCodeEventArgs> disconnectedEvent = new Event<>(RdpDisconnectedEventDefinition); private RdpConsoleModel parentModel; @Override public void connect() { if (!consoleUtils.isBrowserPluginSupported(ConsoleProtocol.RDP)) { Window.alert(ConstantsManager.getInstance().getConstants().rdpIsNotSupportedInYourBrowser()); //$NON-NLS-1$ return; } disconnectedEvent.addListener(this); connectNatively(); } @Override public void setParentModel(RdpConsoleModel model) { this.parentModel = model; } public String getRDPCabURL() { return GWT.getModuleBaseURL() + "msrdp.cab";//$NON-NLS-1$ } @Override public void eventRaised(Event<? extends ErrorCodeEventArgs> ev, Object sender, ErrorCodeEventArgs args) { if (disconnectedEvent.equals(ev)) { rdpDisconnected(sender, args); } } private void rdpDisconnected(Object sender, ErrorCodeEventArgs e) { disconnectedEvent.removeListener(this); if (e.getErrorCode() > 100) { parentModel.raiseErrorEvent(e); } } public native void connectNatively() /*-{ try { var server = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getAddress()(); var fullScreen = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getFullScreen()(); var fullScreenTitle = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getFullScreenTitle()(); var width = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getWidth()(); var height = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getHeight()(); var authenticationLevel = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getAuthenticationLevel()(); var enableCredSspSupport = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getEnableCredSspSupport()(); var redirectDrives = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getUseLocalDrives()(); var redirectPrinters = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getRedirectPrinters()(); var redirectClipboard = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getRedirectClipboard()(); var redirectSmartCards = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getRedirectSmartCards()(); var disconnectedEvent = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::disconnectedEvent; var userName = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getUserNameAndDomain()(); var password = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getUserPassword()(); var domain = this.@org.ovirt.engine.ui.common.uicommon.RdpPluginImpl::getUserDomainController()(); 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; function OnConnected() { } function OnDisconnected(disconnectCode){ var extendedDiscReason = MsRdpClient.ExtendedDisconnectReason; var errorCodeEventArgs = @org.ovirt.engine.ui.uicommonweb.models.vms.ErrorCodeEventArgs::new(I)(disconnectCode); disconnectedEvent.@org.ovirt.engine.ui.uicompat.Event::raise(Ljava/lang/Object;Lorg/ovirt/engine/ui/uicompat/EventArgs;)(model, errorCodeEventArgs); } MsRdpClient.attachEvent('OnConnected', OnConnected); MsRdpClient.attachEvent('OnDisconnected', OnDisconnected); MsRdpClient.connect(); } catch(e) { alert(e); } }-*/; @Override public boolean getEnableCredSspSupport() { return false;// Disable 'Credential Security Support Provider (CredSSP)' to enable SSO } }