sources/Google.Solutions.IapDesktop.Extensions.Session/Protocol/Rdp/RdpParameters.cs (225 lines of code) (raw):
//
// Copyright 2023 Google LLC
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
using System;
using System.ComponentModel;
namespace Google.Solutions.IapDesktop.Extensions.Session.Protocol.Rdp
{
public class RdpParameters : SessionParametersBase
{
internal const ushort DefaultPort = 3389;
internal static readonly TimeSpan DefaultConnectionTimeout = TimeSpan.FromSeconds(30);
public ushort Port { get; set; } = DefaultPort;
public TimeSpan ConnectionTimeout { get; set; } = DefaultConnectionTimeout;
public RdpConnectionBarState ConnectionBar { get; set; } = RdpConnectionBarState._Default;
public RdpAuthenticationLevel AuthenticationLevel { get; set; } = RdpAuthenticationLevel._Default;
public RdpColorDepth ColorDepth { get; set; } = RdpColorDepth._Default;
public RdpAudioPlayback AudioPlayback { get; set; } = RdpAudioPlayback._Default;
public RdpAudioInput AudioInput { get; set; } = RdpAudioInput._Default;
public RdpNetworkLevelAuthentication NetworkLevelAuthentication { get; set; } = RdpNetworkLevelAuthentication._Default;
public RdpAutomaticLogon UserAuthenticationBehavior { get; set; } = RdpAutomaticLogon._Default;
public RdpRedirectClipboard RedirectClipboard { get; set; } = RdpRedirectClipboard._Default;
public RdpRedirectPrinter RedirectPrinter { get; set; } = RdpRedirectPrinter._Default;
public RdpRedirectSmartCard RedirectSmartCard { get; set; } = RdpRedirectSmartCard._Default;
public RdpRedirectPort RedirectPort { get; set; } = RdpRedirectPort._Default;
public RdpRedirectDrive RedirectDrive { get; set; } = RdpRedirectDrive._Default;
public RdpRedirectDevice RedirectDevice { get; set; } = RdpRedirectDevice._Default;
public RdpRedirectWebAuthn RedirectWebAuthn { get; set; } = RdpRedirectWebAuthn._Default;
public RdpHookWindowsKeys HookWindowsKeys { get; set; } = RdpHookWindowsKeys._Default;
public RdpRestrictedAdminMode RestrictedAdminMode { get; set; } = RdpRestrictedAdminMode._Default;
public RdpSessionType SessionType { get; set; } = RdpSessionType._Default;
public RdpDpiScaling DpiScaling { get; set; } = RdpDpiScaling._Default;
public RdpDesktopSize DesktopSize { get; set; } = RdpDesktopSize._Default;
/// <summary>
/// Sources where these parameters were obtained from.
/// </summary>
public ParameterSources Sources { get; set; } = ParameterSources.Inventory;
//---------------------------------------------------------------------
// Inner classes.
//---------------------------------------------------------------------
[Flags]
public enum ParameterSources
{
/// <summary>
/// One or more parameter is sourced from a iap-rdp:/// URL.
/// </summary>
Url = 1,
/// <summary>
///One or more parameter is sourced from the inventory.
/// </summary>
Inventory = 2
}
}
//-------------------------------------------------------------------------
// Enums.
//
// NB. The values do not map to RDP interface values. But the numeric values
// must be kept unchanged as they are persisted as settings.
//
//-------------------------------------------------------------------------
public enum RdpConnectionBarState
{
[Description("Auto hide")]
AutoHide = 0,
[Description("Pinned")]
Pinned = 1,
[Description("Hide")]
Off = 2,
[Browsable(false)]
_Default = AutoHide
}
public enum RdpDesktopSize
{
[Description("Same as this computer")]
ScreenSize = 1,
[Description("Adjust automatically")]
AutoAdjust = 2,
[Browsable(false)]
LegacyClientSize = 0,
[Browsable(false)]
_Default = AutoAdjust
}
public enum RdpAuthenticationLevel
{
// Likely to fail when using IAP unless the cert has been issued
// for "localhost".
AttemptServerAuthentication = 0,
// Almost guaranteed to fail, so do not even display it.
[Browsable(false)]
RequireServerAuthentication = 1,
NoServerAuthentication = 3,
[Browsable(false)]
_Default = NoServerAuthentication
}
public enum RdpColorDepth
{
[Description("High color (16 bit)")]
HighColor = 0,
[Description("True color (24 bit)")]
TrueColor = 1,
[Description("Highest quality (32 bit)")]
DeepColor = 2,
[Browsable(false)]
_Default = TrueColor
}
public enum RdpAudioPlayback
{
[Description("Play on this computer")]
PlayLocally = 0,
[Description("Play on remote VM")]
PlayOnServer = 1,
[Description("Don't play")]
DoNotPlay = 2,
[Browsable(false)]
_Default = PlayLocally
}
public enum RdpAudioInput
{
[Description("Don't share")]
Disabled = 0,
[Description("Share")]
Enabled = 1,
[Browsable(false)]
_Default = Disabled
}
public enum RdpRedirectClipboard
{
[Description("Don't share")]
Disabled = 0,
[Description("Share")]
Enabled = 1,
[Browsable(false)]
_Default = Enabled
}
/// <summary>
/// Controls whether IAP Desktop engages in trying to
/// automatically log on the user, or whether to hand off
/// authentication to the RDP control entirely.
/// </summary>
public enum RdpAutomaticLogon
{
/// <summary>
/// Allow users to enter new credentials when saved
/// credentials are missing or invalid.
/// </summary>
Enabled = 0,
/// <summary>
/// Abort when saved credentials are missing or invalid.
/// </summary>
/// <remarks>
/// This is a legacy setting that shouldn't be used anymore.
/// </remarks>
[Browsable(false)]
LegacyAbortOnFailure = 1,
/// <summary>
/// Ignore saved credentials and always prompt, matches the
/// "Always prompt for password upon connection" server-side
/// group policy.
/// </summary>
Disabled = 2,
[Browsable(false)]
_Default = Enabled
}
public enum RdpCredentialGenerationBehavior
{
Allow = 0,
AllowIfNoCredentialsFound = 1,
Disallow = 2,
Force = 3,
[Browsable(false)]
_Default = AllowIfNoCredentialsFound
}
public enum RdpRedirectPrinter
{
[Description("Don't share")]
Disabled = 0,
[Description("Share")]
Enabled = 1,
[Browsable(false)]
_Default = Disabled
}
public enum RdpRedirectSmartCard
{
[Description("Don't share")]
Disabled = 0,
[Description("Share")]
Enabled = 1,
[Browsable(false)]
_Default = Disabled
}
public enum RdpRedirectPort
{
[Description("Don't share")]
Disabled = 0,
[Description("Share")]
Enabled = 1,
[Browsable(false)]
_Default = Disabled
}
public enum RdpRedirectDrive
{
[Description("Don't share")]
Disabled = 0,
[Description("Share")]
Enabled = 1,
[Browsable(false)]
_Default = Disabled
}
public enum RdpRedirectDevice
{
[Description("Don't share")]
Disabled = 0,
[Description("Share")]
Enabled = 1,
[Browsable(false)]
_Default = Disabled
}
public enum RdpRedirectWebAuthn
{
[Description("Don't share")]
Disabled = 0,
[Description("Share")]
Enabled = 1,
[Browsable(false)]
_Default = Enabled
}
public enum RdpNetworkLevelAuthentication
{
Disabled = 0,
Enabled = 1,
[Browsable(false)]
_Default = Enabled
}
public enum RdpHookWindowsKeys
{
//
// NB. Values correspond to IMsRdpClientSecuredSettings::KeyboardHookMode.
//
[Description("Don't redirect")]
Disabled = 0,
[Description("Redirect to remote VM")]
Enabled = 1,
[Description("Redirect in full-screen")]
FullScreenOnly = 2,
[Browsable(false)]
_Default = FullScreenOnly
}
public enum RdpRestrictedAdminMode
{
Disabled = 0,
Enabled = 1,
[Browsable(false)]
_Default = Disabled
}
public enum RdpSessionType
{
/// <summary>
/// Normal user session, might consume a CAL.
/// </summary>
[Description("Normal user-session")]
User = 0,
/// <summary>
/// Admin session, equivalent to "mstsc /admin".
/// </summary>
[Description("RDS admin-session")]
Admin = 1,
[Browsable(false)]
_Default = User
}
public enum RdpDpiScaling
{
[Description("Disabled (100%)")]
Disabled = 0,
[Description("Same as this computer")]
Enabled = 1,
[Browsable(false)]
_Default = Enabled
}
}