NetMsmqSecurity.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //----------------------------------------------------------------------------
  4. namespace System.ServiceModel
  5. {
  6. using System.Runtime;
  7. using System.ComponentModel;
  8. using System.ServiceModel.Channels;
  9. using Config = System.ServiceModel.Configuration;
  10. public sealed class NetMsmqSecurity
  11. {
  12. internal const NetMsmqSecurityMode DefaultMode = NetMsmqSecurityMode.Transport;
  13. NetMsmqSecurityMode mode;
  14. MsmqTransportSecurity transportSecurity;
  15. MessageSecurityOverMsmq messageSecurity;
  16. public NetMsmqSecurity()
  17. : this(DefaultMode, null, null)
  18. {
  19. }
  20. internal NetMsmqSecurity(NetMsmqSecurityMode mode)
  21. : this(mode, null, null)
  22. {
  23. }
  24. NetMsmqSecurity(NetMsmqSecurityMode mode, MsmqTransportSecurity transportSecurity, MessageSecurityOverMsmq messageSecurity)
  25. {
  26. Fx.Assert(NetMsmqSecurityModeHelper.IsDefined(mode), string.Format("Invalid NetMsmqSecurityMode value: {0}.", mode.ToString()));
  27. this.mode = mode;
  28. this.transportSecurity = transportSecurity == null ? new MsmqTransportSecurity() : transportSecurity;
  29. this.messageSecurity = messageSecurity == null ? new MessageSecurityOverMsmq() : messageSecurity;
  30. }
  31. [DefaultValue(NetMsmqSecurity.DefaultMode)]
  32. public NetMsmqSecurityMode Mode
  33. {
  34. get { return this.mode; }
  35. set
  36. {
  37. if (!NetMsmqSecurityModeHelper.IsDefined(value))
  38. {
  39. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
  40. }
  41. this.mode = value;
  42. }
  43. }
  44. public MsmqTransportSecurity Transport
  45. {
  46. get
  47. {
  48. if (this.transportSecurity == null)
  49. this.transportSecurity = new MsmqTransportSecurity();
  50. return this.transportSecurity;
  51. }
  52. set { this.transportSecurity = value; }
  53. }
  54. public MessageSecurityOverMsmq Message
  55. {
  56. get
  57. {
  58. if (this.messageSecurity == null)
  59. this.messageSecurity = new MessageSecurityOverMsmq();
  60. return this.messageSecurity;
  61. }
  62. set { this.messageSecurity = value; }
  63. }
  64. internal void ConfigureTransportSecurity(MsmqBindingElementBase msmq)
  65. {
  66. if (this.mode == NetMsmqSecurityMode.Transport || this.mode == NetMsmqSecurityMode.Both)
  67. msmq.MsmqTransportSecurity = this.Transport;
  68. else
  69. msmq.MsmqTransportSecurity.Disable();
  70. }
  71. internal static bool IsConfiguredTransportSecurity(MsmqTransportBindingElement msmq, out UnifiedSecurityMode mode)
  72. {
  73. if (msmq == null)
  74. {
  75. mode = UnifiedSecurityMode.None;
  76. return false;
  77. }
  78. if (msmq.MsmqTransportSecurity.Enabled)
  79. {
  80. mode = UnifiedSecurityMode.Transport | UnifiedSecurityMode.Both;
  81. }
  82. else
  83. {
  84. mode = UnifiedSecurityMode.None | UnifiedSecurityMode.Message;
  85. }
  86. return true;
  87. }
  88. internal SecurityBindingElement CreateMessageSecurity()
  89. {
  90. return this.Message.CreateSecurityBindingElement();
  91. }
  92. //
  93. internal static bool TryCreate(SecurityBindingElement sbe, NetMsmqSecurityMode mode, out NetMsmqSecurity security)
  94. {
  95. security = null;
  96. MessageSecurityOverMsmq messageSecurity;
  97. if (!MessageSecurityOverMsmq.TryCreate(sbe, out messageSecurity))
  98. messageSecurity = null;
  99. security = new NetMsmqSecurity(mode, null, messageSecurity);
  100. return sbe == null || Config.SecurityElement.AreBindingsMatching(security.CreateMessageSecurity(), sbe, false);
  101. }
  102. }
  103. }