private void ProcessSendHandshakePacket(AsyncHandshakeResult asyncHandshakeResult)
{
HandshakeMessage[] messages = _handshakeSession.GetOutputMessages();
Record[] records = _handshakePacketizer.ProcessHandshakeMessages(_handshakeSession.NegotiatedVersion, messages, _recordStream.MaximumFragmentLength);
if (records.Length > 0) {
// Encrypt the handshake records
for (int i=0; i<records.Length; i++) {
_recordHandler.ProcessOutputRecord(records[i]);
}
_recordStream.BeginSend(records, new AsyncCallback(SendHandshakeCallback), asyncHandshakeResult);
} else {
if (_handshakeSession.State == HandshakeState.Finished) {
// Handshake finished, mark result as complete
asyncHandshakeResult.SetComplete();
} else if (_handshakeSession.State == HandshakeState.SendChangeCipherSpec) {
ProcessSendChangeCipherSpec(asyncHandshakeResult);
} else {
// Handshake not finished, receive the next handshake packet
_recordStream.BeginReceive(new AsyncCallback(ReceiveHandshakeCallback), asyncHandshakeResult);
}
}
}