@@ -269,10 +269,26 @@ return [[[OFADNSResourceRecord alloc] initWithName: name recordClass: recordClass recordType: recordType + data: data + TTL: TTL] autorelease]; + case OF_DNS_RESOURCE_RECORD_TYPE_NS: + j = i; + + data = parseName(buffer, length, &j, + ALLOWED_POINTER_LEVELS); + + if (j != i + dataLength) + @throw [OFInvalidServerReplyException + exception]; + + return [[[OFNSDNSResourceRecord alloc] + initWithName: name + recordClass: recordClass + recordType: recordType data: data TTL: TTL] autorelease]; case OF_DNS_RESOURCE_RECORD_TYPE_CNAME: j = i; @@ -283,10 +299,26 @@ @throw [OFInvalidServerReplyException exception]; return [[[OFCNAMEDNSResourceRecord alloc] initWithName: name + recordClass: recordClass + recordType: recordType + data: data + TTL: TTL] autorelease]; + case OF_DNS_RESOURCE_RECORD_TYPE_PTR: + j = i; + + data = parseName(buffer, length, &j, + ALLOWED_POINTER_LEVELS); + + if (j != i + dataLength) + @throw [OFInvalidServerReplyException + exception]; + + return [[[OFPTRDNSResourceRecord alloc] + initWithName: name recordClass: recordClass recordType: recordType data: data TTL: TTL] autorelease]; case OF_DNS_RESOURCE_RECORD_TYPE_MX: @@ -308,10 +340,20 @@ return [[[OFMXDNSResourceRecord alloc] initWithName: name recordClass: recordClass recordType: recordType preference: preference + data: data + TTL: TTL] autorelease]; + case OF_DNS_RESOURCE_RECORD_TYPE_TXT: + data = [OFData dataWithItems: &buffer[i] + count: dataLength]; + + return [[[OFTXTDNSResourceRecord alloc] + initWithName: name + recordClass: recordClass + recordType: recordType data: data TTL: TTL] autorelease]; case OF_DNS_RESOURCE_RECORD_TYPE_AAAA: if (dataLength != 16) @throw [OFInvalidServerReplyException