/// <summary> /// Sends an OpenSecureChannel response. /// </summary> private void SendOpenSecureChannelResponse(uint requestId, TcpChannelToken token, OpenSecureChannelRequest request) { // Utils.Trace("Channel {0}: SendOpenSecureChannelResponse()", ChannelId); OpenSecureChannelResponse response = new OpenSecureChannelResponse(); response.ResponseHeader.RequestHandle = request.RequestHeader.RequestHandle; response.ResponseHeader.Timestamp = DateTime.UtcNow; response.SecurityToken.ChannelId = token.ChannelId; response.SecurityToken.TokenId = token.TokenId; response.SecurityToken.CreatedAt = token.CreatedAt; response.SecurityToken.RevisedLifetime = (uint)token.Lifetime; response.ServerNonce = token.ServerNonce; byte[] buffer = BinaryEncoder.EncodeMessage(response, Quotas.MessageContext); BufferCollection chunksToSend = null; if (ServerCertificateChain != null) { chunksToSend = WriteAsymmetricMessage( TcpMessageType.Open, requestId, ServerCertificateChain, //ServerCertificate, ClientCertificate, new ArraySegment <byte>(buffer, 0, buffer.Length)); } else { chunksToSend = WriteAsymmetricMessage( TcpMessageType.Open, requestId, //ServerCertificateChain, ServerCertificate, ClientCertificate, new ArraySegment <byte>(buffer, 0, buffer.Length)); } // write the message to the server. try { BeginWriteMessage(chunksToSend, Int32.MaxValue, null); chunksToSend = null; } finally { if (chunksToSend != null) { chunksToSend.Release(BufferManager, "SendOpenSecureChannelResponse"); } } }
/// <summary> /// Sends an OpenSecureChannel response. /// </summary> private void SendOpenSecureChannelResponse(uint requestId, TcpChannelToken token, OpenSecureChannelRequest request) { // Utils.Trace("Channel {0}: SendOpenSecureChannelResponse()", ChannelId); OpenSecureChannelResponse response = new OpenSecureChannelResponse(); response.ResponseHeader.RequestHandle = request.RequestHeader.RequestHandle; response.ResponseHeader.Timestamp = DateTime.UtcNow; response.SecurityToken.ChannelId = token.ChannelId; response.SecurityToken.TokenId = token.TokenId; response.SecurityToken.CreatedAt = token.CreatedAt; response.SecurityToken.RevisedLifetime = (uint)token.Lifetime; response.ServerNonce = token.ServerNonce; byte[] buffer = BinaryEncoder.EncodeMessage(response, Quotas.MessageContext); BufferCollection chunksToSend = WriteAsymmetricMessage( TcpMessageType.Open, requestId, //ServerCertificateChain, ServerCertificate, ClientCertificate, new ArraySegment<byte>(buffer, 0, buffer.Length)); // write the message to the server. try { BeginWriteMessage(chunksToSend, Int32.MaxValue, null); chunksToSend = null; } finally { if (chunksToSend != null) { chunksToSend.Release(BufferManager, "SendOpenSecureChannelResponse"); } } }
/// <summary> /// Initializes the message with a service fault. /// </summary> public OpenSecureChannelResponseMessage(ServiceFault ServiceFault) { this.OpenSecureChannelResponse = new OpenSecureChannelResponse(); if (ServiceFault != null) { this.OpenSecureChannelResponse.ResponseHeader = ServiceFault.ResponseHeader; } }
/// <summary> /// Initializes the message with the body. /// </summary> public OpenSecureChannelResponseMessage(OpenSecureChannelResponse OpenSecureChannelResponse) { this.OpenSecureChannelResponse = OpenSecureChannelResponse; }
/// <summary cref="IServiceMessage.CreateResponse" /> public object CreateResponse(IServiceResponse response) { OpenSecureChannelResponse body = response as OpenSecureChannelResponse; if (body == null) { body = new OpenSecureChannelResponse(); body.ResponseHeader = ((ServiceFault)response).ResponseHeader; } return new OpenSecureChannelResponseMessage(body); }