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");
}
}
}