|
//----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
namespace System.ServiceModel
{
using System.Net.Security;
using System.ServiceModel.Channels;
using System.ComponentModel;
public sealed class NetNamedPipeSecurity
{
internal const NetNamedPipeSecurityMode DefaultMode = NetNamedPipeSecurityMode.Transport;
NetNamedPipeSecurityMode mode;
NamedPipeTransportSecurity transport = new NamedPipeTransportSecurity();
public NetNamedPipeSecurity()
{
this.mode = DefaultMode;
}
NetNamedPipeSecurity(NetNamedPipeSecurityMode mode, NamedPipeTransportSecurity transport)
{
this.mode = mode;
this.transport = transport == null ? new NamedPipeTransportSecurity() : transport;
}
[DefaultValue(DefaultMode)]
public NetNamedPipeSecurityMode Mode
{
get { return this.mode; }
set
{
if (!NetNamedPipeSecurityModeHelper.IsDefined(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
}
this.mode = value;
}
}
public NamedPipeTransportSecurity Transport
{
get { return this.transport; }
set
{
if (value == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
this.transport = value;
}
}
internal WindowsStreamSecurityBindingElement CreateTransportSecurity()
{
if (mode == NetNamedPipeSecurityMode.Transport)
{
return this.transport.CreateTransportProtectionAndAuthentication();
}
else
{
return null;
}
}
internal static bool TryCreate(WindowsStreamSecurityBindingElement wssbe, NetNamedPipeSecurityMode mode, out NetNamedPipeSecurity security)
{
security = null;
NamedPipeTransportSecurity transportSecurity = new NamedPipeTransportSecurity();
if (mode == NetNamedPipeSecurityMode.Transport)
{
if (!NamedPipeTransportSecurity.IsTransportProtectionAndAuthentication(wssbe, transportSecurity))
return false;
}
security = new NetNamedPipeSecurity(mode, transportSecurity);
return true;
}
[EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeTransport()
{
if (this.transport.ProtectionLevel == ConnectionOrientedTransportDefaults.ProtectionLevel)
{
return false;
}
return true;
}
}
}
|