|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Security
{
using System.Xml;
using System.ServiceModel.Channels;
using System.ServiceModel;
sealed class DecryptedHeader : ReadableMessageHeader
{
XmlDictionaryReader cachedReader;
readonly byte[] decryptedBuffer;
readonly string id;
readonly string name;
readonly string namespaceUri;
readonly string actor;
readonly bool mustUnderstand;
readonly bool relay;
readonly bool isRefParam;
readonly MessageVersion version;
readonly XmlAttributeHolder[] envelopeAttributes;
readonly XmlAttributeHolder[] headerAttributes;
readonly XmlDictionaryReaderQuotas quotas;
public DecryptedHeader(byte[] decryptedBuffer,
XmlAttributeHolder[] envelopeAttributes, XmlAttributeHolder[] headerAttributes,
MessageVersion version, SignatureTargetIdManager idManager, XmlDictionaryReaderQuotas quotas)
{
if (quotas == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("quotas");
this.decryptedBuffer = decryptedBuffer;
this.version = version;
this.envelopeAttributes = envelopeAttributes;
this.headerAttributes = headerAttributes;
this.quotas = quotas;
XmlDictionaryReader reader = CreateReader();
reader.MoveToStartElement();
this.name = reader.LocalName;
this.namespaceUri = reader.NamespaceURI;
MessageHeader.GetHeaderAttributes(reader, version, out this.actor, out this.mustUnderstand, out this.relay, out this.isRefParam);
this.id = idManager.ExtractId(reader);
this.cachedReader = reader;
}
public override string Actor
{
get
{
return this.actor;
}
}
public string Id
{
get
{
return this.id;
}
}
public override bool IsReferenceParameter
{
get
{
return this.isRefParam;
}
}
public override bool MustUnderstand
{
get
{
return this.mustUnderstand;
}
}
public override string Name
{
get
{
return this.name;
}
}
public override string Namespace
{
get
{
return this.namespaceUri;
}
}
public override bool Relay
{
get
{
return this.relay;
}
}
XmlDictionaryReader CreateReader()
{
return ContextImportHelper.CreateSplicedReader(
this.decryptedBuffer,
this.envelopeAttributes,
this.headerAttributes, null, this.quotas);
}
public override XmlDictionaryReader GetHeaderReader()
{
if (this.cachedReader != null)
{
XmlDictionaryReader cachedReader = this.cachedReader;
this.cachedReader = null;
return cachedReader;
}
XmlDictionaryReader reader = CreateReader();
reader.MoveToContent();
return reader;
}
public override bool IsMessageVersionSupported(MessageVersion messageVersion)
{
return this.version.Equals( messageVersion );
}
}
}
|