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