//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ namespace System.ServiceModel.Configuration { using System.Configuration; using System.Runtime; using System.ServiceModel.Channels; using System.ServiceModel.Configuration; using System.Xml; using System.Diagnostics.CodeAnalysis; public sealed partial class ByteStreamMessageEncodingElement : BindingElementExtensionElement { public ByteStreamMessageEncodingElement() { } [SuppressMessage(FxCop.Category.Configuration, FxCop.Rule.ConfigurationPropertyAttributeRule, Justification = "this property not a configuration property")] public override Type BindingElementType { get { return typeof(ByteStreamMessageEncodingBindingElement); } } [ConfigurationProperty(ByteStreamConfigurationStrings.ReaderQuotas)] public XmlDictionaryReaderQuotasElement ReaderQuotas { get { return (XmlDictionaryReaderQuotasElement)base[ByteStreamConfigurationStrings.ReaderQuotas]; } } public override void ApplyConfiguration(BindingElement bindingElement) { base.ApplyConfiguration(bindingElement); ByteStreamMessageEncodingBindingElement binding = (ByteStreamMessageEncodingBindingElement)bindingElement; this.ApplyConfiguration(binding.ReaderQuotas); } public override void CopyFrom(ServiceModelExtensionElement from) { base.CopyFrom(from); ByteStreamMessageEncodingElement source = (ByteStreamMessageEncodingElement)from; this.CopyFrom(source.ReaderQuotas); } protected internal override void InitializeFrom(BindingElement bindingElement) { base.InitializeFrom(bindingElement); ByteStreamMessageEncodingBindingElement element = (ByteStreamMessageEncodingBindingElement)bindingElement; this.InitializeFrom(element.ReaderQuotas); } protected internal override BindingElement CreateBindingElement() { ByteStreamMessageEncodingBindingElement binding = new ByteStreamMessageEncodingBindingElement(); this.ApplyConfiguration(binding); return binding; } void ApplyConfiguration(XmlDictionaryReaderQuotas readerQuotas) { if (readerQuotas == null) { throw FxTrace.Exception.ArgumentNull("readerQuotas"); } XmlDictionaryReaderQuotasElement oldQuotas = this.ReaderQuotas; if (oldQuotas.MaxDepth != 0) { readerQuotas.MaxDepth = oldQuotas.MaxDepth; } if (oldQuotas.MaxStringContentLength != 0) { readerQuotas.MaxStringContentLength = oldQuotas.MaxStringContentLength; } if (oldQuotas.MaxArrayLength != 0) { readerQuotas.MaxArrayLength = oldQuotas.MaxArrayLength; } if (oldQuotas.MaxBytesPerRead != 0) { readerQuotas.MaxBytesPerRead = oldQuotas.MaxBytesPerRead; } if (oldQuotas.MaxNameTableCharCount != 0) { readerQuotas.MaxNameTableCharCount = oldQuotas.MaxNameTableCharCount; } } void InitializeFrom(XmlDictionaryReaderQuotas readerQuotas) { if (readerQuotas == null) { throw FxTrace.Exception.ArgumentNull("readerQuotas"); } XmlDictionaryReaderQuotasElement thisQuotas = this.ReaderQuotas; // Can't call thisQuotas.InitializeFrom() because it's internal to System.ServiceModel.dll, so we duplicate the logic if (readerQuotas.MaxDepth != EncoderDefaults.MaxDepth && readerQuotas.MaxDepth != 0) { thisQuotas.MaxDepth = readerQuotas.MaxDepth; } if (readerQuotas.MaxStringContentLength != EncoderDefaults.MaxStringContentLength && readerQuotas.MaxStringContentLength != 0) { thisQuotas.MaxStringContentLength = readerQuotas.MaxStringContentLength; } if (readerQuotas.MaxArrayLength != EncoderDefaults.MaxArrayLength && readerQuotas.MaxArrayLength != 0) { thisQuotas.MaxArrayLength = readerQuotas.MaxArrayLength; } if (readerQuotas.MaxBytesPerRead != EncoderDefaults.MaxBytesPerRead && readerQuotas.MaxBytesPerRead != 0) { thisQuotas.MaxBytesPerRead = readerQuotas.MaxBytesPerRead; } if (readerQuotas.MaxNameTableCharCount != EncoderDefaults.MaxNameTableCharCount && readerQuotas.MaxNameTableCharCount != 0) { thisQuotas.MaxNameTableCharCount = readerQuotas.MaxNameTableCharCount; } } void CopyFrom(XmlDictionaryReaderQuotasElement readerQuotas) { XmlDictionaryReaderQuotasElement thisQuotas = this.ReaderQuotas; thisQuotas.MaxDepth = readerQuotas.MaxDepth; thisQuotas.MaxStringContentLength = readerQuotas.MaxStringContentLength; thisQuotas.MaxArrayLength = readerQuotas.MaxArrayLength; thisQuotas.MaxBytesPerRead = readerQuotas.MaxBytesPerRead; thisQuotas.MaxNameTableCharCount = readerQuotas.MaxNameTableCharCount; } } }