e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
49 lines
1.9 KiB
C#
49 lines
1.9 KiB
C#
//----------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------
|
|
|
|
namespace System.ServiceModel.Security
|
|
{
|
|
using System.ServiceModel.Security.Tokens;
|
|
using System.Xml;
|
|
|
|
sealed class StrictModeSecurityHeaderElementInferenceEngine : SecurityHeaderElementInferenceEngine
|
|
{
|
|
static StrictModeSecurityHeaderElementInferenceEngine instance = new StrictModeSecurityHeaderElementInferenceEngine();
|
|
|
|
StrictModeSecurityHeaderElementInferenceEngine() { }
|
|
|
|
internal static StrictModeSecurityHeaderElementInferenceEngine Instance
|
|
{
|
|
get { return instance; }
|
|
}
|
|
|
|
public override void ExecuteProcessingPasses(ReceiveSecurityHeader securityHeader, XmlDictionaryReader reader)
|
|
{
|
|
securityHeader.ExecuteFullPass(reader);
|
|
}
|
|
|
|
public override void MarkElements(ReceiveSecurityHeaderElementManager elementManager, bool messageSecurityMode)
|
|
{
|
|
bool primarySignatureFound = false;
|
|
for (int position = 0; position < elementManager.Count; position++)
|
|
{
|
|
ReceiveSecurityHeaderEntry entry;
|
|
elementManager.GetElementEntry(position, out entry);
|
|
if (entry.elementCategory == ReceiveSecurityHeaderElementCategory.Signature)
|
|
{
|
|
if (!messageSecurityMode || primarySignatureFound)
|
|
{
|
|
elementManager.SetBindingMode(position, ReceiveSecurityHeaderBindingModes.Endorsing);
|
|
}
|
|
else
|
|
{
|
|
elementManager.SetBindingMode(position, ReceiveSecurityHeaderBindingModes.Primary);
|
|
primarySignatureFound = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|