private async Task HandshakeNew(RTMPBinaryReader c1reader, CancellationToken cancel_token)
{
var s1 = new byte[1536];
var rand = new Random();
rand.NextBytes(s1);
//timestamp
s1[0] = s1[1] = s1[2] = s1[3] = 0;
//version
s1[4] = 3;
s1[5] = 5;
s1[6] = 1;
s1[7] = 1;
s1 = SetServerHandshakeDigest1(s1, DigestPosition.First);
await SendAsync(s1, cancel_token);
var c1 = c1reader.ReadBytes(1536);
var c1pos = ValidateClientHandshakeDigest1(c1);
if (c1pos==DigestPosition.Unknown) {
throw new InvalidDataException("C1 digest is not matched.");
}
var s2 = SetServerHandshakeDigest2(c1, c1pos);
await SendAsync(s2, cancel_token);
using (var c2reader = await RecvAsync(1536, cancel_token)) {
var c2 = c2reader.ReadBytes(1536);
if (!ValidateClientHandshakeDigest2(c2, s1, DigestPosition.First)) {
throw new InvalidDataException("C2 digest is not matched.");
}
}
}