//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ namespace System.ServiceModel.Configuration { using System; using System.Configuration; using System.ServiceModel.Channels; using System.Xml; using System.Security; using System.Runtime; public sealed partial class AddressHeaderCollectionElement : ServiceModelConfigurationElement { public AddressHeaderCollectionElement() { } internal void Copy(AddressHeaderCollectionElement source) { if (source == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("source"); } PropertyInformationCollection properties = source.ElementInformation.Properties; if (properties[ConfigurationStrings.Headers].ValueOrigin != PropertyValueOrigin.Default) { this.Headers = source.Headers; } } [ConfigurationProperty(ConfigurationStrings.Headers, DefaultValue = null)] public AddressHeaderCollection Headers { get { AddressHeaderCollection retVal = (AddressHeaderCollection)base[ConfigurationStrings.Headers]; if (null == retVal) { retVal = AddressHeaderCollection.EmptyHeaderCollection; } return retVal; } set { if (value == null) { value = AddressHeaderCollection.EmptyHeaderCollection; } base[ConfigurationStrings.Headers] = value; } } [Fx.Tag.SecurityNote(Critical = "Uses the critical helper SetIsPresent.", Safe = "Controls how/when SetIsPresent is used, not arbitrarily callable from PT (method is protected and class is sealed).")] [SecuritySafeCritical] protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey) { SetIsPresent(); DeserializeElementCore(reader); } private void DeserializeElementCore(XmlReader reader) { this.Headers = AddressHeaderCollection.ReadServiceParameters(XmlDictionaryReader.CreateDictionaryReader(reader)); } [Fx.Tag.SecurityNote(Critical = "Uses the critical helper SetIsPresent which elevates in order to set a property.", Safe = "Only passes 'this', does not let caller influence parameter.")] [SecurityCritical] void SetIsPresent() { ConfigurationHelpers.SetIsPresent(this); } protected override bool SerializeToXmlElement(XmlWriter writer, String elementName) { bool dataToWrite = this.Headers.Count != 0; if (dataToWrite && writer != null) { writer.WriteStartElement(elementName); this.Headers.WriteContentsTo(XmlDictionaryWriter.CreateDictionaryWriter(writer)); writer.WriteEndElement(); } return dataToWrite; } internal void InitializeFrom(AddressHeaderCollection headers) { SetPropertyValueIfNotDefaultValue(ConfigurationStrings.Headers, headers); } } }