2 using System.Collections.Generic;
4 using System.ServiceModel.Channels;
5 using System.ServiceModel;
6 using System.ServiceModel.Security.Tokens;
8 namespace System.ServiceModel.Dispatcher
10 internal class SecurityHandler : BaseRequestProcessorHandler
12 protected override bool ProcessRequest (MessageProcessingContext mrc)
14 DispatchRuntime dispatch_runtime = mrc.OperationContext.EndpointDispatcher.DispatchRuntime;
15 Message negoResponce = null;
16 // process WS-Trust based negotiation
17 MessageSecurityBindingSupport support =
18 dispatch_runtime.ChannelDispatcher.Listener.GetProperty<MessageSecurityBindingSupport> ();
19 if (support != null && mrc.IncomingMessage.Headers.FindHeader ("Security", Constants.WssNamespace) < 0) {
20 CommunicationSecurityTokenAuthenticator nego =
21 support.TokenAuthenticator as CommunicationSecurityTokenAuthenticator;
23 negoResponce = nego.Communication.ProcessNegotiation (mrc.IncomingMessage);
26 if (negoResponce == null)
29 ReplyNegoResponse (mrc, negoResponce);
34 void ReplyNegoResponse (MessageProcessingContext mrc, Message negoResponse)
36 negoResponse.Headers.CopyHeadersFrom (mrc.OperationContext.OutgoingMessageHeaders);
37 negoResponse.Properties.CopyProperties (mrc.OperationContext.OutgoingMessageProperties);
38 mrc.RequestContext.Reply (negoResponse, mrc.Operation.Parent.ChannelDispatcher.timeouts.SendTimeout);