//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ namespace System.ServiceModel.Configuration { using System.Configuration; using System.Diagnostics.CodeAnalysis; using System.ServiceModel; using System.Globalization; using System.Net; using System.Net.Security; using System.Runtime; using System.Security.Authentication.ExtendedProtection.Configuration; using System.Security.Principal; using System.ServiceModel.Channels; using System.ComponentModel; [SuppressMessage(FxCop.Category.Configuration, FxCop.Rule.ConfigurationValidatorAttributeRule, Justification = "The ExtendedProtectionPolicyElement configuration object and the configuration validation is owned by the NCL team.")] public partial class HttpTransportElement : TransportElement { public HttpTransportElement() { } [ConfigurationProperty(ConfigurationStrings.AllowCookies, DefaultValue = HttpTransportDefaults.AllowCookies)] public bool AllowCookies { get { return (bool)base[ConfigurationStrings.AllowCookies]; } set { base[ConfigurationStrings.AllowCookies] = value; } } [ConfigurationProperty(ConfigurationStrings.RequestInitializationTimeout, DefaultValue = HttpTransportDefaults.RequestInitializationTimeoutString)] [TypeConverter(typeof(TimeSpanOrInfiniteConverter))] [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)] public TimeSpan RequestInitializationTimeout { get { return (TimeSpan)base[ConfigurationStrings.RequestInitializationTimeout]; } set { base[ConfigurationStrings.RequestInitializationTimeout] = value; } } [ConfigurationProperty(ConfigurationStrings.AuthenticationScheme, DefaultValue = HttpTransportDefaults.AuthenticationScheme)] [StandardRuntimeFlagEnumValidator(typeof(AuthenticationSchemes))] public AuthenticationSchemes AuthenticationScheme { get { return (AuthenticationSchemes)base[ConfigurationStrings.AuthenticationScheme]; } set { base[ConfigurationStrings.AuthenticationScheme] = value; } } public override Type BindingElementType { get { return typeof(HttpTransportBindingElement); } } [ConfigurationProperty(ConfigurationStrings.BypassProxyOnLocal, DefaultValue = HttpTransportDefaults.BypassProxyOnLocal)] public bool BypassProxyOnLocal { get { return (bool)base[ConfigurationStrings.BypassProxyOnLocal]; } set { base[ConfigurationStrings.BypassProxyOnLocal] = value; } } [ConfigurationProperty(ConfigurationStrings.DecompressionEnabled, DefaultValue = HttpTransportDefaults.DecompressionEnabled)] public bool DecompressionEnabled { get { return (bool)base[ConfigurationStrings.DecompressionEnabled]; } set { base[ConfigurationStrings.DecompressionEnabled] = value; } } [ConfigurationProperty(ConfigurationStrings.HostNameComparisonMode, DefaultValue = HttpTransportDefaults.HostNameComparisonMode)] [ServiceModelEnumValidator(typeof(HostNameComparisonModeHelper))] public HostNameComparisonMode HostNameComparisonMode { get { return (HostNameComparisonMode)base[ConfigurationStrings.HostNameComparisonMode]; } set { base[ConfigurationStrings.HostNameComparisonMode] = value; } } [ConfigurationProperty(ConfigurationStrings.KeepAliveEnabled, DefaultValue = HttpTransportDefaults.KeepAliveEnabled)] public bool KeepAliveEnabled { get { return (bool)base[ConfigurationStrings.KeepAliveEnabled]; } set { base[ConfigurationStrings.KeepAliveEnabled] = value; } } [ConfigurationProperty(ConfigurationStrings.MaxBufferSize, DefaultValue = TransportDefaults.MaxBufferSize)] [IntegerValidator(MinValue = 1)] public int MaxBufferSize { get { return (int)base[ConfigurationStrings.MaxBufferSize]; } set { base[ConfigurationStrings.MaxBufferSize] = value; } } [ConfigurationProperty(ConfigurationStrings.MaxPendingAccepts, DefaultValue = HttpTransportDefaults.DefaultMaxPendingAccepts)] [IntegerValidator(MinValue = 0, MaxValue = HttpTransportDefaults.MaxPendingAcceptsUpperLimit)] public int MaxPendingAccepts { get { return (int)base[ConfigurationStrings.MaxPendingAccepts]; } set { base[ConfigurationStrings.MaxPendingAccepts] = value; } } [ConfigurationProperty(ConfigurationStrings.MessageHandlerFactory, DefaultValue = HttpTransportDefaults.MessageHandlerFactory)] [HttpMessageHandlerFactoryValidator] public HttpMessageHandlerFactoryElement MessageHandlerFactory { get { return (HttpMessageHandlerFactoryElement)this[ConfigurationStrings.MessageHandlerFactory]; } set { base[ConfigurationStrings.MessageHandlerFactory] = value; } } [ConfigurationProperty(ConfigurationStrings.ProxyAddress, DefaultValue = HttpTransportDefaults.ProxyAddress)] public Uri ProxyAddress { get { return (Uri)base[ConfigurationStrings.ProxyAddress]; } set { base[ConfigurationStrings.ProxyAddress] = value; } } [ConfigurationProperty(ConfigurationStrings.ProxyAuthenticationScheme, DefaultValue = HttpTransportDefaults.ProxyAuthenticationScheme)] [StandardRuntimeEnumValidator(typeof(AuthenticationSchemes))] public AuthenticationSchemes ProxyAuthenticationScheme { get { return (AuthenticationSchemes)base[ConfigurationStrings.ProxyAuthenticationScheme]; } set { base[ConfigurationStrings.ProxyAuthenticationScheme] = value; } } [ConfigurationProperty(ConfigurationStrings.Realm, DefaultValue = HttpTransportDefaults.Realm)] [StringValidator(MinLength = 0)] public string Realm { get { return (string)base[ConfigurationStrings.Realm]; } set { if (String.IsNullOrEmpty(value)) { value = String.Empty; } base[ConfigurationStrings.Realm] = value; } } [ConfigurationProperty(ConfigurationStrings.TransferMode, DefaultValue = HttpTransportDefaults.TransferMode)] [ServiceModelEnumValidator(typeof(TransferModeHelper))] public TransferMode TransferMode { get { return (TransferMode)base[ConfigurationStrings.TransferMode]; } set { base[ConfigurationStrings.TransferMode] = value; } } [ConfigurationProperty(ConfigurationStrings.UnsafeConnectionNtlmAuthentication, DefaultValue = HttpTransportDefaults.UnsafeConnectionNtlmAuthentication)] public bool UnsafeConnectionNtlmAuthentication { get { return (bool)base[ConfigurationStrings.UnsafeConnectionNtlmAuthentication]; } set { base[ConfigurationStrings.UnsafeConnectionNtlmAuthentication] = value; } } [ConfigurationProperty(ConfigurationStrings.UseDefaultWebProxy, DefaultValue = HttpTransportDefaults.UseDefaultWebProxy)] public bool UseDefaultWebProxy { get { return (bool)base[ConfigurationStrings.UseDefaultWebProxy]; } set { base[ConfigurationStrings.UseDefaultWebProxy] = value; } } [ConfigurationProperty(ConfigurationStrings.ExtendedProtectionPolicy)] public ExtendedProtectionPolicyElement ExtendedProtectionPolicy { get { return (ExtendedProtectionPolicyElement)base[ConfigurationStrings.ExtendedProtectionPolicy]; } private set { base[ConfigurationStrings.ExtendedProtectionPolicy] = value; } } [System.Diagnostics.CodeAnalysis.SuppressMessage(FxCop.Category.Configuration, "Configuration104")] [ConfigurationProperty(ConfigurationStrings.WebSocketSettingsSectionName)] public WebSocketTransportSettingsElement WebSocketSettings { get { return (WebSocketTransportSettingsElement)base[ConfigurationStrings.WebSocketSettingsSectionName]; } set { base[ConfigurationStrings.WebSocketSettingsSectionName] = value; } } public override void ApplyConfiguration(BindingElement bindingElement) { base.ApplyConfiguration(bindingElement); HttpTransportBindingElement binding = (HttpTransportBindingElement)bindingElement; binding.AllowCookies = this.AllowCookies; binding.AuthenticationScheme = this.AuthenticationScheme; binding.BypassProxyOnLocal = this.BypassProxyOnLocal; binding.DecompressionEnabled = this.DecompressionEnabled; binding.KeepAliveEnabled = this.KeepAliveEnabled; binding.HostNameComparisonMode = this.HostNameComparisonMode; PropertyInformationCollection propertyInfo = this.ElementInformation.Properties; if (propertyInfo[ConfigurationStrings.MaxBufferSize].ValueOrigin != PropertyValueOrigin.Default) { binding.MaxBufferSize = this.MaxBufferSize; } binding.MaxPendingAccepts = this.MaxPendingAccepts; binding.ProxyAddress = this.ProxyAddress; binding.ProxyAuthenticationScheme = this.ProxyAuthenticationScheme; binding.Realm = this.Realm; binding.RequestInitializationTimeout = this.RequestInitializationTimeout; binding.TransferMode = this.TransferMode; binding.UnsafeConnectionNtlmAuthentication = this.UnsafeConnectionNtlmAuthentication; binding.UseDefaultWebProxy = this.UseDefaultWebProxy; binding.ExtendedProtectionPolicy = ChannelBindingUtility.BuildPolicy(this.ExtendedProtectionPolicy); this.WebSocketSettings.ApplyConfiguration(binding.WebSocketSettings); if (this.MessageHandlerFactory != null) { binding.MessageHandlerFactory = HttpMessageHandlerFactory.CreateFromConfigurationElement(this.MessageHandlerFactory); } } public override void CopyFrom(ServiceModelExtensionElement from) { base.CopyFrom(from); HttpTransportElement source = (HttpTransportElement)from; #pragma warning suppress 56506 // Microsoft, base.CopyFrom() validates the argument this.AllowCookies = source.AllowCookies; this.RequestInitializationTimeout = source.RequestInitializationTimeout; this.AuthenticationScheme = source.AuthenticationScheme; this.BypassProxyOnLocal = source.BypassProxyOnLocal; this.DecompressionEnabled = source.DecompressionEnabled; this.KeepAliveEnabled = source.KeepAliveEnabled; this.HostNameComparisonMode = source.HostNameComparisonMode; this.MaxBufferSize = source.MaxBufferSize; this.MaxPendingAccepts = source.MaxPendingAccepts; this.ProxyAddress = source.ProxyAddress; this.ProxyAuthenticationScheme = source.ProxyAuthenticationScheme; this.Realm = source.Realm; this.TransferMode = source.TransferMode; this.UnsafeConnectionNtlmAuthentication = source.UnsafeConnectionNtlmAuthentication; this.UseDefaultWebProxy = source.UseDefaultWebProxy; this.WebSocketSettings = source.WebSocketSettings; this.MessageHandlerFactory = source.MessageHandlerFactory; ChannelBindingUtility.CopyFrom(source.ExtendedProtectionPolicy, this.ExtendedProtectionPolicy); } protected override TransportBindingElement CreateDefaultBindingElement() { return new HttpTransportBindingElement(); } protected internal override void InitializeFrom(BindingElement bindingElement) { base.InitializeFrom(bindingElement); HttpTransportBindingElement source = (HttpTransportBindingElement)bindingElement; SetPropertyValueIfNotDefaultValue(ConfigurationStrings.AllowCookies, source.AllowCookies); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.AuthenticationScheme, source.AuthenticationScheme); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.DecompressionEnabled, source.DecompressionEnabled); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.BypassProxyOnLocal, source.BypassProxyOnLocal); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.KeepAliveEnabled, source.KeepAliveEnabled); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.HostNameComparisonMode, source.HostNameComparisonMode); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxBufferSize, source.MaxBufferSize); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxPendingAccepts, source.MaxPendingAccepts); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ProxyAddress, source.ProxyAddress); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ProxyAuthenticationScheme, source.ProxyAuthenticationScheme); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.Realm, source.Realm); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.RequestInitializationTimeout, source.RequestInitializationTimeout); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TransferMode, source.TransferMode); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UnsafeConnectionNtlmAuthentication, source.UnsafeConnectionNtlmAuthentication); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UseDefaultWebProxy, source.UseDefaultWebProxy); this.WebSocketSettings.InitializeFrom(source.WebSocketSettings); if (source.MessageHandlerFactory != null) { this.MessageHandlerFactory = source.MessageHandlerFactory.GenerateConfigurationElement(); } ChannelBindingUtility.InitializeFrom(source.ExtendedProtectionPolicy, this.ExtendedProtectionPolicy); } } }