| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- //----------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //----------------------------------------------------------------------------
- namespace System.ServiceModel
- {
- using System.Runtime;
- using System.ComponentModel;
- using System.ServiceModel.Channels;
- using Config = System.ServiceModel.Configuration;
- public sealed class NetMsmqSecurity
- {
- internal const NetMsmqSecurityMode DefaultMode = NetMsmqSecurityMode.Transport;
- NetMsmqSecurityMode mode;
- MsmqTransportSecurity transportSecurity;
- MessageSecurityOverMsmq messageSecurity;
- public NetMsmqSecurity()
- : this(DefaultMode, null, null)
- {
- }
- internal NetMsmqSecurity(NetMsmqSecurityMode mode)
- : this(mode, null, null)
- {
- }
- NetMsmqSecurity(NetMsmqSecurityMode mode, MsmqTransportSecurity transportSecurity, MessageSecurityOverMsmq messageSecurity)
- {
- Fx.Assert(NetMsmqSecurityModeHelper.IsDefined(mode), string.Format("Invalid NetMsmqSecurityMode value: {0}.", mode.ToString()));
- this.mode = mode;
- this.transportSecurity = transportSecurity == null ? new MsmqTransportSecurity() : transportSecurity;
- this.messageSecurity = messageSecurity == null ? new MessageSecurityOverMsmq() : messageSecurity;
- }
- [DefaultValue(NetMsmqSecurity.DefaultMode)]
- public NetMsmqSecurityMode Mode
- {
- get { return this.mode; }
- set
- {
- if (!NetMsmqSecurityModeHelper.IsDefined(value))
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
- }
- this.mode = value;
- }
- }
- public MsmqTransportSecurity Transport
- {
- get
- {
- if (this.transportSecurity == null)
- this.transportSecurity = new MsmqTransportSecurity();
- return this.transportSecurity;
- }
- set { this.transportSecurity = value; }
- }
- public MessageSecurityOverMsmq Message
- {
- get
- {
- if (this.messageSecurity == null)
- this.messageSecurity = new MessageSecurityOverMsmq();
- return this.messageSecurity;
- }
- set { this.messageSecurity = value; }
- }
- internal void ConfigureTransportSecurity(MsmqBindingElementBase msmq)
- {
- if (this.mode == NetMsmqSecurityMode.Transport || this.mode == NetMsmqSecurityMode.Both)
- msmq.MsmqTransportSecurity = this.Transport;
- else
- msmq.MsmqTransportSecurity.Disable();
- }
- internal static bool IsConfiguredTransportSecurity(MsmqTransportBindingElement msmq, out UnifiedSecurityMode mode)
- {
- if (msmq == null)
- {
- mode = UnifiedSecurityMode.None;
- return false;
- }
- if (msmq.MsmqTransportSecurity.Enabled)
- {
- mode = UnifiedSecurityMode.Transport | UnifiedSecurityMode.Both;
- }
- else
- {
- mode = UnifiedSecurityMode.None | UnifiedSecurityMode.Message;
- }
- return true;
- }
- internal SecurityBindingElement CreateMessageSecurity()
- {
- return this.Message.CreateSecurityBindingElement();
- }
- //
- internal static bool TryCreate(SecurityBindingElement sbe, NetMsmqSecurityMode mode, out NetMsmqSecurity security)
- {
- security = null;
- MessageSecurityOverMsmq messageSecurity;
- if (!MessageSecurityOverMsmq.TryCreate(sbe, out messageSecurity))
- messageSecurity = null;
- security = new NetMsmqSecurity(mode, null, messageSecurity);
- return sbe == null || Config.SecurityElement.AreBindingsMatching(security.CreateMessageSecurity(), sbe, false);
- }
- }
- }
|