@@ -816,10 +816,21 @@ ID = [OFNumber numberWithUInt16: (uint16_t)of_random()]; } while ([_queries objectForKey: ID] != nil); if (query.domainName.UTF8StringLength > 253) @throw [OFOutOfRangeException exception]; + + if (_settings->_nameServers.count == 0) { + id exception = [OFDNSQueryFailedException + exceptionWithQuery: query + error: OF_DNS_RESOLVER_ERROR_NO_NAME_SERVER]; + [delegate resolver: self + didPerformQuery: query + response: nil + exception: exception]; + return; + } context = [[[OFDNSResolverContext alloc] initWithQuery: query ID: ID settings: _settings @@ -878,16 +889,14 @@ exception = [OFDNSQueryFailedException exceptionWithQuery: context->_query error: OF_DNS_RESOLVER_ERROR_TIMEOUT]; - if ([context->_delegate respondsToSelector: - @selector(resolver:didPerformQuery:response:exception:)]) - [context->_delegate resolver: self - didPerformQuery: context->_query - response: nil - exception: exception]; + [context->_delegate resolver: self + didPerformQuery: context->_query + response: nil + exception: exception]; } - (bool)of_handleResponseBuffer: (unsigned char *)buffer length: (size_t)length sender: (const of_socket_address_t *)sender @@ -1039,16 +1048,14 @@ } if (exception != nil) response = nil; - if ([context->_delegate respondsToSelector: - @selector(resolver:didPerformQuery:response:exception:)]) - [context->_delegate resolver: self - didPerformQuery: context->_query - response: response - exception: exception]; + [context->_delegate resolver: self + didPerformQuery: context->_query + response: response + exception: exception]; return false; } - (bool)socket: (OFDatagramSocket *)sock @@ -1273,18 +1280,16 @@ exception = [OFDNSQueryFailedException exceptionWithQuery: context->_query error: OF_DNS_RESOLVER_ERROR_CANCELED]; - if ([context->_delegate respondsToSelector: - @selector(resolver:didPerformQuery:response:exception:)]) - [context->_delegate resolver: self - didPerformQuery: context->_query - response: nil - exception: exception]; + [context->_delegate resolver: self + didPerformQuery: context->_query + response: nil + exception: exception]; } [_queries removeAllObjects]; objc_autoreleasePoolPop(pool); } @end