Lync Server 2010 Multitenant Core Unified Communications Support Added
Enterprise voice support to follow soon
This commit is contained in:
parent
3732b2143c
commit
a240fcebc6
94 changed files with 11276 additions and 39 deletions
|
@ -0,0 +1,144 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="btnAdd.Text" xml:space="preserve">
|
||||
<value>Add</value>
|
||||
</data>
|
||||
<data name="gvLyncServers.EmptyDataText" xml:space="preserve">
|
||||
<value>Located on the same server</value>
|
||||
</data>
|
||||
<data name="gvLyncServers.Text" xml:space="preserve">
|
||||
<value>Lync Servers</value>
|
||||
</data>
|
||||
<data name="lblRootOU.Text" xml:space="preserve">
|
||||
<value>Root OU:</value>
|
||||
</data>
|
||||
<data name="locLynServers.Text" xml:space="preserve">
|
||||
<value>Lync Frontend and Director Servers</value>
|
||||
</data>
|
||||
<data name="locServerName.Text" xml:space="preserve">
|
||||
<value>Enterprise pool or <br/>Standard Edition Server name:</value>
|
||||
</data>
|
||||
<data name="locSimpleUrlBase.Text" xml:space="preserve">
|
||||
<value>Simple Url Base:</value>
|
||||
</data>
|
||||
<data name="UseDefault.Text" xml:space="preserve">
|
||||
<value><Located on the same server></value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,54 @@
|
|||
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Lync_Settings.ascx.cs" Inherits="WebsitePanel.Portal.ProviderControls.Lync_Settings" %>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="Normal" width="200" >
|
||||
<asp:Localize runat="server" ID="locServerName" meta:resourcekey="locServerName"/>
|
||||
</td>
|
||||
<td >
|
||||
<asp:TextBox runat="server" ID="txtServerName" CssClass="NormalTextBox" Width="200px"/>
|
||||
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtServerName" ErrorMessage="*" Display="Dynamic" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Normal" width="200" >
|
||||
<asp:Localize runat="server" ID="locSimpleUrlBase" meta:resourcekey="locSimpleUrlBase"/>
|
||||
</td>
|
||||
<td >
|
||||
<asp:TextBox runat="server" ID="txtSimpleUrlBase" CssClass="NormalTextBox" Width="200px"/>
|
||||
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtSimpleUrlBase" ErrorMessage="*" Display="Dynamic" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="SubHead" width="200" nowrap valign="top">
|
||||
<asp:Localize ID="locLynServers" runat="server" meta:resourcekey="locLynServers"
|
||||
Text="Lync Servers:"></asp:Localize>
|
||||
</td>
|
||||
<td>
|
||||
<asp:DropDownList ID="ddlLyncServers" runat="server" CssClass="NormalTextBox">
|
||||
</asp:DropDownList>
|
||||
<asp:Button runat="server" ID="btnAddLyncServer" OnClick="btnAddLyncServer_Click" meta:resourcekey="btnAdd"
|
||||
CssClass="Button1" /><br />
|
||||
<asp:GridView ID="gvLyncServers" runat="server" AutoGenerateColumns="False" EmptyDataText="gvRecords"
|
||||
CssSelectorClass="NormalGridView" OnRowCommand="gvLyncServers_RowCommand" meta:resourcekey="gvLyncServers">
|
||||
<Columns>
|
||||
<asp:TemplateField meta:resourcekey="locServerNameColumn" ItemStyle-Width="100%" >
|
||||
<ItemTemplate>
|
||||
<asp:Label runat="server" ID="lblServiceName" Text='<%#Eval("ServiceName") + "(" + Eval("ServerName") +")"%>' />
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
|
||||
<asp:TemplateField>
|
||||
<ItemTemplate>
|
||||
<asp:ImageButton ID="cmdDelete" runat="server" SkinID="DeleteSmall" CommandName="RemoveServer"
|
||||
CommandArgument='<%#Eval("ServiceId") %>' meta:resourcekey="cmdDelete" AlternateText="Delete"
|
||||
OnClientClick="return confirm('Delete?');"></asp:ImageButton>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
</Columns>
|
||||
</asp:GridView>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
</table>
|
|
@ -0,0 +1,181 @@
|
|||
// Copyright (c) 2011, 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.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Web.UI.WebControls;
|
||||
using WebsitePanel.EnterpriseServer;
|
||||
using WebsitePanel.Providers.HostedSolution;
|
||||
|
||||
namespace WebsitePanel.Portal.ProviderControls
|
||||
{
|
||||
public partial class Lync_Settings : WebsitePanelControlBase, IHostingServiceProviderSettings
|
||||
{
|
||||
|
||||
public const string LyncServersData = "LyncServersData";
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void BindSettings(System.Collections.Specialized.StringDictionary settings)
|
||||
{
|
||||
txtServerName.Text = settings[LyncConstants.PoolFQDN];
|
||||
txtSimpleUrlBase.Text = settings[LyncConstants.SimpleUrlRoot];
|
||||
|
||||
|
||||
LyncServers = settings["LyncServersServiceID"];
|
||||
|
||||
BindLyncServices(ddlLyncServers);
|
||||
|
||||
Utils.SelectListItem(ddlLyncServers, settings["LyncServersServiceID"]);
|
||||
|
||||
UpdateLyncServersGrid();
|
||||
}
|
||||
|
||||
public void SaveSettings(System.Collections.Specialized.StringDictionary settings)
|
||||
{
|
||||
settings[LyncConstants.PoolFQDN] = txtServerName.Text.Trim();
|
||||
settings[LyncConstants.SimpleUrlRoot] = txtSimpleUrlBase.Text.Trim();
|
||||
|
||||
settings["LyncServersServiceID"] = LyncServers;
|
||||
}
|
||||
|
||||
|
||||
public string LyncServers
|
||||
{
|
||||
get
|
||||
{
|
||||
return ViewState[LyncServersData] != null ? ViewState[LyncServersData].ToString() : string.Empty;
|
||||
}
|
||||
set
|
||||
{
|
||||
ViewState[LyncServersData] = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected void btnAddLyncServer_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(LyncServers))
|
||||
LyncServers += ",";
|
||||
|
||||
LyncServers += ddlLyncServers.SelectedItem.Value;
|
||||
|
||||
UpdateLyncServersGrid();
|
||||
BindLyncServices(ddlLyncServers);
|
||||
|
||||
}
|
||||
|
||||
public List<ServiceInfo> GetServices(string data)
|
||||
{
|
||||
if (string.IsNullOrEmpty(data))
|
||||
return null;
|
||||
List<ServiceInfo> list = new List<ServiceInfo>();
|
||||
string[] servicesIds = data.Split(',');
|
||||
foreach (string current in servicesIds)
|
||||
{
|
||||
ServiceInfo serviceInfo = ES.Services.Servers.GetServiceInfo(Utils.ParseInt(current));
|
||||
list.Add(serviceInfo);
|
||||
}
|
||||
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
private void UpdateLyncServersGrid()
|
||||
{
|
||||
gvLyncServers.DataSource = GetServices(LyncServers);
|
||||
gvLyncServers.DataBind();
|
||||
}
|
||||
|
||||
|
||||
public void BindLyncServices(DropDownList ddl)
|
||||
{
|
||||
ddl.Items.Clear();
|
||||
|
||||
ServiceInfo serviceInfo = ES.Services.Servers.GetServiceInfo(PanelRequest.ServiceId);
|
||||
DataView dvServices = ES.Services.Servers.GetRawServicesByGroupName(ResourceGroups.Lync).Tables[0].DefaultView;
|
||||
|
||||
foreach (DataRowView dr in dvServices)
|
||||
{
|
||||
int serviceId = (int)dr["ServiceID"];
|
||||
ServiceInfo currentServiceInfo = ES.Services.Servers.GetServiceInfo(serviceId);
|
||||
|
||||
if (currentServiceInfo == null || currentServiceInfo.ProviderId != serviceInfo.ProviderId)
|
||||
continue;
|
||||
|
||||
List<ServiceInfo> services = GetServices(LyncServers);
|
||||
bool exists = false;
|
||||
if (services != null)
|
||||
foreach (ServiceInfo current in services)
|
||||
{
|
||||
if (current != null && current.ServiceId == serviceId)
|
||||
{
|
||||
exists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!exists)
|
||||
ddl.Items.Add(new ListItem(dr["FullServiceName"].ToString(), serviceId.ToString()));
|
||||
|
||||
}
|
||||
|
||||
ddl.Visible = ddl.Items.Count != 0;
|
||||
btnAddLyncServer.Visible = ddl.Items.Count != 0;
|
||||
|
||||
}
|
||||
|
||||
protected void gvLyncServers_RowCommand(object sender, GridViewCommandEventArgs e)
|
||||
{
|
||||
if (e.CommandName == "RemoveServer")
|
||||
{
|
||||
string str = string.Empty;
|
||||
List<ServiceInfo> services = GetServices(LyncServers);
|
||||
foreach (ServiceInfo current in services)
|
||||
{
|
||||
if (current.ServiceId == Utils.ParseInt(e.CommandArgument.ToString()))
|
||||
continue;
|
||||
|
||||
|
||||
str += current.ServiceId + ",";
|
||||
}
|
||||
|
||||
LyncServers = str.TrimEnd(',');
|
||||
UpdateLyncServersGrid();
|
||||
BindLyncServices(ddlLyncServers);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,105 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace WebsitePanel.Portal.ProviderControls {
|
||||
|
||||
|
||||
public partial class Lync_Settings {
|
||||
|
||||
/// <summary>
|
||||
/// locServerName control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Localize locServerName;
|
||||
|
||||
/// <summary>
|
||||
/// txtServerName control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox txtServerName;
|
||||
|
||||
/// <summary>
|
||||
/// RequiredFieldValidator2 control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator2;
|
||||
|
||||
/// <summary>
|
||||
/// locSimpleUrlBase control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Localize locSimpleUrlBase;
|
||||
|
||||
/// <summary>
|
||||
/// txtSimpleUrlBase control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox txtSimpleUrlBase;
|
||||
|
||||
/// <summary>
|
||||
/// RequiredFieldValidator1 control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;
|
||||
|
||||
/// <summary>
|
||||
/// locLynServers control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Localize locLynServers;
|
||||
|
||||
/// <summary>
|
||||
/// ddlLyncServers control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.DropDownList ddlLyncServers;
|
||||
|
||||
/// <summary>
|
||||
/// btnAddLyncServer control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Button btnAddLyncServer;
|
||||
|
||||
/// <summary>
|
||||
/// gvLyncServers control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.GridView gvLyncServers;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue