EncryptedHeader.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------
  4. namespace System.ServiceModel.Security
  5. {
  6. using System.Diagnostics;
  7. using System.ServiceModel.Channels;
  8. using System.ServiceModel;
  9. using System.Globalization;
  10. using System.Xml;
  11. using System.IO;
  12. using ISecurityElement = System.IdentityModel.ISecurityElement;
  13. sealed class EncryptedHeader : DelegatingHeader
  14. {
  15. EncryptedHeaderXml headerXml;
  16. string name;
  17. string namespaceUri;
  18. MessageVersion version;
  19. public EncryptedHeader(MessageHeader plainTextHeader, EncryptedHeaderXml headerXml, string name, string namespaceUri, MessageVersion version)
  20. : base(plainTextHeader)
  21. {
  22. if (!headerXml.HasId || headerXml.Id == null)
  23. {
  24. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.GetString(SR.EncryptedHeaderXmlMustHaveId)));
  25. }
  26. this.headerXml = headerXml;
  27. this.name = name;
  28. this.namespaceUri = namespaceUri;
  29. this.version = version;
  30. }
  31. public string Id
  32. {
  33. get { return this.headerXml.Id; }
  34. }
  35. public override string Name
  36. {
  37. get { return this.name; }
  38. }
  39. public override string Namespace
  40. {
  41. get { return this.namespaceUri; }
  42. }
  43. public override string Actor
  44. {
  45. get
  46. {
  47. return this.headerXml.Actor;
  48. }
  49. }
  50. public override bool MustUnderstand
  51. {
  52. get
  53. {
  54. return this.headerXml.MustUnderstand;
  55. }
  56. }
  57. public override bool Relay
  58. {
  59. get
  60. {
  61. return this.headerXml.Relay;
  62. }
  63. }
  64. internal MessageHeader OriginalHeader
  65. {
  66. get { return this.InnerHeader; }
  67. }
  68. public override bool IsMessageVersionSupported(MessageVersion messageVersion)
  69. {
  70. return this.version.Equals( messageVersion );
  71. }
  72. protected override void OnWriteStartHeader(XmlDictionaryWriter writer, MessageVersion messageVersion)
  73. {
  74. if (!IsMessageVersionSupported(messageVersion))
  75. {
  76. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.MessageHeaderVersionNotSupported, String.Format(CultureInfo.InvariantCulture, "{0}:{1}", this.Namespace, this.Name), version.ToString()), "version"));
  77. }
  78. this.headerXml.WriteHeaderElement(writer);
  79. WriteHeaderAttributes(writer, messageVersion);
  80. this.headerXml.WriteHeaderId(writer);
  81. }
  82. protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
  83. {
  84. this.headerXml.WriteHeaderContents(writer);
  85. }
  86. }
  87. }