@@ -19,11 +19,11 @@ #include #import "OFDNSResolver.h" #import "OFArray.h" -#import "OFDNSRequest.h" +#import "OFDNSQuery.h" #import "OFDNSResolverSettings.h" #import "OFDNSResponse.h" #import "OFData.h" #import "OFDate.h" #import "OFDictionary.h" @@ -32,11 +32,11 @@ #import "OFString.h" #import "OFTimer.h" #import "OFUDPSocket.h" #import "OFUDPSocket+Private.h" -#import "OFDNSRequestFailedException.h" +#import "OFDNSQueryFailedException.h" #import "OFInitializationFailedException.h" #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFInvalidServerReplyException.h" #import "OFOutOfRangeException.h" @@ -68,11 +68,11 @@ @"of_dns_resolver_resolve_mode"; @interface OFDNSResolverQuery: OFObject { @public - OFDNSRequest *_request; + OFDNSQuery *_query; OFString *_domainName; OFNumber *_ID; OFDNSResolverSettings *_settings; size_t _nameServersIndex, _searchDomainsIndex; unsigned int _attempt; @@ -82,19 +82,19 @@ OFData *_queryData; of_socket_address_t _usedNameServer; OFTimer *_cancelTimer; } -- (instancetype)initWithRequest: (OFDNSRequest *)request - domainName: (OFString *)domainName - ID: (OFNumber *)ID - settings: (OFDNSResolverSettings *)settings - nameServersIndex: (size_t)nameServersIndex - searchDomainsIndex: (size_t)searchDomainsIndex - target: (id)target - selector: (SEL)selector - context: (id)context; +- (instancetype)initWithQuery: (OFDNSQuery *)query + domainName: (OFString *)domainName + ID: (OFNumber *)ID + settings: (OFDNSResolverSettings *)settings + nameServersIndex: (size_t)nameServersIndex + searchDomainsIndex: (size_t)searchDomainsIndex + target: (id)target + selector: (SEL)selector + context: (id)context; @end @interface OFDNSResolverAsyncResolveSocketAddressesContext: OFObject { OFString *_host; @@ -140,18 +140,18 @@ id _exception; } @end @interface OFDNSResolver () -- (void)of_asyncPerformRequest: (OFDNSRequest *)request - settings: (OFDNSResolverSettings *)settings - nameServersIndex: (size_t)nameServersIndex - searchDomainsIndex: (size_t)searchDomainsIndex - runLoopMode: (of_run_loop_mode_t)runLoopMode - target: (id)target - selector: (SEL)selector - context: (id)context; +- (void)of_asyncPerformQuery: (OFDNSQuery *)query + settings: (OFDNSResolverSettings *)settings + nameServersIndex: (size_t)nameServersIndex + searchDomainsIndex: (size_t)searchDomainsIndex + runLoopMode: (of_run_loop_mode_t)runLoopMode + target: (id)target + selector: (SEL)selector + context: (id)context; - (void)of_sendQuery: (OFDNSResolverQuery *)query runLoopMode: (of_run_loop_mode_t)runLoopMode; - (void)of_queryWithIDTimedOut: (OFDNSResolverQuery *)query; @end @@ -548,28 +548,28 @@ method(target, selector, resolver, domainName, response, context, exception); } @implementation OFDNSResolverQuery -- (instancetype)initWithRequest: (OFDNSRequest *)request - domainName: (OFString *)domainName - ID: (OFNumber *)ID - settings: (OFDNSResolverSettings *)settings - nameServersIndex: (size_t)nameServersIndex - searchDomainsIndex: (size_t)searchDomainsIndex - target: (id)target - selector: (SEL)selector - context: (id)context +- (instancetype)initWithQuery: (OFDNSQuery *)query + domainName: (OFString *)domainName + ID: (OFNumber *)ID + settings: (OFDNSResolverSettings *)settings + nameServersIndex: (size_t)nameServersIndex + searchDomainsIndex: (size_t)searchDomainsIndex + target: (id)target + selector: (SEL)selector + context: (id)context { self = [super init]; @try { void *pool = objc_autoreleasePoolPush(); OFMutableData *queryData; uint16_t tmp; - _request = [request copy]; + _query = [query copy]; _domainName = [domainName copy]; _ID = [ID retain]; _settings = [settings copy]; _nameServersIndex = nameServersIndex; _searchDomainsIndex = searchDomainsIndex; @@ -614,16 +614,16 @@ [queryData addItems: component.UTF8String count: length]; } /* QTYPE */ - tmp = OF_BSWAP16_IF_LE(_request.recordType); + tmp = OF_BSWAP16_IF_LE(_query.recordType); [queryData addItems: &tmp count: 2]; /* QCLASS */ - tmp = OF_BSWAP16_IF_LE(_request.recordClass); + tmp = OF_BSWAP16_IF_LE(_query.recordClass); [queryData addItems: &tmp count: 2]; [queryData makeImmutable]; @@ -638,11 +638,11 @@ return self; } - (void)dealloc { - [_request release]; + [_query release]; [_domainName release]; [_ID release]; [_settings release]; [_target release]; [_context release]; @@ -741,32 +741,32 @@ if (!found) { of_run_loop_mode_t runLoopMode = [OFRunLoop currentRunLoop].currentMode; OFNumber *recordTypeNumber = [OFNumber numberWithInt: recordType]; - OFDNSRequest *request; + OFDNSQuery *query; _expectedResponses++; [result addObject: [OFPair pairWithFirstObject: CNAME secondObject: recordTypeNumber]]; - request = [OFDNSRequest - requestWithHost: alias - recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN - recordType: recordType]; - [_resolver of_asyncPerformRequest: request - settings: nil - nameServersIndex: 0 - searchDomainsIndex: 0 - runLoopMode: runLoopMode - target: self - selector: @selector(resolver: - didResolveCNAME:response: - context:exception:) - context: recordTypeNumber]; + query = [OFDNSQuery + queryWithHost: alias + recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN + recordType: recordType]; + [_resolver of_asyncPerformQuery: query + settings: nil + nameServersIndex: 0 + searchDomainsIndex: 0 + runLoopMode: runLoopMode + target: self + selector: @selector(resolver: + didResolveCNAME:response: + context:exception:) + context: recordTypeNumber]; } } - (void)resolver: (OFDNSResolver *)resolver didResolveCNAME: (OFString *)CNAME @@ -862,18 +862,18 @@ } [addresses makeImmutable]; if (addresses.count == 0) { - OFDNSRequest *request = [OFDNSRequest - requestWithHost: _host - recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN - recordType: 0]; - - exception = [OFDNSRequestFailedException - exceptionWithRequest: request - error: OF_DNS_RESOLVER_ERROR_UNKNOWN]; + OFDNSQuery *query = [OFDNSQuery + queryWithHost: _host + recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN + recordType: 0]; + + exception = [OFDNSQueryFailedException + exceptionWithQuery: query + error: OF_DNS_RESOLVER_ERROR_UNKNOWN]; } if ([_delegate respondsToSelector: @selector( resolver:didResolveDomainName:socketAddresses:exception:)]) [_delegate resolver: _resolver @@ -902,11 +902,11 @@ _expectedResponses--; if (_domainName != nil) { if (![domainName isEqual: _domainName]) - /* Did the config change between requests? */ + /* Did the config change in between? */ return; } else _domainName = [domainName copy]; if (exception != nil) { @@ -1089,23 +1089,23 @@ - (void)setConfigReloadInterval: (of_time_interval_t)configReloadInterval { _settings->_configReloadInterval = configReloadInterval; } -- (void)of_asyncPerformRequest: (OFDNSRequest *)request - settings: (OFDNSResolverSettings *)settings - nameServersIndex: (size_t)nameServersIndex - searchDomainsIndex: (size_t)searchDomainsIndex - runLoopMode: (of_run_loop_mode_t)runLoopMode - target: (id)target - selector: (SEL)selector - context: (id)context +- (void)of_asyncPerformQuery: (OFDNSQuery *)query + settings: (OFDNSResolverSettings *)settings + nameServersIndex: (size_t)nameServersIndex + searchDomainsIndex: (size_t)searchDomainsIndex + runLoopMode: (of_run_loop_mode_t)runLoopMode + target: (id)target + selector: (SEL)selector + context: (id)context { void *pool = objc_autoreleasePoolPush(); OFNumber *ID; OFString *host, *domainName; - OFDNSResolverQuery *query; + OFDNSResolverQuery *resolverQuery; if (settings == nil) { [_settings reload]; settings = _settings; } @@ -1113,11 +1113,11 @@ /* Random, unused ID */ do { ID = [OFNumber numberWithUInt16: (uint16_t)of_random()]; } while ([_queries objectForKey: ID] != nil); - host = request.host; + host = query.host; if (isFQDN(host, settings)) { domainName = host; if (![domainName hasSuffix: @"."]) domainName = [domainName stringByAppendingString: @"."]; @@ -1130,24 +1130,24 @@ } if (domainName.UTF8StringLength > 253) @throw [OFOutOfRangeException exception]; - query = [[[OFDNSResolverQuery alloc] - initWithRequest: request - domainName: domainName - ID: ID - settings: settings - nameServersIndex: nameServersIndex - searchDomainsIndex: searchDomainsIndex - target: target - selector: selector - context: context] autorelease]; - [_queries setObject: query + resolverQuery = [[[OFDNSResolverQuery alloc] + initWithQuery: query + domainName: domainName + ID: ID + settings: settings + nameServersIndex: nameServersIndex + searchDomainsIndex: searchDomainsIndex + target: target + selector: selector + context: context] autorelease]; + [_queries setObject: resolverQuery forKey: ID]; - [self of_sendQuery: query + [self of_sendQuery: resolverQuery runLoopMode: runLoopMode]; objc_autoreleasePoolPop(pool); } @@ -1163,39 +1163,37 @@ didResolveDomainName: domainName response: response exception: exception]; } -- (void)asyncPerformRequest: (OFDNSRequest *)request - delegate: (id )delegate -{ - [self of_asyncPerformRequest: request - settings: nil - nameServersIndex: 0 - searchDomainsIndex: 0 - runLoopMode: of_run_loop_mode_default - target: self - selector: @selector(of_resolver: - didResolveDomainName:response:context: - exception:) - context: delegate]; -} - -- (void)asyncPerformRequest: (OFDNSRequest *)request - runLoopMode: (of_run_loop_mode_t)runLoopMode - delegate: (id )delegate -{ - [self of_asyncPerformRequest: request - settings: nil - nameServersIndex: 0 - searchDomainsIndex: 0 - runLoopMode: runLoopMode - target: self - selector: @selector(of_resolver: - didResolveDomainName:response:context: - exception:) - context: delegate]; +- (void)asyncPerformQuery: (OFDNSQuery *)query + delegate: (id )delegate +{ + [self of_asyncPerformQuery: query + settings: nil + nameServersIndex: 0 + searchDomainsIndex: 0 + runLoopMode: of_run_loop_mode_default + target: self + selector: @selector(of_resolver:didResolveDomainName: + response:context:exception:) + context: delegate]; +} + +- (void)asyncPerformQuery: (OFDNSQuery *)query + runLoopMode: (of_run_loop_mode_t)runLoopMode + delegate: (id )delegate +{ + [self of_asyncPerformQuery: query + settings: nil + nameServersIndex: 0 + searchDomainsIndex: 0 + runLoopMode: runLoopMode + target: self + selector: @selector(of_resolver:didResolveDomainName: + response:context:exception:) + context: delegate]; } - (void)of_sendQuery: (OFDNSResolverQuery *)query runLoopMode: (of_run_loop_mode_t)runLoopMode { @@ -1264,11 +1262,11 @@ runLoopMode: runLoopMode]; } - (void)of_queryWithIDTimedOut: (OFDNSResolverQuery *)query { - OFDNSRequestFailedException *exception; + OFDNSQueryFailedException *exception; if (query == nil) return; if (query->_nameServersIndex + 1 < @@ -1289,11 +1287,11 @@ query = [[query retain] autorelease]; [_queries removeObjectForKey: query->_ID]; /* - * Cancel any pending requests, to avoid a send being still pending and + * Cancel any pending queries, to avoid a send being still pending and * trying to access the query once it no longer exists. */ [_IPv4Socket cancelAsyncRequests]; [_IPv4Socket asyncReceiveIntoBuffer: _buffer length: BUFFER_LENGTH]; @@ -1301,13 +1299,13 @@ [_IPv6Socket cancelAsyncRequests]; [_IPv6Socket asyncReceiveIntoBuffer: _buffer length: BUFFER_LENGTH]; #endif - exception = [OFDNSRequestFailedException - exceptionWithRequest: query->_request - error: OF_DNS_RESOLVER_ERROR_TIMEOUT]; + exception = [OFDNSQueryFailedException + exceptionWithQuery: query->_query + error: OF_DNS_RESOLVER_ERROR_TIMEOUT]; callback(query->_target, query->_selector, self, query->_domainName, nil, query->_context, exception); } @@ -1393,18 +1391,18 @@ size_t searchDomainsIndex = query->_searchDomainsIndex; query->_searchDomainsIndex++; - [self of_asyncPerformRequest: query->_request - settings: query->_settings - nameServersIndex: nameServersIndex - searchDomainsIndex: searchDomainsIndex - runLoopMode: runLoopMode - target: query->_target - selector: query->_selector - context: query->_context]; + [self of_asyncPerformQuery: query->_query + settings: query->_settings + nameServersIndex: nameServersIndex + searchDomainsIndex: searchDomainsIndex + runLoopMode: runLoopMode + target: query->_target + selector: query->_selector + context: query->_context]; return true; } error = OF_DNS_RESOLVER_ERROR_SERVER_NAME_ERROR; @@ -1419,13 +1417,13 @@ error = OF_DNS_RESOLVER_ERROR_UNKNOWN; break; } if (buffer[3] & 0x0F) - @throw [OFDNSRequestFailedException - exceptionWithRequest: query->_request - error: error]; + @throw [OFDNSQueryFailedException + exceptionWithQuery: query->_query + error: error]; numQuestions = (buffer[4] << 8) | buffer[5]; numAnswers = (buffer[6] << 8) | buffer[7]; numAuthorityRecords = (buffer[8] << 8) | buffer[9]; numAdditionalRecords = (buffer[10] << 8) | buffer[11]; @@ -1577,18 +1575,18 @@ if (exception == nil) { of_dns_resource_record_class_t recordClass = OF_DNS_RESOURCE_RECORD_CLASS_IN; of_dns_resolver_error_t error = OF_DNS_RESOLVER_ERROR_NO_RESULT; - OFDNSRequest *request = [OFDNSRequest - requestWithHost: host - recordClass: recordClass - recordType: recordType]; - - exception = [OFDNSRequestFailedException - exceptionWithRequest: request - error: error]; + OFDNSQuery *query = [OFDNSQuery + queryWithHost: host + recordClass: recordClass + recordType: recordType]; + + exception = [OFDNSQueryFailedException + exceptionWithQuery: query + error: error]; } } if ([delegate respondsToSelector: @selector(resolver: didResolveDomainName:socketAddresses:exception:)]) { @@ -1636,49 +1634,49 @@ } #ifdef OF_HAVE_IPV6 if (addressFamily == OF_SOCKET_ADDRESS_FAMILY_IPV6 || addressFamily == OF_SOCKET_ADDRESS_FAMILY_ANY) { - OFDNSRequest *request = [OFDNSRequest - requestWithHost: host - recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN - recordType: OF_DNS_RESOURCE_RECORD_TYPE_AAAA]; + OFDNSQuery *query = [OFDNSQuery + queryWithHost: host + recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN + recordType: OF_DNS_RESOURCE_RECORD_TYPE_AAAA]; OFNumber *recordTypeNumber = [OFNumber numberWithInt: OF_DNS_RESOURCE_RECORD_TYPE_AAAA]; - [self of_asyncPerformRequest: request - settings: nil - nameServersIndex: 0 - searchDomainsIndex: 0 - runLoopMode: runLoopMode - target: context - selector: @selector(resolver: - didResolveDomainName:response: - context:exception:) - context: recordTypeNumber]; + [self of_asyncPerformQuery: query + settings: nil + nameServersIndex: 0 + searchDomainsIndex: 0 + runLoopMode: runLoopMode + target: context + selector: @selector(resolver: + didResolveDomainName:response: + context:exception:) + context: recordTypeNumber]; } #endif if (addressFamily == OF_SOCKET_ADDRESS_FAMILY_IPV4 || addressFamily == OF_SOCKET_ADDRESS_FAMILY_ANY) { - OFDNSRequest *request = [OFDNSRequest - requestWithHost: host - recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN - recordType: OF_DNS_RESOURCE_RECORD_TYPE_A]; + OFDNSQuery *query = [OFDNSQuery + queryWithHost: host + recordClass: OF_DNS_RESOURCE_RECORD_CLASS_IN + recordType: OF_DNS_RESOURCE_RECORD_TYPE_A]; OFNumber *recordTypeNumber = [OFNumber numberWithInt: OF_DNS_RESOURCE_RECORD_TYPE_A]; - [self of_asyncPerformRequest: request - settings: nil - nameServersIndex: 0 - searchDomainsIndex: 0 - runLoopMode: runLoopMode - target: context - selector: @selector(resolver: - didResolveDomainName:response: - context:exception:) - context: recordTypeNumber]; + [self of_asyncPerformQuery: query + settings: nil + nameServersIndex: 0 + searchDomainsIndex: 0 + runLoopMode: runLoopMode + target: context + selector: @selector(resolver: + didResolveDomainName:response: + context:exception:) + context: recordTypeNumber]; } objc_autoreleasePoolPop(pool); } @@ -1733,15 +1731,15 @@ _IPv6Socket = nil; #endif enumerator = [_queries objectEnumerator]; while ((query = [enumerator nextObject]) != nil) { - OFDNSRequestFailedException *exception; + OFDNSQueryFailedException *exception; - exception = [OFDNSRequestFailedException - exceptionWithRequest: query->_request - error: OF_DNS_RESOLVER_ERROR_CANCELED]; + exception = [OFDNSQueryFailedException + exceptionWithQuery: query->_query + error: OF_DNS_RESOLVER_ERROR_CANCELED]; callback(query->_target, query->_selector, self, query->_domainName, nil, query->_context, exception); }