public override byte[] Encode ()
{
int versionLength = OSVersion != null ? 8 : 0;
int hostOffset = 32 + versionLength;
int domainOffset = hostOffset + host.Length;
var message = PrepareMessage (32 + domain.Length + host.Length + versionLength);
message[12] = (byte) Flags;
message[13] = (byte)((uint) Flags >> 8);
message[14] = (byte)((uint) Flags >> 16);
message[15] = (byte)((uint) Flags >> 24);
message[16] = (byte) domain.Length;
message[17] = (byte)(domain.Length >> 8);
message[18] = message[16];
message[19] = message[17];
message[20] = (byte) domainOffset;
message[21] = (byte)(domainOffset >> 8);
message[24] = (byte) host.Length;
message[25] = (byte)(host.Length >> 8);
message[26] = message[24];
message[27] = message[25];
message[28] = (byte) hostOffset;
message[29] = (byte)(hostOffset >> 8);
if (OSVersion != null) {
message[32] = (byte) OSVersion.Major;
message[33] = (byte) OSVersion.Minor;
message[34] = (byte)(OSVersion.Build);
message[35] = (byte)(OSVersion.Build >> 8);
message[36] = 0x00;
message[37] = 0x00;
message[38] = 0x00;
message[39] = 0x0f;
}
var hostName = Encoding.UTF8.GetBytes (host.ToUpperInvariant ());
Buffer.BlockCopy (hostName, 0, message, hostOffset, hostName.Length);
var domainName = Encoding.UTF8.GetBytes (domain.ToUpperInvariant ());
Buffer.BlockCopy (domainName, 0, message, domainOffset, domainName.Length);
return message;
}
}