protected override byte[] EncodeDataBytes(ProtocolVersion ver)
{
MemoryStream memStream = new MemoryStream();
HandshakeStream stream = new HandshakeStream(memStream);
stream.WriteUInt8(ServerVersion.Major);
stream.WriteUInt8(ServerVersion.Minor);
stream.WriteBytes(Random.GetBytes());
stream.WriteUInt8((Byte)SessionID.Length);
stream.WriteBytes(SessionID);
stream.WriteUInt16(CipherSuite);
stream.WriteUInt8(CompressionMethod);
if (Extensions.Count > 0)
{
int length = 0;
foreach (HelloExtension ext in Extensions)
{
if (!ext.SupportsProtocolVersion(ServerVersion))
{
continue;
}
length += 4 + ext.Data.Length;
}
stream.WriteUInt16((UInt16)length);
foreach (HelloExtension ext in Extensions)
{
if (!ext.SupportsProtocolVersion(ServerVersion))
{
continue;
}
UInt16 type = ext.Type;
byte[] data = ext.Data;
stream.WriteUInt16(type);
stream.WriteUInt16((UInt16)data.Length);
stream.WriteBytes(data);
}
}
return(memStream.ToArray());
}