//----------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------- namespace System.IdentityModel { using System.Xml; /// /// This class wraps a given _reader and delegates all calls to it. /// XmlDictionaryReader class does not provide a way to set the _reader /// Quotas on the XmlDictionaryReader.CreateDictionaryReader(XmlReader) /// API. This class overrides XmlDictionaryReader.Quotas property and /// hence custom quotas can be specified. /// internal class WrappedXmlDictionaryReader : XmlDictionaryReader, IXmlLineInfo { private XmlReader reader; private XmlDictionaryReaderQuotas xmlDictionaryReaderQuotas; public WrappedXmlDictionaryReader( XmlReader reader, XmlDictionaryReaderQuotas xmlDictionaryReaderQuotas) { if (reader == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("reader"); } if (xmlDictionaryReaderQuotas == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("xmlDictionaryReaderQuotas"); } this.reader = reader; this.xmlDictionaryReaderQuotas = xmlDictionaryReaderQuotas; } public override int AttributeCount { get { return this.reader.AttributeCount; } } public override string BaseURI { get { return this.reader.BaseURI; } } public override bool CanReadBinaryContent { get { return this.reader.CanReadBinaryContent; } } public override bool CanReadValueChunk { get { return this.reader.CanReadValueChunk; } } public override int Depth { get { return this.reader.Depth; } } public override bool EOF { get { return this.reader.EOF; } } public override bool HasValue { get { return this.reader.HasValue; } } public override bool IsDefault { get { return this.reader.IsDefault; } } public override bool IsEmptyElement { get { return this.reader.IsEmptyElement; } } public override string LocalName { get { return this.reader.LocalName; } } public override string Name { get { return this.reader.Name; } } public override string NamespaceURI { get { return this.reader.NamespaceURI; } } public override XmlNameTable NameTable { get { return this.reader.NameTable; } } public override XmlNodeType NodeType { get { return this.reader.NodeType; } } public override string Prefix { get { return this.reader.Prefix; } } public override char QuoteChar { get { return this.reader.QuoteChar; } } public override ReadState ReadState { get { return this.reader.ReadState; } } public override string Value { get { return this.reader.Value; } } public override string XmlLang { get { return this.reader.XmlLang; } } public override XmlSpace XmlSpace { get { return this.reader.XmlSpace; } } public override Type ValueType { get { return this.reader.ValueType; } } public int LineNumber { get { IXmlLineInfo lineInfo = this.reader as IXmlLineInfo; if (lineInfo == null) { return 1; } return lineInfo.LineNumber; } } public int LinePosition { get { IXmlLineInfo lineInfo = this.reader as IXmlLineInfo; if (lineInfo == null) { return 1; } return lineInfo.LinePosition; } } public override XmlDictionaryReaderQuotas Quotas { get { return this.xmlDictionaryReaderQuotas; } } public override string this[int index] { get { return this.reader[index]; } } public override string this[string name] { get { return this.reader[name]; } } public override string this[string name, string namespaceUri] { get { return this.reader[name, namespaceUri]; } } public override void Close() { this.reader.Close(); } public override string GetAttribute(int index) { return this.reader.GetAttribute(index); } public override string GetAttribute(string name) { return this.reader.GetAttribute(name); } public override string GetAttribute(string name, string namespaceUri) { return this.reader.GetAttribute(name, namespaceUri); } public override bool IsStartElement(string name) { return this.reader.IsStartElement(name); } public override bool IsStartElement(string localName, string namespaceUri) { return this.reader.IsStartElement(localName, namespaceUri); } public override string LookupNamespace(string namespaceUri) { return this.reader.LookupNamespace(namespaceUri); } public override void MoveToAttribute(int index) { this.reader.MoveToAttribute(index); } public override bool MoveToAttribute(string name) { return this.reader.MoveToAttribute(name); } public override bool MoveToAttribute(string name, string namespaceUri) { return this.reader.MoveToAttribute(name, namespaceUri); } public override bool MoveToElement() { return this.reader.MoveToElement(); } public override bool MoveToFirstAttribute() { return this.reader.MoveToFirstAttribute(); } public override bool MoveToNextAttribute() { return this.reader.MoveToNextAttribute(); } public override bool Read() { return this.reader.Read(); } public override bool ReadAttributeValue() { return this.reader.ReadAttributeValue(); } public override string ReadElementString(string name) { return this.reader.ReadElementString(name); } public override string ReadElementString(string localName, string namespaceUri) { return this.reader.ReadElementString(localName, namespaceUri); } public override string ReadInnerXml() { return this.reader.ReadInnerXml(); } public override string ReadOuterXml() { return this.reader.ReadOuterXml(); } public override void ReadStartElement(string name) { this.reader.ReadStartElement(name); } public override void ReadStartElement(string localName, string namespaceUri) { this.reader.ReadStartElement(localName, namespaceUri); } public override void ReadEndElement() { this.reader.ReadEndElement(); } public override string ReadString() { return this.reader.ReadString(); } public override void ResolveEntity() { this.reader.ResolveEntity(); } public override int ReadElementContentAsBase64(byte[] buffer, int offset, int count) { return this.reader.ReadElementContentAsBase64(buffer, offset, count); } public override int ReadContentAsBase64(byte[] buffer, int offset, int count) { return this.reader.ReadContentAsBase64(buffer, offset, count); } public override int ReadElementContentAsBinHex(byte[] buffer, int offset, int count) { return this.reader.ReadElementContentAsBinHex(buffer, offset, count); } public override int ReadContentAsBinHex(byte[] buffer, int offset, int count) { return this.reader.ReadContentAsBinHex(buffer, offset, count); } public override int ReadValueChunk(char[] chars, int offset, int count) { return this.reader.ReadValueChunk(chars, offset, count); } public override bool ReadContentAsBoolean() { return this.reader.ReadContentAsBoolean(); } public override DateTime ReadContentAsDateTime() { return this.reader.ReadContentAsDateTime(); } public override decimal ReadContentAsDecimal() { return (decimal)this.reader.ReadContentAs(typeof(decimal), null); } public override double ReadContentAsDouble() { return this.reader.ReadContentAsDouble(); } public override int ReadContentAsInt() { return this.reader.ReadContentAsInt(); } public override long ReadContentAsLong() { return this.reader.ReadContentAsLong(); } public override float ReadContentAsFloat() { return this.reader.ReadContentAsFloat(); } public override string ReadContentAsString() { return this.reader.ReadContentAsString(); } public override object ReadContentAs(Type valueType, IXmlNamespaceResolver namespaceResolver) { return this.reader.ReadContentAs(valueType, namespaceResolver); } public bool HasLineInfo() { IXmlLineInfo lineInfo = this.reader as IXmlLineInfo; if (lineInfo == null) { return false; } return lineInfo.HasLineInfo(); } } }