e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
134 lines
3.7 KiB
C#
134 lines
3.7 KiB
C#
//------------------------------------------------------------
|
|
// 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 );
|
|
}
|
|
}
|
|
}
|