From 22cde74db2bace5b77354b5bb433ab4d8158e8f4 Mon Sep 17 00:00:00 2001 From: BlueBlock Date: Tue, 21 Mar 2023 12:07:18 -0400 Subject: [PATCH] Delete RdpProtocol6.cs class renamed to RdpProtocol --- .../Connection/Protocol/RDP/RdpProtocol6.cs | 881 ------------------ 1 file changed, 881 deletions(-) delete mode 100644 mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs deleted file mode 100644 index 90f8e0cf..00000000 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs +++ /dev/null @@ -1,881 +0,0 @@ -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Threading; -using System.Timers; -using System.Windows.Forms; -using AxMSTSCLib; -using mRemoteNG.App; -using mRemoteNG.Messages; -using mRemoteNG.Properties; -using mRemoteNG.Security.SymmetricEncryption; -using mRemoteNG.Tools; -using mRemoteNG.UI; -using mRemoteNG.UI.Forms; -using mRemoteNG.UI.Tabs; -using MSTSCLib; -using mRemoteNG.Resources.Language; -using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; -using System.DirectoryServices.ActiveDirectory; -using System.Runtime.Versioning; - -namespace mRemoteNG.Connection.Protocol.RDP -{ - [SupportedOSPlatform("windows")] - public class RdpProtocol6 : ProtocolBase, ISupportsViewOnly - { - /* RDP v8 requires Windows 7 with: - * https://support.microsoft.com/en-us/kb/2592687 - * OR - * https://support.microsoft.com/en-us/kb/2923545 - * - * Windows 8+ support RDP v8 out of the box. - */ - private MsRdpClient6NotSafeForScripting _rdpClient; - protected ConnectionInfo connectionInfo; - protected bool loginComplete; - private Version _rdpVersion; - private bool _redirectKeys; - private bool _alertOnIdleDisconnect; - private readonly DisplayProperties _displayProperties; - private readonly FrmMain _frmMain = FrmMain.Default; - protected virtual RdpVersion RdpProtocolVersion => RdpVersion.Rdc6; - private AxHost AxHost => (AxHost)Control; - - #region Properties - - public virtual bool SmartSize - { - get => _rdpClient.AdvancedSettings2.SmartSizing; - protected set => _rdpClient.AdvancedSettings2.SmartSizing = value; - } - - public virtual bool Fullscreen - { - get => _rdpClient.FullScreen; - protected set => _rdpClient.FullScreen = value; - } - - private bool RedirectKeys - { -/* - get - { - return _redirectKeys; - } -*/ - set - { - _redirectKeys = value; - try - { - if (!_redirectKeys) - { - return; - } - - Debug.Assert(Convert.ToBoolean(_rdpClient.SecuredSettingsEnabled)); - var msRdpClientSecuredSettings = _rdpClient.SecuredSettings2; - msRdpClientSecuredSettings.KeyboardHookMode = 1; // Apply key combinations at the remote server. - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetRedirectKeysFailed, ex); - } - } - } - - public bool LoadBalanceInfoUseUtf8 { get; set; } - - public bool ViewOnly - { - get => !AxHost.Enabled; - set => AxHost.Enabled = !value; - } - - #endregion - - #region Constructors - - public RdpProtocol6() - { - _displayProperties = new DisplayProperties(); - tmrReconnect.Elapsed += tmrReconnect_Elapsed; - } - - #endregion - - #region Public Methods - protected virtual AxHost CreateActiveXRdpClientControl() - { - return new AxMsRdpClient6NotSafeForScripting(); - } - - - public override bool Initialize() - { - connectionInfo = InterfaceControl.Info; - Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, - $"Requesting RDP version: {connectionInfo.RdpVersion}. Using: {RdpProtocolVersion}"); - Control = CreateActiveXRdpClientControl(); - base.Initialize(); - - try - { - if (!InitializeActiveXControl()) - return false; - - _rdpVersion = new Version(_rdpClient.Version); - SetRdpClientProperties(); - return true; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetPropsFailed, ex); - return false; - } - } - - private bool InitializeActiveXControl() - { - try - { - Control.GotFocus += RdpClient_GotFocus; - Control.CreateControl(); - while (!Control.Created) - { - Thread.Sleep(0); - Application.DoEvents(); - } - Control.Anchor = AnchorStyles.None; - - _rdpClient = (MsRdpClient6NotSafeForScripting)((AxHost)Control).GetOcx(); - return true; - } - catch (COMException ex) - { - if (ex.Message.Contains("CLASS_E_CLASSNOTAVAILABLE")) - { - Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, - string.Format(Language.RdpProtocolVersionNotSupported, connectionInfo.RdpVersion)); - } - else - { - Runtime.MessageCollector.AddExceptionMessage(Language.RdpControlCreationFailed, ex); - } - Control.Dispose(); - return false; - } - } - - public override bool Connect() - { - loginComplete = false; - SetEventHandlers(); - - try - { - _rdpClient.Connect(); - base.Connect(); - - return true; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.ConnectionOpenFailed, ex); - } - - return false; - } - - public override void Disconnect() - { - try - { - _rdpClient.Disconnect(); - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpDisconnectFailed, ex); - Close(); - } - } - - public void ToggleFullscreen() - { - try - { - Fullscreen = !Fullscreen; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpToggleFullscreenFailed, ex); - } - } - - public void ToggleSmartSize() - { - try - { - SmartSize = !SmartSize; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpToggleSmartSizeFailed, ex); - } - } - - /// - /// Toggles whether the RDP ActiveX control will capture and send input events to the remote host. - /// The local host will continue to receive data from the remote host regardless of this setting. - /// - public void ToggleViewOnly() - { - try - { - ViewOnly = !ViewOnly; - } - catch - { - Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, $"Could not toggle view only mode for host {connectionInfo.Hostname}"); - } - } - - public override void Focus() - { - try - { - if (Control.ContainsFocus == false) - { - Control.Focus(); - } - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpFocusFailed, ex); - } - } - - /// - /// Determines if this version of the RDP client - /// is supported on this machine. - /// - /// - public bool RdpVersionSupported() - { - try - { - using (var control = CreateActiveXRdpClientControl()) - { - control.CreateControl(); - return true; - } - } - catch - { - return false; - } - } - #endregion - - #region Private Methods - - private void SetRdpClientProperties() - { - _rdpClient.Server = connectionInfo.Hostname; - - SetCredentials(); - SetResolution(); - _rdpClient.FullScreenTitle = connectionInfo.Name; - - _alertOnIdleDisconnect = connectionInfo.RDPAlertIdleTimeout; - _rdpClient.AdvancedSettings2.MinutesToIdleTimeout = connectionInfo.RDPMinutesToIdleTimeout; - - #region Remote Desktop Services - _rdpClient.SecuredSettings2.StartProgram = connectionInfo.RDPStartProgram; - _rdpClient.SecuredSettings2.WorkDir = connectionInfo.RDPStartProgramWorkDir; - #endregion - - //not user changeable - _rdpClient.AdvancedSettings2.GrabFocusOnConnect = true; - _rdpClient.AdvancedSettings3.EnableAutoReconnect = true; - _rdpClient.AdvancedSettings3.MaxReconnectAttempts = Settings.Default.RdpReconnectionCount; - _rdpClient.AdvancedSettings2.keepAliveInterval = 60000; //in milliseconds (10,000 = 10 seconds) - _rdpClient.AdvancedSettings5.AuthenticationLevel = 0; - _rdpClient.AdvancedSettings2.EncryptionEnabled = 1; - - _rdpClient.AdvancedSettings2.overallConnectionTimeout = Settings.Default.ConRDPOverallConnectionTimeout; - - _rdpClient.AdvancedSettings2.BitmapPeristence = Convert.ToInt32(connectionInfo.CacheBitmaps); - if (_rdpVersion >= Versions.RDC61) - { - _rdpClient.AdvancedSettings7.EnableCredSspSupport = connectionInfo.UseCredSsp; - } - if(_rdpVersion >= Versions.RDC81) - { - if (connectionInfo.UseRestrictedAdmin) - SetExtendedProperty("RestrictedLogon", true); - else if (connectionInfo.UseRCG) - { - SetExtendedProperty("DisableCredentialsDelegation", true); - SetExtendedProperty("RedirectedAuthentication", true); - } - } - - SetUseConsoleSession(); - SetPort(); - RedirectKeys = connectionInfo.RedirectKeys; - SetRedirection(); - SetAuthenticationLevel(); - SetLoadBalanceInfo(); - SetRdGateway(); - ViewOnly = Force.HasFlag(ConnectionInfo.Force.ViewOnly); - - _rdpClient.ColorDepth = (int)connectionInfo.Colors; - - SetPerformanceFlags(); - - _rdpClient.ConnectingText = Language.Connecting; - } - - protected object GetExtendedProperty(string property) - { - try - { - // ReSharper disable once UseIndexedProperty - return ((IMsRdpExtendedSettings)_rdpClient).get_Property(property); - } - catch (Exception e) - { - Runtime.MessageCollector.AddExceptionMessage($"Error getting extended RDP property '{property}'", - e, MessageClass.WarningMsg, false); - return null; - } - } - - protected void SetExtendedProperty(string property, object value) - { - try - { - // ReSharper disable once UseIndexedProperty - ((IMsRdpExtendedSettings)_rdpClient).set_Property(property, ref value); - } - catch (Exception e) - { - Runtime.MessageCollector.AddExceptionMessage($"Error setting extended RDP property '{property}'", - e, MessageClass.WarningMsg, false); - } - } - - private void SetRdGateway() - { - try - { - if (_rdpClient.TransportSettings.GatewayIsSupported == 0) - { - Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, Language.RdpGatewayNotSupported, - true); - return; - } - - Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, Language.RdpGatewayIsSupported, - true); - - if (connectionInfo.RDGatewayUsageMethod != RDGatewayUsageMethod.Never) - { - _rdpClient.TransportSettings.GatewayUsageMethod = (uint)connectionInfo.RDGatewayUsageMethod; - _rdpClient.TransportSettings.GatewayHostname = connectionInfo.RDGatewayHostname; - _rdpClient.TransportSettings.GatewayProfileUsageMethod = 1; // TSC_PROXY_PROFILE_MODE_EXPLICIT - if (connectionInfo.RDGatewayUseConnectionCredentials == RDGatewayUseConnectionCredentials.SmartCard) - { - _rdpClient.TransportSettings.GatewayCredsSource = 1; // TSC_PROXY_CREDS_MODE_SMARTCARD - } - - if (_rdpVersion >= Versions.RDC61 && !Force.HasFlag(ConnectionInfo.Force.NoCredentials)) - { - if (connectionInfo.RDGatewayUseConnectionCredentials == RDGatewayUseConnectionCredentials.Yes) - { - _rdpClient.TransportSettings2.GatewayUsername = connectionInfo.Username; - _rdpClient.TransportSettings2.GatewayPassword = connectionInfo.Password; - _rdpClient.TransportSettings2.GatewayDomain = connectionInfo?.Domain; - } - else if (connectionInfo.RDGatewayUseConnectionCredentials == RDGatewayUseConnectionCredentials.SmartCard) - { - _rdpClient.TransportSettings2.GatewayCredSharing = 0; - } - else - { - _rdpClient.TransportSettings2.GatewayCredSharing = 0; - - string gwu = connectionInfo.RDGatewayUsername; - string gwp = connectionInfo.RDGatewayPassword; - string gwd = connectionInfo.RDGatewayDomain; - string pkey = ""; - - // access secret server api if necessary - if (InterfaceControl.Info.RDGatewayExternalCredentialProvider == ExternalCredentialProvider.DelineaSecretServer) - { - try - { - string RDGUserViaAPI = InterfaceControl.Info.RDGatewayUserViaAPI; - ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer($"{RDGUserViaAPI}", out gwu, out gwp, out gwd, out pkey); - } - catch (Exception ex) - { - Event_ErrorOccured(this, "Secret Server Interface Error: " + ex.Message, 0); - } - - } - _rdpClient.TransportSettings2.GatewayUsername = gwu; - _rdpClient.TransportSettings2.GatewayPassword = gwp; - _rdpClient.TransportSettings2.GatewayDomain = gwd; - } - } - } - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetGatewayFailed, ex); - } - } - - private void SetUseConsoleSession() - { - try - { - bool value; - - if (Force.HasFlag(ConnectionInfo.Force.UseConsoleSession)) - { - value = true; - } - else if (Force.HasFlag(ConnectionInfo.Force.DontUseConsoleSession)) - { - value = false; - } - else - { - value = connectionInfo.UseConsoleSession; - } - - if (_rdpVersion >= Versions.RDC61) - { - Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, - string.Format(Language.RdpSetConsoleSwitch, _rdpVersion), - true); - _rdpClient.AdvancedSettings7.ConnectToAdministerServer = value; - } - else - { - Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, - string.Format(Language.RdpSetConsoleSwitch, _rdpVersion) + - Environment.NewLine + - "No longer supported in this RDP version. Reference: https://msdn.microsoft.com/en-us/library/aa380863(v=vs.85).aspx", - true); - // ConnectToServerConsole is deprecated - //https://msdn.microsoft.com/en-us/library/aa380863(v=vs.85).aspx - //_rdpClient.AdvancedSettings2.ConnectToServerConsole = value; - } - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetConsoleSessionFailed, ex); - } - } - - private void SetCredentials() - { - try - { - if (Force.HasFlag(ConnectionInfo.Force.NoCredentials)) - { - return; - } - - var userName = connectionInfo?.Username ?? ""; - var password = connectionInfo?.Password ?? ""; - var domain = connectionInfo?.Domain ?? ""; - var UserViaAPI = connectionInfo?.UserViaAPI ?? ""; - string pkey = ""; - - // access secret server api if necessary - if (InterfaceControl.Info.ExternalCredentialProvider == ExternalCredentialProvider.DelineaSecretServer) - { - try - { - ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer($"{UserViaAPI}", out userName, out password, out domain, out pkey); - } - catch (Exception ex) - { - Event_ErrorOccured(this, "Secret Server Interface Error: " + ex.Message, 0); - } - - } - - if (string.IsNullOrEmpty(userName)) - { - switch (Properties.OptionsCredentialsPage.Default.EmptyCredentials) - { - case "windows": - _rdpClient.UserName = Environment.UserName; - break; - case "custom" when !string.IsNullOrEmpty(Properties.OptionsCredentialsPage.Default.DefaultUsername): - _rdpClient.UserName = Properties.OptionsCredentialsPage.Default.DefaultUsername; - break; - case "custom": - try - { - ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer(Properties.OptionsCredentialsPage.Default.UserViaAPIDefault, out userName, out password, out domain, out pkey); - _rdpClient.UserName = userName; - } - catch (Exception ex) - { - Event_ErrorOccured(this, "Secret Server Interface Error: " + ex.Message, 0); - } - - break; - } - } - else - { - _rdpClient.UserName = userName; - } - - if (string.IsNullOrEmpty(password)) - { - if (Properties.OptionsCredentialsPage.Default.EmptyCredentials == "custom") - { - if (Properties.OptionsCredentialsPage.Default.DefaultPassword != "") - { - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); - _rdpClient.AdvancedSettings2.ClearTextPassword = cryptographyProvider.Decrypt(Properties.OptionsCredentialsPage.Default.DefaultPassword, Runtime.EncryptionKey); - } - } - } - else - { - _rdpClient.AdvancedSettings2.ClearTextPassword = password; - } - - if (string.IsNullOrEmpty(domain)) - { - _rdpClient.Domain = Properties.OptionsCredentialsPage.Default.EmptyCredentials switch - { - "windows" => Environment.UserDomainName, - "custom" => Properties.OptionsCredentialsPage.Default.DefaultDomain, - _ => _rdpClient.Domain - }; - } - else - { - _rdpClient.Domain = domain; - } - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetCredentialsFailed, ex); - } - } - - private void SetResolution() - { - try - { - var scaleFactor = (uint)(_displayProperties.ResolutionScalingFactor.Width * 100); - SetExtendedProperty("DesktopScaleFactor", scaleFactor); - SetExtendedProperty("DeviceScaleFactor", (uint)100); - - if (Force.HasFlag(ConnectionInfo.Force.Fullscreen)) - { - _rdpClient.FullScreen = true; - _rdpClient.DesktopWidth = Screen.FromControl(_frmMain).Bounds.Width; - _rdpClient.DesktopHeight = Screen.FromControl(_frmMain).Bounds.Height; - - return; - } - - if (InterfaceControl.Info.Resolution == RDPResolutions.FitToWindow || - InterfaceControl.Info.Resolution == RDPResolutions.SmartSize) - { - _rdpClient.DesktopWidth = InterfaceControl.Size.Width; - _rdpClient.DesktopHeight = InterfaceControl.Size.Height; - - if (InterfaceControl.Info.Resolution == RDPResolutions.SmartSize) - { - _rdpClient.AdvancedSettings2.SmartSizing = true; - } - } - else if (InterfaceControl.Info.Resolution == RDPResolutions.Fullscreen) - { - _rdpClient.FullScreen = true; - _rdpClient.DesktopWidth = Screen.FromControl(_frmMain).Bounds.Width; - _rdpClient.DesktopHeight = Screen.FromControl(_frmMain).Bounds.Height; - } - else - { - var resolution = connectionInfo.Resolution.GetResolutionRectangle(); - _rdpClient.DesktopWidth = resolution.Width; - _rdpClient.DesktopHeight = resolution.Height; - } - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetResolutionFailed, ex); - } - } - - private void SetPort() - { - try - { - if (connectionInfo.Port != (int)Defaults.Port) - { - _rdpClient.AdvancedSettings2.RDPPort = connectionInfo.Port; - } - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetPortFailed, ex); - } - } - - private void SetRedirection() - { - try - { - _rdpClient.AdvancedSettings2.RedirectDrives = connectionInfo.RedirectDiskDrives; - _rdpClient.AdvancedSettings2.RedirectPorts = connectionInfo.RedirectPorts; - _rdpClient.AdvancedSettings2.RedirectPrinters = connectionInfo.RedirectPrinters; - _rdpClient.AdvancedSettings2.RedirectSmartCards = connectionInfo.RedirectSmartCards; - _rdpClient.SecuredSettings2.AudioRedirectionMode = (int)connectionInfo.RedirectSound; - _rdpClient.AdvancedSettings6.RedirectClipboard = connectionInfo.RedirectClipboard; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetRedirectionFailed, ex); - } - } - - private void SetPerformanceFlags() - { - try - { - var pFlags = 0; - if (connectionInfo.DisplayThemes == false) - pFlags += (int)RDPPerformanceFlags.DisableThemes; - - if (connectionInfo.DisplayWallpaper == false) - pFlags += (int)RDPPerformanceFlags.DisableWallpaper; - - if (connectionInfo.EnableFontSmoothing) - pFlags += (int)RDPPerformanceFlags.EnableFontSmoothing; - - if (connectionInfo.EnableDesktopComposition) - pFlags += (int)RDPPerformanceFlags.EnableDesktopComposition; - - if (connectionInfo.DisableFullWindowDrag) - pFlags += (int)RDPPerformanceFlags.DisableFullWindowDrag; - - if (connectionInfo.DisableMenuAnimations) - pFlags += (int)RDPPerformanceFlags.DisableMenuAnimations; - - if (connectionInfo.DisableCursorShadow) - pFlags += (int)RDPPerformanceFlags.DisableCursorShadow; - - if (connectionInfo.DisableCursorBlinking) - pFlags += (int)RDPPerformanceFlags.DisableCursorBlinking; - - _rdpClient.AdvancedSettings2.PerformanceFlags = pFlags; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetPerformanceFlagsFailed, ex); - } - } - - private void SetAuthenticationLevel() - { - try - { - _rdpClient.AdvancedSettings5.AuthenticationLevel = (uint)connectionInfo.RDPAuthenticationLevel; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetAuthenticationLevelFailed, ex); - } - } - - private void SetLoadBalanceInfo() - { - if (string.IsNullOrEmpty(connectionInfo.LoadBalanceInfo)) - { - return; - } - - try - { - _rdpClient.AdvancedSettings2.LoadBalanceInfo = LoadBalanceInfoUseUtf8 - ? new AzureLoadBalanceInfoEncoder().Encode(connectionInfo.LoadBalanceInfo) - : connectionInfo.LoadBalanceInfo; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace("Unable to set load balance info.", ex); - } - } - - private void SetEventHandlers() - { - try - { - _rdpClient.OnConnecting += RDPEvent_OnConnecting; - _rdpClient.OnConnected += RDPEvent_OnConnected; - _rdpClient.OnLoginComplete += RDPEvent_OnLoginComplete; - _rdpClient.OnFatalError += RDPEvent_OnFatalError; - _rdpClient.OnDisconnected += RDPEvent_OnDisconnected; - _rdpClient.OnLeaveFullScreenMode += RDPEvent_OnLeaveFullscreenMode; - _rdpClient.OnIdleTimeoutNotification += RDPEvent_OnIdleTimeoutNotification; - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionStackTrace(Language.RdpSetEventHandlersFailed, ex); - } - } - - #endregion - - #region Private Events & Handlers - - private void RDPEvent_OnIdleTimeoutNotification() - { - Close(); //Simply close the RDP Session if the idle timeout has been triggered. - - if (!_alertOnIdleDisconnect) return; - MessageBox.Show($"The {connectionInfo.Name} session was disconnected due to inactivity", - "Session Disconnected", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - - - private void RDPEvent_OnFatalError(int errorCode) - { - var errorMsg = RdpErrorCodes.GetError(errorCode); - Event_ErrorOccured(this, errorMsg, errorCode); - } - - private void RDPEvent_OnDisconnected(int discReason) - { - const int UI_ERR_NORMAL_DISCONNECT = 0xB08; - if (discReason != UI_ERR_NORMAL_DISCONNECT) - { - var reason = - _rdpClient.GetErrorDescription((uint)discReason, (uint)_rdpClient.ExtendedDisconnectReason); - Event_Disconnected(this, reason, discReason); - } - - if (Properties.OptionsAdvancedPage.Default.ReconnectOnDisconnect) - { - ReconnectGroup = new ReconnectGroup(); - ReconnectGroup.CloseClicked += Event_ReconnectGroupCloseClicked; - ReconnectGroup.Left = (int)((double)Control.Width / 2 - (double)ReconnectGroup.Width / 2); - ReconnectGroup.Top = (int)((double)Control.Height / 2 - (double)ReconnectGroup.Height / 2); - ReconnectGroup.Parent = Control; - ReconnectGroup.Show(); - tmrReconnect.Enabled = true; - } - else - { - Close(); - } - } - - private void RDPEvent_OnConnecting() - { - Event_Connecting(this); - } - - private void RDPEvent_OnConnected() - { - Event_Connected(this); - } - - private void RDPEvent_OnLoginComplete() - { - loginComplete = true; - } - - private void RDPEvent_OnLeaveFullscreenMode() - { - Fullscreen = false; - _leaveFullscreenEvent?.Invoke(this, new EventArgs()); - } - - private void RdpClient_GotFocus(object sender, EventArgs e) - { - ((ConnectionTab)Control.Parent.Parent).Focus(); - } - #endregion - - #region Public Events & Handlers - - public delegate void LeaveFullscreenEventHandler(object sender, EventArgs e); - - private LeaveFullscreenEventHandler _leaveFullscreenEvent; - - public event LeaveFullscreenEventHandler LeaveFullscreen - { - add => _leaveFullscreenEvent = (LeaveFullscreenEventHandler)Delegate.Combine(_leaveFullscreenEvent, value); - remove => - _leaveFullscreenEvent = (LeaveFullscreenEventHandler)Delegate.Remove(_leaveFullscreenEvent, value); - } - - #endregion - - #region Enums - - public enum Defaults - { - Colors = RDPColors.Colors16Bit, - Sounds = RDPSounds.DoNotPlay, - Resolution = RDPResolutions.FitToWindow, - Port = 3389 - } - - #endregion - - public static class Versions - { - public static readonly Version RDC60 = new Version(6, 0, 6000); - public static readonly Version RDC61 = new Version(6, 0, 6001); - public static readonly Version RDC70 = new Version(6, 1, 7600); - public static readonly Version RDC80 = new Version(6, 2, 9200); - public static readonly Version RDC81 = new Version(6, 3, 9600); - public static readonly Version RDC100 = new Version(10, 0, 0); - } - - #region Reconnect Stuff - - public void tmrReconnect_Elapsed(object sender, ElapsedEventArgs e) - { - try - { - var srvReady = PortScanner.IsPortOpen(connectionInfo.Hostname, Convert.ToString(connectionInfo.Port)); - - ReconnectGroup.ServerReady = srvReady; - - if (!ReconnectGroup.ReconnectWhenReady || !srvReady) return; - tmrReconnect.Enabled = false; - ReconnectGroup.DisposeReconnectGroup(); - //SetProps() - _rdpClient.Connect(); - } - catch (Exception ex) - { - Runtime.MessageCollector.AddExceptionMessage( - string.Format(Language.AutomaticReconnectError, connectionInfo.Hostname), - ex, MessageClass.WarningMsg, false); - } - } - - #endregion - } -} \ No newline at end of file