PeerCastStation.FLV.RTMP.RTMPSourceConnection.Handshake C# (CSharp) Method

Handshake() private method

private Handshake ( CancellationToken cancel_token ) : Task
cancel_token System.Threading.CancellationToken
return Task
    private async Task<bool> Handshake(CancellationToken cancel_token)
    {
      Logger.Debug("Handshake start");
      var rand = new Random();
      var c0 = await RecvAsync(1, cancel_token);
      await connection.Stream.WriteByteAsync(0x03, cancel_token);
      var s1vec = new byte[1528];
      rand.NextBytes(s1vec);
      await SendAsync(writer => {
        writer.Write(0);
        writer.Write(0);
        writer.Write(s1vec);
      }, cancel_token);
      using (var reader=await RecvAsync(1536, cancel_token)) {
        await SendAsync(writer => {
          writer.Write(reader.ReadInt32());
          writer.Write(reader.ReadInt32());
          writer.Write(reader.ReadBytes(1528));
        }, cancel_token);
      }
      using (var reader=await RecvAsync(1536, cancel_token)) {
        reader.ReadInt32();
        reader.ReadInt32();
        if (!s1vec.SequenceEqual(reader.ReadBytes(1528))) {
          Logger.Debug("Handshake failed");
          return false;
        }
      }
      timer.Reset();
      timer.Start();
      Logger.Debug("Handshake succeeded");
      return true;
    }