StrictModeSecurityHeaderElementInferenceEngine.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //----------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------
  4. namespace System.ServiceModel.Security
  5. {
  6. using System.ServiceModel.Security.Tokens;
  7. using System.Xml;
  8. sealed class StrictModeSecurityHeaderElementInferenceEngine : SecurityHeaderElementInferenceEngine
  9. {
  10. static StrictModeSecurityHeaderElementInferenceEngine instance = new StrictModeSecurityHeaderElementInferenceEngine();
  11. StrictModeSecurityHeaderElementInferenceEngine() { }
  12. internal static StrictModeSecurityHeaderElementInferenceEngine Instance
  13. {
  14. get { return instance; }
  15. }
  16. public override void ExecuteProcessingPasses(ReceiveSecurityHeader securityHeader, XmlDictionaryReader reader)
  17. {
  18. securityHeader.ExecuteFullPass(reader);
  19. }
  20. public override void MarkElements(ReceiveSecurityHeaderElementManager elementManager, bool messageSecurityMode)
  21. {
  22. bool primarySignatureFound = false;
  23. for (int position = 0; position < elementManager.Count; position++)
  24. {
  25. ReceiveSecurityHeaderEntry entry;
  26. elementManager.GetElementEntry(position, out entry);
  27. if (entry.elementCategory == ReceiveSecurityHeaderElementCategory.Signature)
  28. {
  29. if (!messageSecurityMode || primarySignatureFound)
  30. {
  31. elementManager.SetBindingMode(position, ReceiveSecurityHeaderBindingModes.Endorsing);
  32. }
  33. else
  34. {
  35. elementManager.SetBindingMode(position, ReceiveSecurityHeaderBindingModes.Primary);
  36. primarySignatureFound = true;
  37. }
  38. }
  39. }
  40. }
  41. }
  42. }