Index: src/OFDNSResolver.h ================================================================== --- src/OFDNSResolver.h +++ src/OFDNSResolver.h @@ -98,10 +98,29 @@ * id exception)`. * @param context A context object to pass along to the target */ - (void)asyncResolveHost: (OFString *)host target: (id)target + selector: (SEL)selector + context: (nullable id)context; + +/*! + * @brief Asynchronously resolves the specified host. + * + * @param host The host to resolve + * @param recordClass The desired class of the records to query + * @param recordType The desired type of the records to query + * @param target The target to call with the result once resolving is done + * @param selector The selector to call on the target. The signature must be + * `void (OFArray *response, id context, + * id exception)`. + * @param context A context object to pass along to the target + */ +- (void)asyncResolveHost: (OFString *)host + recordClass: (of_dns_resource_record_class_t)recordClass + recordType: (of_dns_resource_record_type_t)recordType + target: (id)target selector: (SEL)selector context: (nullable id)context; @end OF_ASSUME_NONNULL_END Index: src/OFDNSResolver.m ================================================================== --- src/OFDNSResolver.m +++ src/OFDNSResolver.m @@ -747,10 +747,25 @@ - (void)asyncResolveHost: (OFString *)host target: (id)target selector: (SEL)selector context: (id)context +{ + [self asyncResolveHost: host + recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN + recordType: OF_DNS_RESOURCE_RECORD_TYPE_ALL + target: target + selector: selector + context: context]; +} + +- (void)asyncResolveHost: (OFString *)host + recordClass: (of_dns_resource_record_class_t)recordClass + recordType: (of_dns_resource_record_type_t)recordType + target: (id)target + selector: (SEL)selector + context: (id)context { void *pool = objc_autoreleasePoolPush(); OFMutableData *data = [OFMutableData dataWithCapacity: 512]; OFDNSResolver_context *DNSResolverContext; OFNumber *ID; @@ -804,16 +819,16 @@ [data addItems: [component UTF8String] count: length]; } /* QTYPE */ - tmp = OF_BSWAP16_IF_LE(OF_DNS_RESOURCE_RECORD_TYPE_A); + tmp = OF_BSWAP16_IF_LE(recordType); [data addItems: &tmp count: 2]; /* QCLASS */ - tmp = OF_BSWAP16_IF_LE(OF_DNS_RESOURCE_RECORD_CLASS_IN); + tmp = OF_BSWAP16_IF_LE(recordClass); [data addItems: &tmp count: 2]; DNSResolverContext = [[[OFDNSResolver_context alloc] initWithHost: host Index: src/OFDNSResourceRecord.h ================================================================== --- src/OFDNSResourceRecord.h +++ src/OFDNSResourceRecord.h @@ -26,25 +26,27 @@ /*! * @brief The class of a DNS resource record. */ typedef enum { - OF_DNS_RESOURCE_RECORD_CLASS_IN = 1 + OF_DNS_RESOURCE_RECORD_CLASS_IN = 1, + OF_DNS_RESOURCE_RECORD_CLASS_ANY = 255, } of_dns_resource_record_class_t; /*! * @brief The type of a DNS resource record. */ typedef enum { - OF_DNS_RESOURCE_RECORD_TYPE_A = 1, - OF_DNS_RESOURCE_RECORD_TYPE_NS = 2, - OF_DNS_RESOURCE_RECORD_TYPE_CNAME = 5, - OF_DNS_RESOURCE_RECORD_TYPE_SOA = 6, - OF_DNS_RESOURCE_RECORD_TYPE_PTR = 12, - OF_DNS_RESOURCE_RECORD_TYPE_MX = 15, - OF_DNS_RESOURCE_RECORD_TYPE_TXT = 16, - OF_DNS_RESOURCE_RECORD_TYPE_AAAA = 28 + OF_DNS_RESOURCE_RECORD_TYPE_A = 1, + OF_DNS_RESOURCE_RECORD_TYPE_NS = 2, + OF_DNS_RESOURCE_RECORD_TYPE_CNAME = 5, + OF_DNS_RESOURCE_RECORD_TYPE_SOA = 6, + OF_DNS_RESOURCE_RECORD_TYPE_PTR = 12, + OF_DNS_RESOURCE_RECORD_TYPE_MX = 15, + OF_DNS_RESOURCE_RECORD_TYPE_TXT = 16, + OF_DNS_RESOURCE_RECORD_TYPE_AAAA = 28, + OF_DNS_RESOURCE_RECORD_TYPE_ALL = 255, } of_dns_resource_record_type_t; /*! * @class OFDNSResourceRecord OFDNSResourceRecord.h ObjFW/OFDNSResourceRecord.h * Index: src/OFDNSResourceRecord.m ================================================================== --- src/OFDNSResourceRecord.m +++ src/OFDNSResourceRecord.m @@ -27,10 +27,12 @@ of_dns_resource_record_class_t recordClass) { switch (recordClass) { case OF_DNS_RESOURCE_RECORD_CLASS_IN: return @"IN"; + case OF_DNS_RESOURCE_RECORD_CLASS_ANY: + return @"any"; default: return [OFString stringWithFormat: @"%u", recordClass]; } } @@ -52,10 +54,12 @@ return @"MX"; case OF_DNS_RESOURCE_RECORD_TYPE_TXT: return @"TXT"; case OF_DNS_RESOURCE_RECORD_TYPE_AAAA: return @"AAAA"; + case OF_DNS_RESOURCE_RECORD_TYPE_ALL: + return @"all"; default: return [OFString stringWithFormat: @"%u", recordType]; } } @@ -144,15 +148,15 @@ - (OFString *)description { return [OFString stringWithFormat: @"", _name, of_dns_resource_record_class_to_string(_recordClass), of_dns_resource_record_type_to_string(_recordType), _data, _TTL]; } @end