diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql
index 6c4e9176..0347f00b 100644
--- a/WebsitePanel/Database/update_db.sql
+++ b/WebsitePanel/Database/update_db.sql
@@ -6184,7 +6184,7 @@ CREATE PROCEDURE [dbo].[UpdateRDSCollectionSettings]
)
AS
-UPDATE UpdateRDSCollectionSettings
+UPDATE RDSCollectionSettings
SET
RDSCollectionId = @RDSCollectionId,
DisconnectedSessionLimitMin = @DisconnectedSessionLimitMin,
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
index f53a5bee..5b87a4eb 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
@@ -32,12 +32,16 @@ namespace WebsitePanel.EnterpriseServer {
private System.Threading.SendOrPostCallback GetRdsCollectionOperationCompleted;
+ private System.Threading.SendOrPostCallback GetRdsCollectionSettingsOperationCompleted;
+
private System.Threading.SendOrPostCallback GetOrganizationRdsCollectionsOperationCompleted;
private System.Threading.SendOrPostCallback AddRdsCollectionOperationCompleted;
private System.Threading.SendOrPostCallback EditRdsCollectionOperationCompleted;
+ private System.Threading.SendOrPostCallback EditRdsCollectionSettingsOperationCompleted;
+
private System.Threading.SendOrPostCallback GetRdsCollectionsPagedOperationCompleted;
private System.Threading.SendOrPostCallback RemoveRdsCollectionOperationCompleted;
@@ -104,6 +108,9 @@ namespace WebsitePanel.EnterpriseServer {
///
public event GetRdsCollectionCompletedEventHandler GetRdsCollectionCompleted;
+ ///
+ public event GetRdsCollectionSettingsCompletedEventHandler GetRdsCollectionSettingsCompleted;
+
///
public event GetOrganizationRdsCollectionsCompletedEventHandler GetOrganizationRdsCollectionsCompleted;
@@ -113,6 +120,9 @@ namespace WebsitePanel.EnterpriseServer {
///
public event EditRdsCollectionCompletedEventHandler EditRdsCollectionCompleted;
+ ///
+ public event EditRdsCollectionSettingsCompletedEventHandler EditRdsCollectionSettingsCompleted;
+
///
public event GetRdsCollectionsPagedCompletedEventHandler GetRdsCollectionsPagedCompleted;
@@ -241,6 +251,47 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetRdsCollectionSettings", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public RdsCollectionSettings GetRdsCollectionSettings(int collectionId) {
+ object[] results = this.Invoke("GetRdsCollectionSettings", new object[] {
+ collectionId});
+ return ((RdsCollectionSettings)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginGetRdsCollectionSettings(int collectionId, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("GetRdsCollectionSettings", new object[] {
+ collectionId}, callback, asyncState);
+ }
+
+ ///
+ public RdsCollectionSettings EndGetRdsCollectionSettings(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((RdsCollectionSettings)(results[0]));
+ }
+
+ ///
+ public void GetRdsCollectionSettingsAsync(int collectionId) {
+ this.GetRdsCollectionSettingsAsync(collectionId, null);
+ }
+
+ ///
+ public void GetRdsCollectionSettingsAsync(int collectionId, object userState) {
+ if ((this.GetRdsCollectionSettingsOperationCompleted == null)) {
+ this.GetRdsCollectionSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetRdsCollectionSettingsOperationCompleted);
+ }
+ this.InvokeAsync("GetRdsCollectionSettings", new object[] {
+ collectionId}, this.GetRdsCollectionSettingsOperationCompleted, userState);
+ }
+
+ private void OnGetRdsCollectionSettingsOperationCompleted(object arg) {
+ if ((this.GetRdsCollectionSettingsCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetRdsCollectionSettingsCompleted(this, new GetRdsCollectionSettingsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetOrganizationRdsCollections", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public RdsCollection[] GetOrganizationRdsCollections(int itemId) {
@@ -370,6 +421,50 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/EditRdsCollectionSettings", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public ResultObject EditRdsCollectionSettings(int itemId, RdsCollection collection) {
+ object[] results = this.Invoke("EditRdsCollectionSettings", new object[] {
+ itemId,
+ collection});
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginEditRdsCollectionSettings(int itemId, RdsCollection collection, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("EditRdsCollectionSettings", new object[] {
+ itemId,
+ collection}, callback, asyncState);
+ }
+
+ ///
+ public ResultObject EndEditRdsCollectionSettings(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public void EditRdsCollectionSettingsAsync(int itemId, RdsCollection collection) {
+ this.EditRdsCollectionSettingsAsync(itemId, collection, null);
+ }
+
+ ///
+ public void EditRdsCollectionSettingsAsync(int itemId, RdsCollection collection, object userState) {
+ if ((this.EditRdsCollectionSettingsOperationCompleted == null)) {
+ this.EditRdsCollectionSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEditRdsCollectionSettingsOperationCompleted);
+ }
+ this.InvokeAsync("EditRdsCollectionSettings", new object[] {
+ itemId,
+ collection}, this.EditRdsCollectionSettingsOperationCompleted, userState);
+ }
+
+ private void OnEditRdsCollectionSettingsOperationCompleted(object arg) {
+ if ((this.EditRdsCollectionSettingsCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.EditRdsCollectionSettingsCompleted(this, new EditRdsCollectionSettingsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetRdsCollectionsPaged", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public RdsCollectionPaged GetRdsCollectionsPaged(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows) {
@@ -1737,6 +1832,32 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void GetRdsCollectionSettingsCompletedEventHandler(object sender, GetRdsCollectionSettingsCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetRdsCollectionSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal GetRdsCollectionSettingsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public RdsCollectionSettings Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((RdsCollectionSettings)(this.results[0]));
+ }
+ }
+ }
+
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetOrganizationRdsCollectionsCompletedEventHandler(object sender, GetOrganizationRdsCollectionsCompletedEventArgs e);
@@ -1815,6 +1936,32 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void EditRdsCollectionSettingsCompletedEventHandler(object sender, EditRdsCollectionSettingsCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class EditRdsCollectionSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal EditRdsCollectionSettingsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public ResultObject Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((ResultObject)(this.results[0]));
+ }
+ }
+ }
+
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetRdsCollectionsPagedCompletedEventHandler(object sender, GetRdsCollectionsPagedCompletedEventArgs e);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
index 137defe7..86a2de49 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
@@ -4556,6 +4556,95 @@ namespace WebsitePanel.EnterpriseServer
#region RDS
+ public static IDataReader GetRdsCollectionSettingsByCollectionId(int collectionId)
+ {
+ return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetRDSCollectionSettingsByCollectionId",
+ new SqlParameter("@RDSCollectionID", collectionId)
+ );
+ }
+
+ public static int AddRdsCollectionSettings(RdsCollectionSettings settings)
+ {
+ return AddRdsCollectionSettings(settings.RdsCollectionId, settings.DisconnectedSessionLimitMin, settings.ActiveSessionLimitMin, settings.IdleSessionLimitMin, settings.BrokenConnectionAction,
+ settings.AutomaticReconnectionEnabled, settings.TemporaryFoldersDeletedOnExit, settings.TemporaryFoldersPerSession, settings.ClientDeviceRedirectionOptions, settings.ClientPrinterRedirected,
+ settings.ClientPrinterAsDefault, settings.RDEasyPrintDriverEnabled, settings.MaxRedirectedMonitors);
+ }
+
+ private static int AddRdsCollectionSettings(int rdsCollectionId, int disconnectedSessionLimitMin, int activeSessionLimitMin, int idleSessionLimitMin, string brokenConnectionAction,
+ bool automaticReconnectionEnabled, bool temporaryFoldersDeletedOnExit, bool temporaryFoldersPerSession, string clientDeviceRedirectionOptions, bool ClientPrinterRedirected,
+ bool clientPrinterAsDefault, bool rdEasyPrintDriverEnabled, int maxRedirectedMonitors)
+ {
+ SqlParameter rdsCollectionSettingsId = new SqlParameter("@RDSCollectionSettingsID", SqlDbType.Int);
+ rdsCollectionSettingsId.Direction = ParameterDirection.Output;
+
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "AddRDSCollectionSettings",
+ rdsCollectionSettingsId,
+ new SqlParameter("@RdsCollectionId", rdsCollectionId),
+ new SqlParameter("@DisconnectedSessionLimitMin", disconnectedSessionLimitMin),
+ new SqlParameter("@ActiveSessionLimitMin", activeSessionLimitMin),
+ new SqlParameter("@IdleSessionLimitMin", idleSessionLimitMin),
+ new SqlParameter("@BrokenConnectionAction", brokenConnectionAction),
+ new SqlParameter("@AutomaticReconnectionEnabled", automaticReconnectionEnabled),
+ new SqlParameter("@TemporaryFoldersDeletedOnExit", temporaryFoldersDeletedOnExit),
+ new SqlParameter("@TemporaryFoldersPerSession", temporaryFoldersPerSession),
+ new SqlParameter("@ClientDeviceRedirectionOptions", clientDeviceRedirectionOptions),
+ new SqlParameter("@ClientPrinterRedirected", ClientPrinterRedirected),
+ new SqlParameter("@ClientPrinterAsDefault", clientPrinterAsDefault),
+ new SqlParameter("@RDEasyPrintDriverEnabled", rdEasyPrintDriverEnabled),
+ new SqlParameter("@MaxRedirectedMonitors", maxRedirectedMonitors)
+ );
+
+ return Convert.ToInt32(rdsCollectionSettingsId.Value);
+ }
+
+ public static void UpdateRDSCollectionSettings(RdsCollectionSettings settings)
+ {
+ UpdateRDSCollectionSettings(settings.Id, settings.RdsCollectionId, settings.DisconnectedSessionLimitMin, settings.ActiveSessionLimitMin, settings.IdleSessionLimitMin, settings.BrokenConnectionAction,
+ settings.AutomaticReconnectionEnabled, settings.TemporaryFoldersDeletedOnExit, settings.TemporaryFoldersPerSession, settings.ClientDeviceRedirectionOptions, settings.ClientPrinterRedirected,
+ settings.ClientPrinterAsDefault, settings.RDEasyPrintDriverEnabled, settings.MaxRedirectedMonitors);
+ }
+
+ public static void UpdateRDSCollectionSettings(int id, int rdsCollectionId, int disconnectedSessionLimitMin, int activeSessionLimitMin, int idleSessionLimitMin, string brokenConnectionAction,
+ bool automaticReconnectionEnabled, bool temporaryFoldersDeletedOnExit, bool temporaryFoldersPerSession, string clientDeviceRedirectionOptions, bool ClientPrinterRedirected,
+ bool clientPrinterAsDefault, bool rdEasyPrintDriverEnabled, int maxRedirectedMonitors)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "UpdateRDSCollectionSettings",
+ new SqlParameter("@Id", id),
+ new SqlParameter("@RdsCollectionId", rdsCollectionId),
+ new SqlParameter("@DisconnectedSessionLimitMin", disconnectedSessionLimitMin),
+ new SqlParameter("@ActiveSessionLimitMin", activeSessionLimitMin),
+ new SqlParameter("@IdleSessionLimitMin", idleSessionLimitMin),
+ new SqlParameter("@BrokenConnectionAction", brokenConnectionAction),
+ new SqlParameter("@AutomaticReconnectionEnabled", automaticReconnectionEnabled),
+ new SqlParameter("@TemporaryFoldersDeletedOnExit", temporaryFoldersDeletedOnExit),
+ new SqlParameter("@TemporaryFoldersPerSession", temporaryFoldersPerSession),
+ new SqlParameter("@ClientDeviceRedirectionOptions", clientDeviceRedirectionOptions),
+ new SqlParameter("@ClientPrinterRedirected", ClientPrinterRedirected),
+ new SqlParameter("@ClientPrinterAsDefault", clientPrinterAsDefault),
+ new SqlParameter("@RDEasyPrintDriverEnabled", rdEasyPrintDriverEnabled),
+ new SqlParameter("@MaxRedirectedMonitors", maxRedirectedMonitors)
+ );
+ }
+
+ public static void DeleteRDSCollectionSettings(int id)
+ {
+ SqlHelper.ExecuteNonQuery(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "DeleteRDSCollectionSettings",
+ new SqlParameter("@Id", id)
+ );
+ }
+
public static IDataReader GetRDSCollectionsByItemId(int itemId)
{
return SqlHelper.ExecuteReader(
@@ -4614,7 +4703,7 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@ItemID", itemId),
new SqlParameter("@Name", name),
new SqlParameter("@Description", description),
- new SqlParameter("DisplayName", displayName)
+ new SqlParameter("@DisplayName", displayName)
);
// read identity
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
index c7338859..67ab6ab2 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
@@ -58,6 +58,11 @@ namespace WebsitePanel.EnterpriseServer
return GetRdsCollectionInternal(collectionId);
}
+ public static RdsCollectionSettings GetRdsCollectionSettings(int collectionId)
+ {
+ return GetRdsCollectionSettingsInternal(collectionId);
+ }
+
public static List GetOrganizationRdsCollections(int itemId)
{
return GetOrganizationRdsCollectionsInternal(itemId);
@@ -73,6 +78,11 @@ namespace WebsitePanel.EnterpriseServer
return EditRdsCollectionInternal(itemId, collection);
}
+ public static ResultObject EditRdsCollectionSettings(int itemId, RdsCollection collection)
+ {
+ return EditRdsCollectionSettingsInternal(itemId, collection);
+ }
+
public static RdsCollectionPaged GetRdsCollectionsPaged(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
{
return GetRdsCollectionsPagedInternal(itemId, filterColumn, filterValue, sortColumn, startRow, maximumRows);
@@ -226,13 +236,15 @@ namespace WebsitePanel.EnterpriseServer
private static RdsCollection GetRdsCollectionInternal(int collectionId)
{
var collection = ObjectUtils.FillObjectFromDataReader(DataProvider.GetRDSCollectionById(collectionId));
+ var collectionSettings = ObjectUtils.FillObjectFromDataReader(DataProvider.GetRdsCollectionSettingsByCollectionId(collectionId));
+ collection.Settings = collectionSettings;
var result = TaskManager.StartResultTask("REMOTE_DESKTOP_SERVICES", "ADD_RDS_COLLECTION");
try
{
// load organization
- Organization org = OrganizationController.GetOrganization(4115);
+ Organization org = OrganizationController.GetOrganization(collection.ItemId);
if (org == null)
{
result.IsSuccess = false;
@@ -253,6 +265,13 @@ namespace WebsitePanel.EnterpriseServer
return collection;
}
+ private static RdsCollectionSettings GetRdsCollectionSettingsInternal(int collectionId)
+ {
+ var collection = ObjectUtils.FillObjectFromDataReader(DataProvider.GetRDSCollectionById(collectionId));
+
+ return ObjectUtils.FillObjectFromDataReader(DataProvider.GetRdsCollectionSettingsByCollectionId(collectionId));
+ }
+
private static List GetOrganizationRdsCollectionsInternal(int itemId)
{
var collections = ObjectUtils.CreateListFromDataReader(DataProvider.GetRDSCollectionsByItemId(itemId));
@@ -280,8 +299,37 @@ namespace WebsitePanel.EnterpriseServer
var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
collection.Name = GetFormattedCollectionName(collection.DisplayName, org.OrganizationId);
+
+ collection.Settings = new RdsCollectionSettings
+ {
+ DisconnectedSessionLimitMin = 0,
+ ActiveSessionLimitMin = 0,
+ IdleSessionLimitMin = 0,
+ BrokenConnectionAction = BrokenConnectionActionValues.Disconnect.ToString(),
+ AutomaticReconnectionEnabled = true,
+ TemporaryFoldersDeletedOnExit = true,
+ TemporaryFoldersPerSession = true,
+ ClientDeviceRedirectionOptions = string.Join(",", new List
+ {
+ ClientDeviceRedirectionOptionValues.AudioVideoPlayBack.ToString(),
+ ClientDeviceRedirectionOptionValues.AudioRecording.ToString(),
+ ClientDeviceRedirectionOptionValues.SmartCard.ToString(),
+ ClientDeviceRedirectionOptionValues.Clipboard.ToString(),
+ ClientDeviceRedirectionOptionValues.Drive.ToString(),
+ ClientDeviceRedirectionOptionValues.PlugAndPlayDevice.ToString()
+ }.ToArray()),
+ ClientPrinterRedirected = true,
+ ClientPrinterAsDefault = true,
+ RDEasyPrintDriverEnabled = true,
+ MaxRedirectedMonitors = 16
+ };
+
rds.CreateCollection(org.OrganizationId, collection);
- collection.Id = DataProvider.AddRDSCollection(itemId, collection.Name, collection.Description, collection.DisplayName);
+ collection.Id = DataProvider.AddRDSCollection(itemId, collection.Name, collection.Description, collection.DisplayName);
+
+ collection.Settings.RdsCollectionId = collection.Id;
+ int settingsId = DataProvider.AddRdsCollectionSettings(collection.Settings);
+ collection.Settings.Id = settingsId;
foreach (var server in collection.Servers)
{
@@ -359,6 +407,54 @@ namespace WebsitePanel.EnterpriseServer
return result;
}
+ private static ResultObject EditRdsCollectionSettingsInternal(int itemId, RdsCollection collection)
+ {
+ var result = TaskManager.StartResultTask("REMOTE_DESKTOP_SERVICES", "EDIT_RDS_COLLECTION_SETTINGS");
+
+ try
+ {
+ Organization org = OrganizationController.GetOrganization(itemId);
+
+ if (org == null)
+ {
+ result.IsSuccess = false;
+ result.AddError("", new NullReferenceException("Organization not found"));
+ return result;
+ }
+
+ var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
+ rds.EditRdsCollectionSettings(collection);
+ var collectionSettings = ObjectUtils.FillObjectFromDataReader(DataProvider.GetRdsCollectionSettingsByCollectionId(collection.Id));
+
+ if (collectionSettings == null)
+ {
+ DataProvider.AddRdsCollectionSettings(collection.Settings);
+ }
+ else
+ {
+ DataProvider.UpdateRDSCollectionSettings(collection.Settings);
+ }
+ }
+ catch (Exception ex)
+ {
+ result.AddError("REMOTE_DESKTOP_SERVICES_ADD_RDS_COLLECTION", ex);
+ throw TaskManager.WriteError(ex);
+ }
+ finally
+ {
+ if (!result.IsSuccess)
+ {
+ TaskManager.CompleteResultTask(result);
+ }
+ else
+ {
+ TaskManager.CompleteResultTask();
+ }
+ }
+
+ return result;
+ }
+
private static RdsCollectionPaged GetRdsCollectionsPagedInternal(int itemId, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows)
{
DataSet ds = DataProvider.GetRDSCollectionsPaged(itemId, filterColumn, filterValue, sortColumn, startRow, maximumRows);
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
index 4061033d..3aed999a 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
@@ -58,6 +58,12 @@ namespace WebsitePanel.EnterpriseServer
return RemoteDesktopServicesController.GetRdsCollection(collectionId);
}
+ [WebMethod]
+ public RdsCollectionSettings GetRdsCollectionSettings(int collectionId)
+ {
+ return RemoteDesktopServicesController.GetRdsCollectionSettings(collectionId);
+ }
+
[WebMethod]
public List GetOrganizationRdsCollections(int itemId)
{
@@ -76,6 +82,12 @@ namespace WebsitePanel.EnterpriseServer
return RemoteDesktopServicesController.EditRdsCollection(itemId, collection);
}
+ [WebMethod]
+ public ResultObject EditRdsCollectionSettings(int itemId, RdsCollection collection)
+ {
+ return RemoteDesktopServicesController.EditRdsCollectionSettings(itemId, collection);
+ }
+
[WebMethod]
public RdsCollectionPaged GetRdsCollectionsPaged(int itemId, string filterColumn, string filterValue,
string sortColumn, int startRow, int maximumRows)
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
index 455db52d..343baa96 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
@@ -65,5 +65,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
bool SetApplicationUsers(string collectionName, RemoteApplication remoteApp, string[] users);
bool CheckRDSServerAvaliable(string hostname);
List GetServersExistingInCollections();
+ void EditRdsCollectionSettings(RdsCollection collection);
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsCollection.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsCollection.cs
index 9814a216..0b9727aa 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsCollection.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsCollection.cs
@@ -37,6 +37,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
public RdsCollection()
{
Servers = new List();
+ Settings = new RdsCollectionSettings();
}
public int Id { get; set; }
@@ -45,5 +46,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
public string Description { get; set; }
public string DisplayName { get; set; }
public List Servers { get; set; }
+ public RdsCollectionSettings Settings { get; set; }
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsCollectionSettings.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsCollectionSettings.cs
new file mode 100644
index 00000000..5827ecc6
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsCollectionSettings.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace WebsitePanel.Providers.RemoteDesktopServices
+{
+ [Serializable]
+ public class RdsCollectionSettings
+ {
+ public int Id { get; set; }
+ public int RdsCollectionId { get; set; }
+ public int DisconnectedSessionLimitMin { get; set; }
+ public int ActiveSessionLimitMin { get; set; }
+ public int IdleSessionLimitMin { get; set; }
+ public string BrokenConnectionAction { get; set; }
+ public bool AutomaticReconnectionEnabled { get; set; }
+ public bool TemporaryFoldersDeletedOnExit { get; set; }
+ public bool TemporaryFoldersPerSession { get; set; }
+ public string ClientDeviceRedirectionOptions { get; set; }
+ public bool ClientPrinterRedirected { get; set; }
+ public bool ClientPrinterAsDefault { get; set; }
+ public bool RDEasyPrintDriverEnabled { get; set; }
+ public int MaxRedirectedMonitors { get; set; }
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsEnums.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsEnums.cs
new file mode 100644
index 00000000..ded659f3
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsEnums.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace WebsitePanel.Providers.RemoteDesktopServices
+{
+ public enum BrokenConnectionActionValues
+ {
+ Disconnect,
+ LogOff
+ }
+
+ public enum ClientDeviceRedirectionOptionValues
+ {
+ AudioVideoPlayBack,
+ AudioRecording,
+ SmartCard,
+ PlugAndPlayDevice,
+ Drive,
+ Clipboard
+ }
+
+ public enum SecurityLayerValues
+ {
+ RDP,
+ Negotiate,
+ SSL
+ }
+
+ public enum EncryptionLevel
+ {
+ Low,
+ ClientCompatible,
+ High,
+ FipsCompliant
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
index 99707c63..e3d9ff2b 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
@@ -131,6 +131,8 @@
+
+
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
index 0a71b867..05a2dc37 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
@@ -35,6 +35,7 @@ using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Runtime.Remoting;
using System.Text;
+using System.Reflection;
using Microsoft.Win32;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Server.Utils;
@@ -258,6 +259,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
throw new Exception("Collection not created");
}
+ EditRdsCollectionSettingsInternal(collection, runSpace);
var orgPath = GetOrganizationPath(organizationId);
if (!ActiveDirectoryUtils.AdObjectExists(GetComputerGroupPath(organizationId, collection.Name)))
@@ -310,6 +312,30 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
return result;
}
+ public void EditRdsCollectionSettings(RdsCollection collection)
+ {
+ Runspace runSpace = null;
+
+ try
+ {
+ runSpace = OpenRunspace();
+
+ if (collection.Settings != null)
+ {
+ var errors = EditRdsCollectionSettingsInternal(collection, runSpace);
+
+ if (errors.Count > 0)
+ {
+ throw new Exception(string.Format("Settings not setted:\r\n{0}", string.Join("r\\n\\", errors.ToArray())));
+ }
+ }
+ }
+ finally
+ {
+ CloseRunspace(runSpace);
+ }
+ }
+
public List GetServersExistingInCollections()
{
Runspace runSpace = null;
@@ -1618,6 +1644,38 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
return existingHosts;
}
+ internal List EditRdsCollectionSettingsInternal(RdsCollection collection, Runspace runspace)
+ {
+ object[] errors;
+ Command cmd = new Command("Set-RDSessionCollectionConfiguration");
+ cmd.Parameters.Add("CollectionName", collection.Name);
+ cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
+
+ var properties = collection.Settings.GetType().GetProperties();
+
+ foreach(var prop in properties)
+ {
+ if (prop.Name.ToLower() != "id" && prop.Name.ToLower() != "rdscollectionid")
+ {
+ var value = prop.GetValue(collection.Settings, null);
+
+ if (value != null)
+ {
+ cmd.Parameters.Add(prop.Name, value);
+ }
+ }
+ }
+
+ ExecuteShellCommand(runspace, cmd, false, out errors);
+
+ if (errors != null)
+ {
+ return errors.Select(e => e.ToString()).ToList();
+ }
+
+ return new List();
+ }
+
#endregion
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
index dd085a7e..772de6e9 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
@@ -1,31 +1,3 @@
-// Copyright (c) 2015, Outercurve Foundation.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification,
-// are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice, this
-// list of conditions and the following disclaimer.
-//
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the following disclaimer in the documentation
-// and/or other materials provided with the distribution.
-//
-// - Neither the name of the Outercurve Foundation nor the names of its
-// contributors may be used to endorse or promote products derived from this
-// software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
@@ -59,6 +31,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
private System.Threading.SendOrPostCallback CreateCollectionOperationCompleted;
+ private System.Threading.SendOrPostCallback EditRdsCollectionSettingsOperationCompleted;
+
private System.Threading.SendOrPostCallback AddRdsServersToDeploymentOperationCompleted;
private System.Threading.SendOrPostCallback GetCollectionOperationCompleted;
@@ -109,6 +83,9 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
///
public event CreateCollectionCompletedEventHandler CreateCollectionCompleted;
+ ///
+ public event EditRdsCollectionSettingsCompletedEventHandler EditRdsCollectionSettingsCompleted;
+
///
public event AddRdsServersToDeploymentCompletedEventHandler AddRdsServersToDeploymentCompleted;
@@ -217,6 +194,46 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/EditRdsCollectionSettings", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public void EditRdsCollectionSettings(RdsCollection collection) {
+ this.Invoke("EditRdsCollectionSettings", new object[] {
+ collection});
+ }
+
+ ///
+ public System.IAsyncResult BeginEditRdsCollectionSettings(RdsCollection collection, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("EditRdsCollectionSettings", new object[] {
+ collection}, callback, asyncState);
+ }
+
+ ///
+ public void EndEditRdsCollectionSettings(System.IAsyncResult asyncResult) {
+ this.EndInvoke(asyncResult);
+ }
+
+ ///
+ public void EditRdsCollectionSettingsAsync(RdsCollection collection) {
+ this.EditRdsCollectionSettingsAsync(collection, null);
+ }
+
+ ///
+ public void EditRdsCollectionSettingsAsync(RdsCollection collection, object userState) {
+ if ((this.EditRdsCollectionSettingsOperationCompleted == null)) {
+ this.EditRdsCollectionSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEditRdsCollectionSettingsOperationCompleted);
+ }
+ this.InvokeAsync("EditRdsCollectionSettings", new object[] {
+ collection}, this.EditRdsCollectionSettingsOperationCompleted, userState);
+ }
+
+ private void OnEditRdsCollectionSettingsOperationCompleted(object arg) {
+ if ((this.EditRdsCollectionSettingsCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.EditRdsCollectionSettingsCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/AddRdsServersToDeployment", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@@ -1172,6 +1189,10 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
}
}
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void EditRdsCollectionSettingsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
+
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void AddRdsServersToDeploymentCompletedEventHandler(object sender, AddRdsServersToDeploymentCompletedEventArgs e);
diff --git a/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
index e004f3f6..1dd8b6e6 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
@@ -76,6 +76,22 @@ namespace WebsitePanel.Server
}
}
+ [WebMethod, SoapHeader("settings")]
+ public void EditRdsCollectionSettings(RdsCollection collection)
+ {
+ try
+ {
+ Log.WriteStart("'{0}' EditRdsCollectionSettings", ProviderSettings.ProviderName);
+ RDSProvider.EditRdsCollectionSettings(collection);
+ Log.WriteEnd("'{0}' EditRdsCollectionSettings", ProviderSettings.ProviderName);
+ }
+ catch (Exception ex)
+ {
+ Log.WriteError(String.Format("'{0}' EditRdsCollectionSettings", ProviderSettings.ProviderName), ex);
+ throw;
+ }
+ }
+
[WebMethod, SoapHeader("settings")]
public bool AddRdsServersToDeployment(RdsServer[] servers)
{
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ESModule_ControlsHierarchy.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ESModule_ControlsHierarchy.config
index 435afa1d..29dde726 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ESModule_ControlsHierarchy.config
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/ESModule_ControlsHierarchy.config
@@ -149,4 +149,5 @@
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config
index d2caf292..885e8b53 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Data/WebsitePanel_Modules.config
@@ -579,7 +579,8 @@
-
+
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx
index ad62b955..3d851e29 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx
@@ -5638,4 +5638,7 @@
Collection not created
+
+ RDS Collection settings not updated
+
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Skin.css b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Skin.css
index d1328e2c..08834b23 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Skin.css
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Skin.css
@@ -25,9 +25,10 @@ td.Normal > br {display:none;}
.NormalTextBox + br + span {font-size:11px; color:#888;}
td.Normal .NormalTextBox + span {display:inline-block; padding:0;}
.FormSimpleLabel {padding:9px 8px 14px 0; color:#555; vertical-align:top;}
-.FormLabel150, .FormLabel200 {padding:9px 8px 14px 0; color:#888; vertical-align:top;}
+.FormLabel150, .FormLabel200, .FormLabel260 {padding:9px 8px 14px 0; color:#888; vertical-align:top;}
.FormLabel150 {width:150px;}
.FormLabel200 {width:200px;}
+.FormLabel260 {width:260px;}
.Huge {font-family:'Segoe UI Light','Open Sans',Arial!important; font-size:36px; font-weight:300; color:#333; background:none !important; border:none !important; padding:0 !important; letter-spacing:-1px;}
.FormBody .Huge {font-size:18px; font-weight:600; letter-spacing:0;}
.Right .SubHead {width:80px;}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/App_LocalResources/RDSEditCollectionSettings.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/App_LocalResources/RDSEditCollectionSettings.ascx.resx
new file mode 100644
index 00000000..98985552
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/App_LocalResources/RDSEditCollectionSettings.ascx.resx
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Active session limit:
+
+
+ When session limit is reached or connection is broken:
+
+
+ End a disconneted session:
+
+
+ Enable redirection for the following:
+
+
+ Idle session limit:
+
+
+ Monitors
+
+
+ Maximum number of redirected monitors:
+
+
+ Printers
+
+
+ Set RD Session Host server timeout and reconnection settings for the session collection.
+
+
+ Temporary folder settings:
+
+
+ Edit RDS Collection Settings
+
+
+ Client Settings
+
+
+ Session Settings
+
+
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionApps.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionApps.ascx.cs
index da547518..01addcb1 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionApps.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionApps.ascx.cs
@@ -37,8 +37,7 @@ using WebsitePanel.Providers.RemoteDesktopServices;
namespace WebsitePanel.Portal.RDS
{
public partial class RDSEditCollectionApps : WebsitePanelModuleBase
- {
-
+ {
protected void Page_Load(object sender, EventArgs e)
{
remoreApps.Module = Module;
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx
new file mode 100644
index 00000000..a2bd0546
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx
@@ -0,0 +1,186 @@
+<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RDSEditCollectionSettings.ascx.cs" Inherits="WebsitePanel.Portal.RDS.RDSEditCollectionSettings" %>
+<%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
+<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
+<%@ Register Src="UserControls/RDSCollectionApps.ascx" TagName="CollectionApps" TagPrefix="wsp"%>
+<%@ Register Src="UserControls/RDSCollectionTabs.ascx" TagName="CollectionTabs" TagPrefix="wsp" %>
+<%@ Register Src="UserControls/RDSSessionLimit.ascx" TagName="SessionLimit" TagPrefix="wsp" %>
+<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../UserControls/CollapsiblePanel.ascx" %>
+<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx.cs
new file mode 100644
index 00000000..b64a0df6
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx.cs
@@ -0,0 +1,228 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using WebsitePanel.Providers.RemoteDesktopServices;
+
+namespace WebsitePanel.Portal.RDS
+{
+ public partial class RDSEditCollectionSettings : WebsitePanelModuleBase
+ {
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ WriteScriptBlock();
+
+ if (!IsPostBack)
+ {
+ RdsCollection collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
+ RdsCollectionSettings settings = ES.Services.RDS.GetRdsCollectionSettings(PanelRequest.CollectionID);
+ collection.Settings = settings;
+
+ if (collection.Settings == null)
+ {
+ collection.Settings = new RdsCollectionSettings
+ {
+ DisconnectedSessionLimitMin = 0,
+ ActiveSessionLimitMin = 0,
+ IdleSessionLimitMin = 0,
+ BrokenConnectionAction = BrokenConnectionActionValues.Disconnect.ToString(),
+ AutomaticReconnectionEnabled = true,
+ TemporaryFoldersDeletedOnExit = true,
+ TemporaryFoldersPerSession = true,
+ ClientDeviceRedirectionOptions = string.Join(",", new List
+ {
+ ClientDeviceRedirectionOptionValues.AudioVideoPlayBack.ToString(),
+ ClientDeviceRedirectionOptionValues.AudioRecording.ToString(),
+ ClientDeviceRedirectionOptionValues.SmartCard.ToString(),
+ ClientDeviceRedirectionOptionValues.Clipboard.ToString(),
+ ClientDeviceRedirectionOptionValues.Drive.ToString(),
+ ClientDeviceRedirectionOptionValues.PlugAndPlayDevice.ToString()
+ }.ToArray()),
+ ClientPrinterRedirected = true,
+ ClientPrinterAsDefault = true,
+ RDEasyPrintDriverEnabled = true,
+ MaxRedirectedMonitors = 16
+ };
+ }
+
+ litCollectionName.Text = collection.DisplayName;
+ BindControls(collection);
+ }
+ }
+
+ private void BindControls(RdsCollection collection)
+ {
+ slDisconnectedSessionLimit.SelectedLimit = collection.Settings.DisconnectedSessionLimitMin;
+ slActiveSessionLimit.SelectedLimit = collection.Settings.ActiveSessionLimitMin;
+ slIdleSessionLimit.SelectedLimit = collection.Settings.IdleSessionLimitMin;
+
+ if (collection.Settings.BrokenConnectionAction == BrokenConnectionActionValues.Disconnect.ToString())
+ {
+ chDisconnect.Checked = true;
+ chAutomaticReconnection.Enabled = true;
+ }
+ else
+ {
+ chEndSession.Checked = true;
+ chAutomaticReconnection.Enabled = false;
+ }
+
+ chAutomaticReconnection.Checked = collection.Settings.AutomaticReconnectionEnabled;
+ chDeleteOnExit.Checked = collection.Settings.TemporaryFoldersDeletedOnExit;
+ chUseFolders.Checked = collection.Settings.TemporaryFoldersPerSession;
+
+ if (collection.Settings.ClientDeviceRedirectionOptions != null)
+ {
+ chAudioVideo.Checked = collection.Settings.ClientDeviceRedirectionOptions.Contains(ClientDeviceRedirectionOptionValues.AudioVideoPlayBack.ToString());
+ chAudioRecording.Checked = collection.Settings.ClientDeviceRedirectionOptions.Contains(ClientDeviceRedirectionOptionValues.AudioRecording.ToString());
+ chDrives.Checked = collection.Settings.ClientDeviceRedirectionOptions.Contains(ClientDeviceRedirectionOptionValues.Drive.ToString());
+ chSmartCards.Checked = collection.Settings.ClientDeviceRedirectionOptions.Contains(ClientDeviceRedirectionOptionValues.SmartCard.ToString());
+ chPlugPlay.Checked = collection.Settings.ClientDeviceRedirectionOptions.Contains(ClientDeviceRedirectionOptionValues.PlugAndPlayDevice.ToString());
+ chClipboard.Checked = collection.Settings.ClientDeviceRedirectionOptions.Contains(ClientDeviceRedirectionOptionValues.Clipboard.ToString());
+ }
+
+ chPrinterRedirection.Checked = collection.Settings.ClientPrinterRedirected;
+ chDefaultDevice.Checked = collection.Settings.ClientPrinterAsDefault;
+ chDefaultDevice.Enabled = collection.Settings.ClientPrinterRedirected;
+ chEasyPrint.Checked = collection.Settings.RDEasyPrintDriverEnabled;
+ chEasyPrint.Enabled = collection.Settings.ClientPrinterRedirected;
+ tbMonitorsNumber.Text = collection.Settings.MaxRedirectedMonitors.ToString();
+ }
+
+ private bool EditCollectionSettings()
+ {
+ try
+ {
+ RdsCollection collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
+ collection.Settings.RdsCollectionId = collection.Id;
+ collection.Settings = GetSettings(collection.Settings);
+ ES.Services.RDS.EditRdsCollectionSettings(PanelRequest.ItemID, collection);
+ }
+ catch (Exception ex)
+ {
+ ShowErrorMessage("RDSCOLLECTIONSETTINGS_NOT_UPDATES", ex);
+ return false;
+ }
+
+ return true;
+ }
+
+ private RdsCollectionSettings GetSettings(RdsCollectionSettings settings)
+ {
+ settings.DisconnectedSessionLimitMin = slDisconnectedSessionLimit.SelectedLimit;
+ settings.ActiveSessionLimitMin = slActiveSessionLimit.SelectedLimit;
+ settings.IdleSessionLimitMin = slIdleSessionLimit.SelectedLimit;
+ settings.AutomaticReconnectionEnabled = chAutomaticReconnection.Checked;
+
+ if (chDisconnect.Checked)
+ {
+ settings.BrokenConnectionAction = BrokenConnectionActionValues.Disconnect.ToString();
+ }
+ else
+ {
+ settings.BrokenConnectionAction = BrokenConnectionActionValues.LogOff.ToString();
+ }
+
+ settings.TemporaryFoldersDeletedOnExit = chDeleteOnExit.Checked;
+ settings.TemporaryFoldersPerSession = chUseFolders.Checked;
+ settings.ClientPrinterRedirected = chPrinterRedirection.Checked;
+ settings.ClientPrinterAsDefault = chDefaultDevice.Checked;
+ settings.RDEasyPrintDriverEnabled = chEasyPrint.Checked;
+ settings.MaxRedirectedMonitors = Convert.ToInt32(tbMonitorsNumber.Text);
+
+ List redirectionOptions = new List();
+
+ if (chAudioVideo.Checked)
+ {
+ redirectionOptions.Add(ClientDeviceRedirectionOptionValues.AudioVideoPlayBack.ToString());
+ }
+
+ if (chAudioRecording.Checked)
+ {
+ redirectionOptions.Add(ClientDeviceRedirectionOptionValues.AudioRecording.ToString());
+ }
+
+ if (chSmartCards.Checked)
+ {
+ redirectionOptions.Add(ClientDeviceRedirectionOptionValues.SmartCard.ToString());
+ }
+
+ if (chPlugPlay.Checked)
+ {
+ redirectionOptions.Add(ClientDeviceRedirectionOptionValues.PlugAndPlayDevice.ToString());
+ }
+
+ if (chDrives.Checked)
+ {
+ redirectionOptions.Add(ClientDeviceRedirectionOptionValues.Drive.ToString());
+ }
+
+ if (chClipboard.Checked)
+ {
+ redirectionOptions.Add(ClientDeviceRedirectionOptionValues.Clipboard.ToString());
+ }
+
+ settings.ClientDeviceRedirectionOptions = string.Join(",", redirectionOptions.ToArray());
+
+ return settings;
+ }
+
+ protected void btnSave_Click(object sender, EventArgs e)
+ {
+ if (!Page.IsValid)
+ {
+ return;
+ }
+
+ EditCollectionSettings();
+ }
+
+ protected void btnSaveExit_Click(object sender, EventArgs e)
+ {
+ if (!Page.IsValid)
+ {
+ return;
+ }
+
+ if (EditCollectionSettings())
+ {
+ Response.Redirect(EditUrl("ItemID", PanelRequest.ItemID.ToString(), "rds_collections", "SpaceID=" + PanelSecurity.PackageId));
+ }
+ }
+
+ protected override void OnPreRender(EventArgs e)
+ {
+ chPrinterRedirection.Attributes["onclick"] = String.Format("TogglePrinterCheckboxes('{0}', '{1}', '{2}');", chPrinterRedirection.ClientID, chDefaultDevice.ClientID, chEasyPrint.ClientID);
+ chDisconnect.Attributes["onclick"] = String.Format("EnableReconnectionCheckbox('{0}', true);", chAutomaticReconnection.ClientID);
+ chEndSession.Attributes["onclick"] = String.Format("EnableReconnectionCheckbox('{0}', false);", chAutomaticReconnection.ClientID);
+ base.OnPreRender(e);
+ }
+
+ private void WriteScriptBlock()
+ {
+ string scriptKey = "RdsSettingsScript";
+ if (!Page.ClientScript.IsClientScriptBlockRegistered(scriptKey))
+ {
+ Page.ClientScript.RegisterClientScriptBlock(GetType(), scriptKey, @"");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx.designer.cs
new file mode 100644
index 00000000..0bb4e3f3
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollectionSettings.ascx.designer.cs
@@ -0,0 +1,366 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WebsitePanel.Portal.RDS {
+
+
+ public partial class RDSEditCollectionSettings {
+
+ ///
+ /// asyncTasks control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
+
+ ///
+ /// imgEditRDSCollection control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Image imgEditRDSCollection;
+
+ ///
+ /// locTitle control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locTitle;
+
+ ///
+ /// litCollectionName control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Literal litCollectionName;
+
+ ///
+ /// tabs control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.RDS.UserControls.RdsServerTabs tabs;
+
+ ///
+ /// messageBox control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
+
+ ///
+ /// secRdsSessionSettings control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.CollapsiblePanel secRdsSessionSettings;
+
+ ///
+ /// panelRdsSessionSettings control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Panel panelRdsSessionSettings;
+
+ ///
+ /// locSessionLimitHeader control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locSessionLimitHeader;
+
+ ///
+ /// locDisconnectedSessionLimit control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locDisconnectedSessionLimit;
+
+ ///
+ /// slDisconnectedSessionLimit control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.RDS.UserControls.RDSSessionLimit slDisconnectedSessionLimit;
+
+ ///
+ /// locActiveSessionLimit control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locActiveSessionLimit;
+
+ ///
+ /// slActiveSessionLimit control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.RDS.UserControls.RDSSessionLimit slActiveSessionLimit;
+
+ ///
+ /// locIdleSessionLimit control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locIdleSessionLimit;
+
+ ///
+ /// slIdleSessionLimit control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.RDS.UserControls.RDSSessionLimit slIdleSessionLimit;
+
+ ///
+ /// locCollectionBroken control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locCollectionBroken;
+
+ ///
+ /// chDisconnect control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.RadioButton chDisconnect;
+
+ ///
+ /// chAutomaticReconnection control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chAutomaticReconnection;
+
+ ///
+ /// chEndSession control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.RadioButton chEndSession;
+
+ ///
+ /// locTempFolder control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locTempFolder;
+
+ ///
+ /// chDeleteOnExit control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chDeleteOnExit;
+
+ ///
+ /// chUseFolders control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chUseFolders;
+
+ ///
+ /// secRdsClientSettings control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.CollapsiblePanel secRdsClientSettings;
+
+ ///
+ /// panelRdsClientSettings control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Panel panelRdsClientSettings;
+
+ ///
+ /// locEnableRedirection control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locEnableRedirection;
+
+ ///
+ /// chAudioVideo control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chAudioVideo;
+
+ ///
+ /// chAudioRecording control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chAudioRecording;
+
+ ///
+ /// chSmartCards control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chSmartCards;
+
+ ///
+ /// chPlugPlay control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chPlugPlay;
+
+ ///
+ /// chDrives control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chDrives;
+
+ ///
+ /// chClipboard control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chClipboard;
+
+ ///
+ /// locPrinters control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locPrinters;
+
+ ///
+ /// chPrinterRedirection control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chPrinterRedirection;
+
+ ///
+ /// chDefaultDevice control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chDefaultDevice;
+
+ ///
+ /// chEasyPrint control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.CheckBox chEasyPrint;
+
+ ///
+ /// locMonitors control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locMonitors;
+
+ ///
+ /// locMonitorsNumber control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locMonitorsNumber;
+
+ ///
+ /// tbMonitorsNumber control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.TextBox tbMonitorsNumber;
+
+ ///
+ /// buttonPanel control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel;
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionTabs.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionTabs.ascx
index 5ad4020a..06dc8446 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionTabs.ascx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionTabs.ascx
@@ -5,13 +5,13 @@
-
+
<%# Eval("Name") %>
-
+
<%# Eval("Name") %>
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionTabs.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionTabs.ascx.cs
index 340559f7..7c99c275 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionTabs.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionTabs.ascx.cs
@@ -19,8 +19,9 @@ namespace WebsitePanel.Portal.RDS.UserControls
private void BindTabs()
{
- List tabsList = new List();
+ List tabsList = new List();
tabsList.Add(CreateTab("rds_edit_collection", "Tab.RdsServers"));
+ tabsList.Add(CreateTab("rds_edit_collection_settings", "Tab.Settings"));
tabsList.Add(CreateTab("rds_collection_edit_apps", "Tab.RdsApplications"));
tabsList.Add(CreateTab("rds_collection_edit_users", "Tab.RdsUsers"));
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx
new file mode 100644
index 00000000..44011983
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx
@@ -0,0 +1,22 @@
+<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RDSSessionLimit.ascx.cs" Inherits="WebsitePanel.Portal.RDS.UserControls.RDSSessionLimit" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx.cs
new file mode 100644
index 00000000..ebbdbe02
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace WebsitePanel.Portal.RDS.UserControls
+{
+ public partial class RDSSessionLimit : System.Web.UI.UserControl
+ {
+ public int SelectedLimit
+ {
+ get
+ {
+ return Convert.ToInt32(SessionLimit.SelectedItem.Value);
+ }
+ set
+ {
+ SessionLimit.SelectedValue = value.ToString();
+ }
+ }
+
+ protected void Page_Load(object sender, EventArgs e)
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx.designer.cs
new file mode 100644
index 00000000..6a4e7ec0
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSSessionLimit.ascx.designer.cs
@@ -0,0 +1,24 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WebsitePanel.Portal.RDS.UserControls {
+
+
+ public partial class RDSSessionLimit {
+
+ ///
+ /// SessionLimit control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.DropDownList SessionLimit;
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj
index e077bc36..0156e3bd 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebsitePanel.Portal.Modules.csproj
@@ -211,35 +211,35 @@
-
+
OrganizationDeletedUsers.ascx
ASPXCodeBehind
-
-
- ExchangeCheckDomainName.ascx
- ASPXCodeBehind
-
-
- OrganizationDeletedUsers.ascx
-
-
+
+
ExchangeCheckDomainName.ascx
-
-
+ ASPXCodeBehind
+
+
+ OrganizationDeletedUsers.ascx
+
+
+ ExchangeCheckDomainName.ascx
+
+
OrganizationDeletedUserGeneralSettings.ascx
ASPXCodeBehind
-
-
+
+
Windows2012_Settings.ascx
ASPXCodeBehind
-
-
+
+
OrganizationDeletedUserGeneralSettings.ascx
-
-
+
+
Windows2012_Settings.ascx
-
-
+
+
OrganizationDeletedUserMemberOf.ascx
ASPXCodeBehind
@@ -302,6 +302,13 @@
RDSEditCollectionApps.ascx
+
+ RDSEditCollectionSettings.ascx
+ ASPXCodeBehind
+
+
+ RDSEditCollectionSettings.ascx
+
RDSEditCollectionUsers.ascx
ASPXCodeBehind
@@ -351,6 +358,13 @@
RDSCollectionTabs.ascx
+
+ RDSSessionLimit.ascx
+ ASPXCodeBehind
+
+
+ RDSSessionLimit.ascx
+
True
True
@@ -4341,11 +4355,13 @@
+
+
@@ -4353,6 +4369,7 @@
+
@@ -4366,7 +4383,9 @@
Designer
-
+
+ Designer
+
ResXFileCodeGenerator
DomainLookupView.ascx.Designer.cs
@@ -5649,7 +5668,9 @@
Designer
-
+
+ Designer
+