void Decode (byte[] buffer, int startIndex, int length, bool unicode)
{
int index = startIndex;
do {
var type = BitConverterLE.ToInt16 (buffer, index);
index += 2;
switch (type) {
case 0: index = startIndex + length; break; // a 'type' of 0 terminates the TargetInfo
case 1: ServerName = DecodeString (buffer, ref index, unicode); break;
case 2: DomainName = DecodeString (buffer, ref index, unicode); break;
case 3: DnsServerName = DecodeString (buffer, ref index, unicode); break;
case 4: DnsDomainName = DecodeString (buffer, ref index, unicode); break;
case 5: DnsTreeName = DecodeString (buffer, ref index, unicode); break;
case 6: Flags = DecodeFlags (buffer, ref index); break;
case 7: Timestamp = DecodeTimestamp (buffer, ref index); break;
case 9: TargetName = DecodeString (buffer, ref index, unicode); break;
default: index += 2 + BitConverterLE.ToInt16 (buffer, index); break;
}
} while (index < startIndex + length);
}