PeerCastStation.FLV.RTMP.RTMPConnection.HandshakeNew C# (CSharp) Method

HandshakeNew() private method

private HandshakeNew ( RTMPBinaryReader c1reader, CancellationToken cancel_token ) : Task
c1reader RTMPBinaryReader
cancel_token System.Threading.CancellationToken
return Task
    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.");
        }
      }
    }