linux-packaging-mono/mcs/class/referencesource/System.ServiceModel/System/ServiceModel/Security/StrictModeSecurityHeaderElementInferenceEngine.cs
Xamarin Public Jenkins (auto-signing) e79aa3c0ed Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
2016-08-03 10:59:49 +00:00

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;
}
}
}
}
}
}