public static MXResource Unserialize(DNSInputStream stream, UInt16 size) { return(new MXResource( stream.ReadUInt16() , stream.ReadDomain() )); }
public static DNSQuestion Unserialize(DNSInputStream stream) { var name = stream.ReadDomain(); var query_type = (ResourceRecordType)stream.ReadUInt16(); var address_class = (AddressClass)stream.ReadUInt16(); return(new DNSQuestion(name, query_type, address_class)); }
/** * A convenience wrapper around Unserialize. */ public static DNSPacket FromBytes(byte[] bytes) { var buffer_stream = new MemoryStream(bytes); var compress = new CompressionInputContext(bytes); var dns_in = new DNSInputStream(buffer_stream, compress); return(Unserialize(dns_in)); }
/** * Decodes the raw bytes of a DNS resource record into an * object. */ public static DNSRecord Unserialize(DNSInputStream stream) { var name = stream.ReadDomain(); var record_type = (ResourceRecordType)stream.ReadUInt16(); var class_type = (AddressClass)stream.ReadUInt16(); var ttl = stream.ReadUInt32(); var record_size = stream.ReadUInt16(); IDNSResource resource = null; switch (record_type.Normalize()) { case ResourceRecordType.HOST_ADDRESS: resource = AResource.Unserialize(stream, record_size); break; case ResourceRecordType.NAME_SERVER: resource = NSResource.Unserialize(stream, record_size); break; case ResourceRecordType.START_OF_AUTHORITY: resource = SOAResource.Unserialize(stream, record_size); break; case ResourceRecordType.CANONICAL_NAME: resource = CNAMEResource.Unserialize(stream, record_size); break; case ResourceRecordType.MAIL_EXCHANGE: resource = MXResource.Unserialize(stream, record_size); break; case ResourceRecordType.POINTER: resource = PTRResource.Unserialize(stream, record_size); break; case ResourceRecordType.HOST_6ADDRESS: resource = AAAAResource.Unserialize(stream, record_size); break; case ResourceRecordType.UNSUPPORTED: // Advance the byte counter - even if we can't parse it, // we have to properly ignore it stream.ReadBytes(record_size); resource = null; break; } return(new DNSRecord(name, class_type.Normalize(), ttl, resource)); }
public static DNSPacket Unserialize(DNSInputStream stream) { var id = stream.ReadUInt16(); var is_query_bit = new Field(1); var query_type_flag = new Field(4); var is_authority_bit = new Field(1); var is_truncated_bit = new Field(1); var recursive_request_bit = new Field(1); new FieldGroup() .Add(is_query_bit) .Add(query_type_flag) .Add(is_authority_bit) .Add(is_truncated_bit) .Add(recursive_request_bit) .Unpack(stream.ReadByte()); var is_query = is_query_bit.Value == 0; var query_type = (QueryType)query_type_flag.Value; var is_authority = is_authority_bit.Value == 1; var is_truncated = is_truncated_bit.Value == 1; var recursive_request = recursive_request_bit.Value == 1; var recursion_availble_bit = new Field(1); var zeroes = new Field(3); var response_type_flag = new Field(4); new FieldGroup() .Add(recursion_availble_bit) .Add(zeroes) .Add(response_type_flag) .Unpack(stream.ReadByte()); var recursive_response = recursion_availble_bit.Value == 1; var response_type = (ResponseType)response_type_flag.Value; var question_count = stream.ReadUInt16(); var answer_count = stream.ReadUInt16(); var authority_count = stream.ReadUInt16(); var additional_count = stream.ReadUInt16(); var questions = new DNSQuestion[question_count]; for (int i = 0; i < question_count; i++) { questions[i] = DNSQuestion.Unserialize(stream); if (questions[i] == null) { throw new InvalidDataException("null Question " + i); } } var answers = new DNSRecord[answer_count]; for (int i = 0; i < answer_count; i++) { answers[i] = DNSRecord.Unserialize(stream); if (answers[i] == null) { throw new InvalidDataException("null Answer " + i); } } var authority = new DNSRecord[authority_count]; for (int i = 0; i < authority_count; i++) { authority[i] = DNSRecord.Unserialize(stream); if (authority[i] == null) { throw new InvalidDataException("null Authority " + i); } } var additional = new DNSRecord[additional_count]; for (int i = 0; i < additional_count; i++) { additional[i] = DNSRecord.Unserialize(stream); if (additional[i] == null) { throw new InvalidDataException("null Additional " + i); } } return(new DNSPacket(id, is_query, query_type.Normalize(), is_authority, is_truncated, recursive_request, recursive_response, response_type.Normalize(), questions, answers, authority, additional)); }
public static AResource Unserialize(DNSInputStream stream, UInt16 size) { return(new AResource( stream.ReadIPv4Address() )); }
public static CNAMEResource Unserialize(DNSInputStream stream, UInt16 size) { return(new CNAMEResource( stream.ReadDomain() )); }