| File: System\ServiceModel\Channels\UnixDomainSocketTransportBindingElement.cs | Web Access |
| Project: src\src\System.ServiceModel.UnixDomainSocket\src\System.ServiceModel.UnixDomainSocket.csproj (System.ServiceModel.UnixDomainSocket) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Security.Authentication.ExtendedProtection; namespace System.ServiceModel.Channels { public class UnixDomainSocketTransportBindingElement : ConnectionOrientedTransportBindingElement { ExtendedProtectionPolicy _extendedProtectionPolicy; public UnixDomainSocketTransportBindingElement() : base() { ConnectionPoolSettings = new UnixDomainSocketConnectionPoolSettings(); _extendedProtectionPolicy = ChannelBindingUtility.DefaultPolicy; } protected UnixDomainSocketTransportBindingElement(UnixDomainSocketTransportBindingElement elementToBeCloned) : base(elementToBeCloned) { ConnectionPoolSettings = elementToBeCloned.ConnectionPoolSettings.Clone(); _extendedProtectionPolicy = elementToBeCloned._extendedProtectionPolicy; } public UnixDomainSocketConnectionPoolSettings ConnectionPoolSettings { get; } public override string Scheme => "net.uds"; public ExtendedProtectionPolicy ExtendedProtectionPolicy { get { return _extendedProtectionPolicy; } set { if (value == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(value)); } if (value.PolicyEnforcement == PolicyEnforcement.Always && !ExtendedProtectionPolicy.OSSupportsExtendedProtection) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new PlatformNotSupportedException(SR.ExtendedProtectionNotSupported)); } _extendedProtectionPolicy = value; } } public override BindingElement Clone() { return new UnixDomainSocketTransportBindingElement(this); } public override IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(context)); } if (!CanBuildChannelFactory<TChannel>(context)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel", SR.Format(SR.ChannelTypeNotSupported, typeof(TChannel))); } return (IChannelFactory<TChannel>)(object)new UnixDomainSocketChannelFactory<TChannel>(this, context); } public override T GetProperty<T>(BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(context)); } if (typeof(T) == typeof(IBindingDeliveryCapabilities)) { return (T)(object)new BindingDeliveryCapabilitiesHelper(); } else if (typeof(T) == typeof(ExtendedProtectionPolicy)) { return (T)(object)ExtendedProtectionPolicy; } else if (typeof(T) == typeof(ITransportCompressionSupport)) { return (T)(object)new TransportCompressionSupportHelper(); } else { return base.GetProperty<T>(context); } } private class BindingDeliveryCapabilitiesHelper : IBindingDeliveryCapabilities { internal BindingDeliveryCapabilitiesHelper() { } bool IBindingDeliveryCapabilities.AssuresOrderedDelivery => true; bool IBindingDeliveryCapabilities.QueuedDelivery => false; } private class TransportCompressionSupportHelper : ITransportCompressionSupport { public bool IsCompressionFormatSupported(CompressionFormat compressionFormat) => true; } } }