public HeartbeatMessage(byte type, byte[] payload, int paddingLength)
 {
     if (!HeartbeatMessageType.IsValid(type))
     {
         throw new ArgumentException("not a valid HeartbeatMessageType value", "type");
     }
     if (payload == null || payload.Length >= 65536)
     {
         throw new ArgumentException("must have length < 2^16", "payload");
     }
     if (paddingLength < 16)
     {
         throw new ArgumentException("must be at least 16", "paddingLength");
     }
     mType          = type;
     mPayload       = payload;
     mPaddingLength = paddingLength;
 }
    public static HeartbeatMessage Parse(Stream input)
    {
        byte b = TlsUtilities.ReadUint8(input);

        if (!HeartbeatMessageType.IsValid(b))
        {
            throw new TlsFatalAlert(47);
        }
        int           payloadLength = TlsUtilities.ReadUint16(input);
        PayloadBuffer payloadBuffer = new PayloadBuffer();

        Streams.PipeAll(input, payloadBuffer);
        byte[] array = payloadBuffer.ToTruncatedByteArray(payloadLength);
        if (array == null)
        {
            return(null);
        }
        TlsUtilities.CheckUint16(payloadBuffer.Length);
        int paddingLength = (int)payloadBuffer.Length - array.Length;

        return(new HeartbeatMessage(b, array, paddingLength));
    }