//----------------------------------------------------------------------- // // Copyright (c) Outercurve Foundation. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.Messaging { using System; using System.Diagnostics.Contracts; /// /// An interface that must be implemented by message transforms/validators in order /// to be included in the channel stack. /// [ContractClass(typeof(IChannelBindingElementContract))] public interface IChannelBindingElement { /// /// Gets or sets the channel that this binding element belongs to. /// /// /// This property is set by the channel when it is first constructed. /// Channel Channel { get; set; } /// /// Gets the protection commonly offered (if any) by this binding element. /// /// /// This value is used to assist in sorting binding elements in the channel stack. /// MessageProtections Protection { get; } /// /// Prepares a message for sending based on the rules of this channel binding element. /// /// The message to prepare for sending. /// /// The protections (if any) that this binding element applied to the message. /// Null if this binding element did not even apply to this binding element. /// /// /// Implementations that provide message protection must honor the /// properties where applicable. /// MessageProtections? ProcessOutgoingMessage(IProtocolMessage message); /// /// Performs any transformation on an incoming message that may be necessary and/or /// validates an incoming message based on the rules of this channel binding element. /// /// The incoming message to process. /// /// The protections (if any) that this binding element applied to the message. /// Null if this binding element did not even apply to this binding element. /// /// /// Thrown when the binding element rules indicate that this message is invalid and should /// NOT be processed. /// /// /// Implementations that provide message protection must honor the /// properties where applicable. /// MessageProtections? ProcessIncomingMessage(IProtocolMessage message); } /// /// Code Contract for the interface. /// [ContractClassFor(typeof(IChannelBindingElement))] internal abstract class IChannelBindingElementContract : IChannelBindingElement { /// /// Prevents a default instance of the class from being created. /// private IChannelBindingElementContract() { } #region IChannelBindingElement Members /// /// Gets or sets the channel that this binding element belongs to. /// /// /// /// This property is set by the channel when it is first constructed. /// Channel IChannelBindingElement.Channel { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } /// /// Gets the protection commonly offered (if any) by this binding element. /// /// /// /// This value is used to assist in sorting binding elements in the channel stack. /// MessageProtections IChannelBindingElement.Protection { get { throw new NotImplementedException(); } } /// /// Prepares a message for sending based on the rules of this channel binding element. /// /// The message to prepare for sending. /// /// The protections (if any) that this binding element applied to the message. /// Null if this binding element did not even apply to this binding element. /// /// /// Implementations that provide message protection must honor the /// properties where applicable. /// MessageProtections? IChannelBindingElement.ProcessOutgoingMessage(IProtocolMessage message) { Requires.NotNull(message, "message"); Requires.ValidState(((IChannelBindingElement)this).Channel != null); throw new NotImplementedException(); } /// /// Performs any transformation on an incoming message that may be necessary and/or /// validates an incoming message based on the rules of this channel binding element. /// /// The incoming message to process. /// /// The protections (if any) that this binding element applied to the message. /// Null if this binding element did not even apply to this binding element. /// /// /// Thrown when the binding element rules indicate that this message is invalid and should /// NOT be processed. /// /// /// Implementations that provide message protection must honor the /// properties where applicable. /// MessageProtections? IChannelBindingElement.ProcessIncomingMessage(IProtocolMessage message) { Requires.NotNull(message, "message"); Requires.ValidState(((IChannelBindingElement)this).Channel != null); throw new NotImplementedException(); } #endregion } }