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