ReferenceList.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / ReferenceList.cs / 1 / ReferenceList.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.ServiceModel.Security 
{
    using System.Xml; 
    using System.ServiceModel.Security.Tokens; 

    using DictionaryManager = System.IdentityModel.DictionaryManager; 
    using ISecurityElement = System.IdentityModel.ISecurityElement;

    sealed class ReferenceList : ISecurityElement
    { 
        internal static readonly XmlDictionaryString ElementName = XD.XmlEncryptionDictionary.ReferenceList;
        const string NamespacePrefix = XmlEncryptionStrings.Prefix; 
        internal static readonly XmlDictionaryString NamespaceUri = EncryptedType.NamespaceUri; 
        internal static readonly XmlDictionaryString UriAttribute = XD.XmlEncryptionDictionary.URI;
        MostlySingletonList referredIds; 

        public ReferenceList()
        {
        } 

        public int DataReferenceCount 
        { 
            get { return this.referredIds.Count; }
        } 

        public bool HasId
        {
            get { return false; } 
        }
 
        public string Id 
        {
            get 
            {
                // PreSharp Bug: Property get methods should not throw exceptions.
                #pragma warning suppress 56503
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); 
            }
        } 
 
        public void AddReferredId(string id)
        { 
            if (id == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("id"));
            } 
            this.referredIds.Add(id);
        } 
 
        public bool ContainsReferredId(string id)
        { 
            if (id == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("id"));
            } 
            return this.referredIds.Contains(id);
        } 
 
        public string GetReferredId(int index)
        { 
            return this.referredIds[index];
        }

        public void ReadFrom(XmlDictionaryReader reader) 
        {
            reader.ReadStartElement(ElementName, NamespaceUri); 
            while (reader.IsStartElement()) 
            {
                string id = DataReference.ReadFrom(reader); 
                if (this.referredIds.Contains(id))
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
                        new MessageSecurityException(SR.GetString(SR.InvalidDataReferenceInReferenceList, "#" + id))); 
                }
                this.referredIds.Add(id); 
            } 
            reader.ReadEndElement(); // ReferenceList
            if (this.DataReferenceCount == 0) 
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.GetString(SR.ReferenceListCannotBeEmpty)));
            }
        } 

        public bool TryRemoveReferredId(string id) 
        { 
            if (id == null)
            { 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("id"));
            }
            return this.referredIds.Remove(id);
        } 

        public void WriteTo(XmlDictionaryWriter writer, DictionaryManager dictionaryManager) 
        { 
            if (this.DataReferenceCount == 0)
            { 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.ReferenceListCannotBeEmpty)));
            }
            writer.WriteStartElement(NamespacePrefix, ElementName, NamespaceUri);
            for (int i = 0; i < this.DataReferenceCount; i++) 
            {
                DataReference.WriteTo(writer, this.referredIds[i]); 
            } 
            writer.WriteEndElement(); // ReferenceList
        } 

        static class DataReference
        {
            internal static readonly XmlDictionaryString ElementName = XD.XmlEncryptionDictionary.DataReference; 
            internal static readonly XmlDictionaryString NamespaceUri = EncryptedType.NamespaceUri;
 
            public static string ReadFrom(XmlDictionaryReader reader) 
            {
                string prefix; 
                string uri = XmlHelper.ReadEmptyElementAndRequiredAttribute(reader, ElementName, NamespaceUri, ReferenceList.UriAttribute, out prefix);
                if (uri.Length < 2 || uri[0] != '#')
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( 
                        new MessageSecurityException(SR.GetString(SR.InvalidDataReferenceInReferenceList, uri)));
                } 
                return uri.Substring(1); 
            }
 
            public static void WriteTo(XmlDictionaryWriter writer, string referredId)
            {
                writer.WriteStartElement(XD.XmlEncryptionDictionary.Prefix.Value, ElementName, NamespaceUri);
                writer.WriteStartAttribute(ReferenceList.UriAttribute, null); 
                writer.WriteString("#");
                writer.WriteString(referredId); 
                writer.WriteEndAttribute(); 
                writer.WriteEndElement();
            } 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK