public static ResourceRecord Parse(byte [] !buffer, ref int offset) { string name; if ((buffer[offset] & 0xc0) == 0xc0) { // Detected compression. Name is at offset in // lower 14 bits of next 2 bytes. int start = NetworkBitConverter.ToInt16(buffer, offset); if (LabelEncoding.GetString(buffer, start & 0x3fff, out name) == 0) { throw new InvalidDnsFormatException("name"); } offset += 2; } else { int used = LabelEncoding.GetString(buffer, offset, out name); if (used == 0) { throw new InvalidDnsFormatException("name"); } offset += used; } ushort rType = NetworkBitConverter.ToUInt16(buffer, offset); offset += 2; ushort rClass = NetworkBitConverter.ToUInt16(buffer, offset); offset += 2; uint ttlSeconds = NetworkBitConverter.ToUInt32(buffer, offset); offset += 4; ushort rdataLength = NetworkBitConverter.ToUInt16(buffer, offset); offset += 2; byte [] rdata = new byte[rdataLength]; Array.Copy(buffer, offset, rdata, 0, rdataLength); offset += rdataLength; return(new ResourceRecord(name, (Type)rType, (Class)rClass, ttlSeconds, rdata)); }
public static Query !Parse(byte [] !buffer, ref int offset) { string name; int used = LabelEncoding.GetString(buffer, offset, out name); if (used == 0) { throw new InvalidDnsFormatException("name"); } offset += used; ushort qType = NetworkBitConverter.ToUInt16(buffer, offset); offset += 2; ushort qClass = NetworkBitConverter.ToUInt16(buffer, offset); offset += 2; return(new Query(name, (Type)qType, (Class)qClass)); }