@@ -44,22 +44,20 @@ #ifndef SOCK_DNS # define SOCK_DNS 0 #endif -#define BUFFER_LENGTH OF_DNS_RESOLVER_BUFFER_LENGTH -#define MAX_DNS_RESPONSE_LENGTH 65536 +static const size_t bufferLength = OFDNSResolverBufferLength; +static const size_t maxDNSResponseLength = 65536; /* * RFC 1035 doesn't specify if pointers to pointers are allowed, and if so how * many. Since it's unspecified, we have to assume that it might happen, but we * also want to limit it to avoid DoS. Limiting it to 16 levels of pointers and * immediately rejecting pointers to itself seems like a fair balance. */ -#define MAX_ALLOWED_POINTERS 16 - -#define CNAME_RECURSION 3 +static const uint_fast8_t maxAllowedPointers = 16; @interface OFDNSResolver () - (void)of_contextTimedOut: (OFDNSResolverContext *)context; @end @@ -72,11 +70,11 @@ OFDNSResolverSettings *_settings; size_t _nameServersIndex; unsigned int _attempt; id _delegate; OFData *_queryData; - of_socket_address_t _usedNameServer; + OFSocketAddress _usedNameServer; OFTCPSocket *_TCPSocket; OFMutableData *_TCPQueryData; void *_TCPBuffer; size_t _responseLength; OFTimer *_cancelTimer; @@ -166,70 +164,70 @@ return [components componentsJoinedByString: @"."]; } static OF_KINDOF(OFDNSResourceRecord *) -parseResourceRecord(OFString *name, of_dns_class_t DNSClass, - of_dns_record_type_t recordType, uint32_t TTL, const unsigned char *buffer, +parseResourceRecord(OFString *name, OFDNSClass DNSClass, + OFDNSRecordType recordType, uint32_t TTL, const unsigned char *buffer, size_t length, size_t i, uint16_t dataLength) { - if (recordType == OF_DNS_RECORD_TYPE_A && DNSClass == OF_DNS_CLASS_IN) { - of_socket_address_t address; + if (recordType == OFDNSRecordTypeA && DNSClass == OFDNSClassIN) { + OFSocketAddress address; if (dataLength != 4) @throw [OFInvalidServerReplyException exception]; memset(&address, 0, sizeof(address)); - address.family = OF_SOCKET_ADDRESS_FAMILY_IPV4; + address.family = OFSocketAddressFamilyIPv4; address.length = sizeof(address.sockaddr.in); address.sockaddr.in.sin_family = AF_INET; memcpy(&address.sockaddr.in.sin_addr.s_addr, buffer + i, 4); return [[[OFADNSResourceRecord alloc] initWithName: name address: &address TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_NS) { + } else if (recordType == OFDNSRecordTypeNS) { size_t j = i; OFString *authoritativeHost = parseName(buffer, length, &j, - MAX_ALLOWED_POINTERS); + maxAllowedPointers); if (j != i + dataLength) @throw [OFInvalidServerReplyException exception]; return [[[OFNSDNSResourceRecord alloc] initWithName: name DNSClass: DNSClass authoritativeHost: authoritativeHost TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_CNAME) { + } else if (recordType == OFDNSRecordTypeCNAME) { size_t j = i; OFString *alias = parseName(buffer, length, &j, - MAX_ALLOWED_POINTERS); + maxAllowedPointers); if (j != i + dataLength) @throw [OFInvalidServerReplyException exception]; return [[[OFCNAMEDNSResourceRecord alloc] initWithName: name DNSClass: DNSClass alias: alias TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_SOA) { + } else if (recordType == OFDNSRecordTypeSOA) { size_t j = i; OFString *primaryNameServer = parseName(buffer, length, &j, - MAX_ALLOWED_POINTERS); + maxAllowedPointers); OFString *responsiblePerson; uint32_t serialNumber, refreshInterval, retryInterval; uint32_t expirationInterval, minTTL; if (j > i + dataLength) @throw [OFInvalidServerReplyException exception]; responsiblePerson = parseName(buffer, length, &j, - MAX_ALLOWED_POINTERS); + maxAllowedPointers); if (dataLength - (j - i) != 20) @throw [OFInvalidServerReplyException exception]; serialNumber = (buffer[j] << 24) | (buffer[j + 1] << 16) | @@ -254,24 +252,24 @@ refreshInterval: refreshInterval retryInterval: retryInterval expirationInterval: expirationInterval minTTL: minTTL TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_PTR) { + } else if (recordType == OFDNSRecordTypePTR) { size_t j = i; OFString *domainName = parseName(buffer, length, &j, - MAX_ALLOWED_POINTERS); + maxAllowedPointers); if (j != i + dataLength) @throw [OFInvalidServerReplyException exception]; return [[[OFPTRDNSResourceRecord alloc] initWithName: name DNSClass: DNSClass domainName: domainName TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_HINFO) { + } else if (recordType == OFDNSRecordTypeHINFO) { size_t j = i; OFString *CPU = parseString(buffer, length, &j); OFString *OS; if (j > i + dataLength) @@ -286,11 +284,11 @@ initWithName: name DNSClass: DNSClass CPU: CPU OS: OS TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_MX) { + } else if (recordType == OFDNSRecordTypeMX) { uint16_t preference; size_t j; OFString *mailExchange; if (dataLength < 2) @@ -298,11 +296,11 @@ preference = (buffer[i] << 8) | buffer[i + 1]; j = i + 2; mailExchange = parseName(buffer, length, &j, - MAX_ALLOWED_POINTERS); + maxAllowedPointers); if (j != i + dataLength) @throw [OFInvalidServerReplyException exception]; return [[[OFMXDNSResourceRecord alloc] @@ -309,11 +307,11 @@ initWithName: name DNSClass: DNSClass preference: preference mailExchange: mailExchange TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_TXT) { + } else if (recordType == OFDNSRecordTypeTXT) { OFMutableArray *textStrings = [OFMutableArray array]; while (dataLength > 0) { uint_fast8_t stringLength = buffer[i++]; dataLength--; @@ -335,21 +333,21 @@ return [[[OFTXTDNSResourceRecord alloc] initWithName: name DNSClass: DNSClass textStrings: textStrings TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_RP) { + } else if (recordType == OFDNSRecordTypeRP) { size_t j = i; OFString *mailbox = parseName(buffer, length, &j, - MAX_ALLOWED_POINTERS); + maxAllowedPointers); OFString *TXTDomainName; if (j > i + dataLength) @throw [OFInvalidServerReplyException exception]; TXTDomainName = parseName(buffer, length, &j, - MAX_ALLOWED_POINTERS); + maxAllowedPointers); if (j != i + dataLength) @throw [OFInvalidServerReplyException exception]; return [[[OFRPDNSResourceRecord alloc] @@ -356,19 +354,19 @@ initWithName: name DNSClass: DNSClass mailbox: mailbox TXTDomainName: TXTDomainName TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_AAAA && - DNSClass == OF_DNS_CLASS_IN) { - of_socket_address_t address; + } else if (recordType == OFDNSRecordTypeAAAA && + DNSClass == OFDNSClassIN) { + OFSocketAddress address; if (dataLength != 16) @throw [OFInvalidServerReplyException exception]; memset(&address, 0, sizeof(address)); - address.family = OF_SOCKET_ADDRESS_FAMILY_IPV6; + address.family = OFSocketAddressFamilyIPv6; address.length = sizeof(address.sockaddr.in6); #ifdef AF_INET6 address.sockaddr.in6.sin6_family = AF_INET6; #else @@ -378,12 +376,12 @@ return [[[OFAAAADNSResourceRecord alloc] initWithName: name address: &address TTL: TTL] autorelease]; - } else if (recordType == OF_DNS_RECORD_TYPE_SRV && - DNSClass == OF_DNS_CLASS_IN) { + } else if (recordType == OFDNSRecordTypeSRV && + DNSClass == OFDNSClassIN) { uint16_t priority, weight, port; size_t j; OFString *target; if (dataLength < 6) @@ -392,11 +390,11 @@ priority = (buffer[i] << 8) | buffer[i + 1]; weight = (buffer[i + 2] << 8) | buffer[i + 3]; port = (buffer[i + 4] << 8) | buffer[i + 5]; j = i + 6; - target = parseName(buffer, length, &j, MAX_ALLOWED_POINTERS); + target = parseName(buffer, length, &j, maxAllowedPointers); if (j != i + dataLength) @throw [OFInvalidServerReplyException exception]; return [[[OFSRVDNSResourceRecord alloc] @@ -422,13 +420,13 @@ OFEnumerator OF_GENERIC(OFMutableArray *) *objectEnumerator; OFMutableArray *array; for (uint_fast16_t j = 0; j < count; j++) { OFString *name = parseName(buffer, length, i, - MAX_ALLOWED_POINTERS); - of_dns_class_t DNSClass; - of_dns_record_type_t recordType; + maxAllowedPointers); + OFDNSClass DNSClass; + OFDNSRecordType recordType; uint32_t TTL; uint16_t dataLength; OFDNSResourceRecord *record; if (*i + 10 > length) @@ -451,12 +449,11 @@ array = [ret objectForKey: name]; if (array == nil) { array = [OFMutableArray array]; - [ret setObject: array - forKey: name]; + [ret setObject: array forKey: name]; } [array addObject: record]; } @@ -489,24 +486,18 @@ queryData = [OFMutableData dataWithCapacity: 512]; /* Header */ - tmp = OF_BSWAP16_IF_LE(_ID.unsignedShortValue); - [queryData addItems: &tmp - count: 2]; - + tmp = OFToBigEndian16(_ID.unsignedShortValue); + [queryData addItems: &tmp count: 2]; /* RD */ - tmp = OF_BSWAP16_IF_LE(1u << 8); - [queryData addItems: &tmp - count: 2]; - + tmp = OFToBigEndian16(1u << 8); + [queryData addItems: &tmp count: 2]; /* QDCOUNT */ - tmp = OF_BSWAP16_IF_LE(1); - [queryData addItems: &tmp - count: 2]; - + tmp = OFToBigEndian16(1); + [queryData addItems: &tmp count: 2]; /* ANCOUNT, NSCOUNT and ARCOUNT */ [queryData increaseCountBy: 6]; /* Question */ @@ -524,19 +515,15 @@ [queryData addItems: component.UTF8String count: length]; } /* QTYPE */ - tmp = OF_BSWAP16_IF_LE(_query.recordType); - [queryData addItems: &tmp - count: 2]; - + tmp = OFToBigEndian16(_query.recordType); + [queryData addItems: &tmp count: 2]; /* QCLASS */ - tmp = OF_BSWAP16_IF_LE(_query.DNSClass); - [queryData addItems: &tmp - count: 2]; - + tmp = OFToBigEndian16(_query.DNSClass); + [queryData addItems: &tmp count: 2]; [queryData makeImmutable]; _queryData = [queryData copy]; objc_autoreleasePoolPop(pool); @@ -555,11 +542,11 @@ [_settings release]; [_delegate release]; [_queryData release]; [_TCPSocket release]; [_TCPQueryData release]; - free(_TCPBuffer); + OFFreeMemory(_TCPBuffer); [_cancelTimer release]; [super dealloc]; } @end @@ -569,11 +556,11 @@ + (void)initialize { if (self != [OFDNSResolver class]) return; - if (!of_socket_init()) + if (!OFSocketInit()) @throw [OFInitializationFailedException exceptionWithClass: self]; } #endif @@ -656,16 +643,16 @@ OFArray *old = _settings->_searchDomains; _settings->_searchDomains = [searchDomains copy]; [old release]; } -- (of_time_interval_t)timeout +- (OFTimeInterval)timeout { return _settings->_timeout; } -- (void)setTimeout: (of_time_interval_t)timeout +- (void)setTimeout: (OFTimeInterval)timeout { _settings->_timeout = timeout; } - (unsigned int)maxAttempts @@ -698,28 +685,27 @@ - (void)setUsesTCP: (bool)usesTCP { _settings->_usesTCP = usesTCP; } -- (of_time_interval_t)configReloadInterval +- (OFTimeInterval)configReloadInterval { return _settings->_configReloadInterval; } -- (void)setConfigReloadInterval: (of_time_interval_t)configReloadInterval +- (void)setConfigReloadInterval: (OFTimeInterval)configReloadInterval { _settings->_configReloadInterval = configReloadInterval; } - (void)of_sendQueryForContext: (OFDNSResolverContext *)context - runLoopMode: (of_run_loop_mode_t)runLoopMode + runLoopMode: (OFRunLoopMode)runLoopMode { OFUDPSocket *sock; OFString *nameServer; - [_queries setObject: context - forKey: context->_ID]; + [_queries setObject: context forKey: context->_ID]; [context->_cancelTimer invalidate]; [context->_cancelTimer release]; context->_cancelTimer = nil; context->_cancelTimer = [[OFTimer alloc] @@ -735,31 +721,30 @@ nameServer = [context->_settings->_nameServers objectAtIndex: context->_nameServersIndex]; if (context->_settings->_usesTCP) { - OF_ENSURE(context->_TCPSocket == nil); + OFEnsure(context->_TCPSocket == nil); context->_TCPSocket = [[OFTCPSocket alloc] init]; - [_TCPQueries setObject: context - forKey: context->_TCPSocket]; + [_TCPQueries setObject: context forKey: context->_TCPSocket]; context->_TCPSocket.delegate = self; [context->_TCPSocket asyncConnectToHost: nameServer port: 53 runLoopMode: runLoopMode]; return; } - context->_usedNameServer = of_socket_address_parse_ip(nameServer, 53); + context->_usedNameServer = OFSocketAddressParseIP(nameServer, 53); switch (context->_usedNameServer.family) { #ifdef OF_HAVE_IPV6 - case OF_SOCKET_ADDRESS_FAMILY_IPV6: + case OFSocketAddressFamilyIPv6: if (_IPv6Socket == nil) { - of_socket_address_t address = - of_socket_address_parse_ip(@"::", 0); + OFSocketAddress address = + OFSocketAddressParseIPv6(@"::", 0); _IPv6Socket = [[OFUDPSocket alloc] init]; [_IPv6Socket of_bindToAddress: &address extraType: SOCK_DNS]; _IPv6Socket.canBlock = false; @@ -767,14 +752,14 @@ } sock = _IPv6Socket; break; #endif - case OF_SOCKET_ADDRESS_FAMILY_IPV4: + case OFSocketAddressFamilyIPv4: if (_IPv4Socket == nil) { - of_socket_address_t address = - of_socket_address_parse_ip(@"0.0.0.0", 0); + OFSocketAddress address = + OFSocketAddressParseIPv4(@"0.0.0.0", 0); _IPv4Socket = [[OFUDPSocket alloc] init]; [_IPv4Socket of_bindToAddress: &address extraType: SOCK_DNS]; _IPv4Socket.canBlock = false; @@ -789,42 +774,42 @@ [sock asyncSendData: context->_queryData receiver: &context->_usedNameServer runLoopMode: runLoopMode]; [sock asyncReceiveIntoBuffer: _buffer - length: BUFFER_LENGTH + length: bufferLength runLoopMode: runLoopMode]; } - (void)asyncPerformQuery: (OFDNSQuery *)query delegate: (id )delegate { [self asyncPerformQuery: query - runLoopMode: of_run_loop_mode_default + runLoopMode: OFDefaultRunLoopMode delegate: delegate]; } - (void)asyncPerformQuery: (OFDNSQuery *)query - runLoopMode: (of_run_loop_mode_t)runLoopMode + runLoopMode: (OFRunLoopMode)runLoopMode delegate: (id )delegate { void *pool = objc_autoreleasePoolPush(); OFNumber *ID; OFDNSResolverContext *context; /* Random, unused ID */ do { - ID = [OFNumber numberWithUnsignedShort: of_random16()]; + ID = [OFNumber numberWithUnsignedShort: OFRandom16()]; } 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]; + errorCode: OFDNSResolverErrorCodeNoNameServer]; [delegate resolver: self didPerformQuery: query response: nil exception: exception]; return; @@ -833,19 +818,18 @@ context = [[[OFDNSResolverContext alloc] initWithQuery: query ID: ID settings: _settings delegate: delegate] autorelease]; - [self of_sendQueryForContext: context - runLoopMode: runLoopMode]; + [self of_sendQueryForContext: context runLoopMode: runLoopMode]; objc_autoreleasePoolPop(pool); } - (void)of_contextTimedOut: (OFDNSResolverContext *)context { - of_run_loop_mode_t runLoopMode = [OFRunLoop currentRunLoop].currentMode; + OFRunLoopMode runLoopMode = [OFRunLoop currentRunLoop].currentMode; OFDNSQueryFailedException *exception; if (context->_TCPSocket != nil) { context->_TCPSocket.delegate = nil; [context->_TCPSocket cancelAsyncRequests]; @@ -857,19 +841,17 @@ } if (context->_nameServersIndex + 1 < context->_settings->_nameServers.count) { context->_nameServersIndex++; - [self of_sendQueryForContext: context - runLoopMode: runLoopMode]; + [self of_sendQueryForContext: context runLoopMode: runLoopMode]; return; } if (++context->_attempt < context->_settings->_maxAttempts) { context->_nameServersIndex = 0; - [self of_sendQueryForContext: context - runLoopMode: runLoopMode]; + [self of_sendQueryForContext: context runLoopMode: runLoopMode]; return; } context = [[context retain] autorelease]; [_queries removeObjectForKey: context->_ID]; @@ -877,31 +859,29 @@ /* * 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]; + [_IPv4Socket asyncReceiveIntoBuffer: _buffer length: bufferLength]; #ifdef OF_HAVE_IPV6 [_IPv6Socket cancelAsyncRequests]; - [_IPv6Socket asyncReceiveIntoBuffer: _buffer - length: BUFFER_LENGTH]; + [_IPv6Socket asyncReceiveIntoBuffer: _buffer length: bufferLength]; #endif exception = [OFDNSQueryFailedException exceptionWithQuery: context->_query - error: OF_DNS_RESOLVER_ERROR_TIMEOUT]; + errorCode: OFDNSResolverErrorCodeTimeout]; [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 + sender: (const OFSocketAddress *)sender { OFDictionary *answerRecords = nil, *authorityRecords = nil; OFDictionary *additionalRecords = nil; OFDNSResponse *response = nil; id exception = nil; @@ -919,20 +899,20 @@ return true; if (context->_TCPSocket != nil) { if ([_TCPQueries objectForKey: context->_TCPSocket] != context) return true; - } else if (!of_socket_address_equal(sender, &context->_usedNameServer)) + } else if (!OFSocketAddressEqual(sender, &context->_usedNameServer)) return true; [context->_cancelTimer invalidate]; [context->_cancelTimer release]; context->_cancelTimer = nil; [_queries removeObjectForKey: ID]; @try { - of_dns_resolver_error_t error = 0; + OFDNSResolverErrorCode errorCode = 0; bool tryNextNameServer = false; const unsigned char *queryDataBuffer; size_t i; uint16_t numQuestions, numAnswers, numAuthorityRecords; uint16_t numAdditionalRecords; @@ -954,11 +934,11 @@ if ((buffer[2] & 0x78) != (queryDataBuffer[2] & 0x78)) @throw [OFInvalidServerReplyException exception]; /* TC */ if (buffer[2] & 0x02) { - of_run_loop_mode_t runLoopMode; + OFRunLoopMode runLoopMode; if (context->_settings->_usesTCP) @throw [OFTruncatedDataException exception]; context->_settings->_usesTCP = true; @@ -971,37 +951,37 @@ /* RCODE */ switch (buffer[3] & 0x0F) { case 0: break; case 1: - error = OF_DNS_RESOLVER_ERROR_SERVER_INVALID_FORMAT; + errorCode = OFDNSResolverErrorCodeServerInvalidFormat; break; case 2: - error = OF_DNS_RESOLVER_ERROR_SERVER_FAILURE; + errorCode = OFDNSResolverErrorCodeServerFailure; tryNextNameServer = true; break; case 3: - error = OF_DNS_RESOLVER_ERROR_SERVER_NAME_ERROR; + errorCode = OFDNSResolverErrorCodeServerNameError; break; case 4: - error = OF_DNS_RESOLVER_ERROR_SERVER_NOT_IMPLEMENTED; + errorCode = OFDNSResolverErrorCodeServerNotImplemented; tryNextNameServer = true; break; case 5: - error = OF_DNS_RESOLVER_ERROR_SERVER_REFUSED; + errorCode = OFDNSResolverErrorCodeServerRefused; tryNextNameServer = true; break; default: - error = OF_DNS_RESOLVER_ERROR_UNKNOWN; + errorCode = OFDNSResolverErrorCodeUnknown; tryNextNameServer = true; break; } if (tryNextNameServer) { if (context->_nameServersIndex + 1 < context->_settings->_nameServers.count) { - of_run_loop_mode_t runLoopMode = + OFRunLoopMode runLoopMode = [OFRunLoop currentRunLoop].currentMode; context->_nameServersIndex++; [self of_sendQueryForContext: context @@ -1011,11 +991,11 @@ } if (buffer[3] & 0x0F) @throw [OFDNSQueryFailedException exceptionWithQuery: context->_query - error: error]; + errorCode: errorCode]; numQuestions = (buffer[4] << 8) | buffer[5]; numAnswers = (buffer[6] << 8) | buffer[7]; numAuthorityRecords = (buffer[8] << 8) | buffer[9]; numAdditionalRecords = (buffer[10] << 8) | buffer[11]; @@ -1027,11 +1007,11 @@ * query. * * TODO: Compare to our query, just in case? */ for (uint_fast16_t j = 0; j < numQuestions; j++) { - parseName(buffer, length, &i, MAX_ALLOWED_POINTERS); + parseName(buffer, length, &i, maxAllowedPointers); i += 4; } answerRecords = parseSection(buffer, length, &i, numAnswers); authorityRecords = parseSection(buffer, length, &i, @@ -1059,11 +1039,11 @@ } - (bool)socket: (OFDatagramSocket *)sock didReceiveIntoBuffer: (void *)buffer length: (size_t)length - sender: (const of_socket_address_t *)sender + sender: (const OFSocketAddress *)sender exception: (id)exception { if (exception != nil) return true; @@ -1077,11 +1057,11 @@ port: (uint16_t)port exception: (id)exception { OFDNSResolverContext *context = [_TCPQueries objectForKey: sock]; - OF_ENSURE(context != nil); + OFEnsure(context != nil); if (exception != nil) { /* * TODO: Handle error immediately instead of waiting for the * timer to try the next nameserver or to retry. @@ -1101,13 +1081,12 @@ @throw [OFOutOfRangeException exception]; context->_TCPQueryData = [[OFMutableData alloc] initWithCapacity: queryDataCount + 2]; - tmp = OF_BSWAP16_IF_LE(queryDataCount); - [context->_TCPQueryData addItems: &tmp - count: sizeof(tmp)]; + tmp = OFToBigEndian16(queryDataCount); + [context->_TCPQueryData addItems: &tmp count: sizeof(tmp)]; [context->_TCPQueryData addItems: context->_queryData.items count: queryDataCount]; } [sock asyncWriteData: context->_TCPQueryData]; @@ -1119,11 +1098,11 @@ exception: (id)exception { OFTCPSocket *sock = (OFTCPSocket *)stream; OFDNSResolverContext *context = [_TCPQueries objectForKey: sock]; - OF_ENSURE(context != nil); + OFEnsure(context != nil); if (exception != nil) { /* * TODO: Handle error immediately instead of waiting for the * timer to try the next nameserver or to retry. @@ -1134,14 +1113,13 @@ context->_responseLength = 0; return nil; } if (context->_TCPBuffer == nil) - context->_TCPBuffer = of_alloc(MAX_DNS_RESPONSE_LENGTH, 1); + context->_TCPBuffer = OFAllocMemory(maxDNSResponseLength, 1); - [sock asyncReadIntoBuffer: context->_TCPBuffer - exactLength: 2]; + [sock asyncReadIntoBuffer: context->_TCPBuffer exactLength: 2]; return nil; } - (bool)stream: (OFStream *)stream didReadIntoBuffer: (void *)buffer @@ -1149,11 +1127,11 @@ exception: (id)exception { OFTCPSocket *sock = (OFTCPSocket *)stream; OFDNSResolverContext *context = [_TCPQueries objectForKey: sock]; - OF_ENSURE(context != nil); + OFEnsure(context != nil); if (exception != nil) { /* * TODO: Handle error immediately instead of waiting for the * timer to try the next nameserver or to retry. @@ -1162,15 +1140,15 @@ } if (context->_responseLength == 0) { unsigned char *ucBuffer = buffer; - OF_ENSURE(length == 2); + OFEnsure(length == 2); context->_responseLength = (ucBuffer[0] << 8) | ucBuffer[1]; - if (context->_responseLength > MAX_DNS_RESPONSE_LENGTH) + if (context->_responseLength > maxDNSResponseLength) @throw [OFOutOfRangeException exception]; if (context->_responseLength == 0) goto done; @@ -1184,13 +1162,11 @@ * The connection was closed before we received the entire * response. */ goto done; - [self of_handleResponseBuffer: buffer - length: length - sender: NULL]; + [self of_handleResponseBuffer: buffer length: length sender: NULL]; done: [_TCPQueries removeObjectForKey: context->_TCPSocket]; [context->_TCPSocket release]; context->_TCPSocket = nil; @@ -1201,28 +1177,28 @@ - (void)asyncResolveAddressesForHost: (OFString *)host delegate: (id )delegate { [self asyncResolveAddressesForHost: host - addressFamily: OF_SOCKET_ADDRESS_FAMILY_ANY - runLoopMode: of_run_loop_mode_default + addressFamily: OFSocketAddressFamilyAny + runLoopMode: OFDefaultRunLoopMode delegate: delegate]; } - (void)asyncResolveAddressesForHost: (OFString *)host - addressFamily: (of_socket_address_family_t)addressFamily + addressFamily: (OFSocketAddressFamily)addressFamily delegate: (id )delegate { [self asyncResolveAddressesForHost: host addressFamily: addressFamily - runLoopMode: of_run_loop_mode_default + runLoopMode: OFDefaultRunLoopMode delegate: delegate]; } - (void)asyncResolveAddressesForHost: (OFString *)host - addressFamily: (of_socket_address_family_t)addressFamily - runLoopMode: (of_run_loop_mode_t)runLoopMode + addressFamily: (OFSocketAddressFamily)addressFamily + runLoopMode: (OFRunLoopMode)runLoopMode delegate: (id )delegate { void *pool = objc_autoreleasePoolPush(); OFHostAddressResolver *resolver = [[[OFHostAddressResolver alloc] initWithHost: host @@ -1236,11 +1212,11 @@ objc_autoreleasePoolPop(pool); } - (OFData *)resolveAddressesForHost: (OFString *)host - addressFamily: (of_socket_address_family_t)addressFamily + addressFamily: (OFSocketAddressFamily)addressFamily { void *pool = objc_autoreleasePoolPush(); OFHostAddressResolver *resolver = [[[OFHostAddressResolver alloc] initWithHost: host addressFamily: addressFamily @@ -1277,11 +1253,11 @@ while ((context = [enumerator nextObject]) != nil) { OFDNSQueryFailedException *exception; exception = [OFDNSQueryFailedException exceptionWithQuery: context->_query - error: OF_DNS_RESOLVER_ERROR_CANCELED]; + errorCode: OFDNSResolverErrorCodeCanceled]; [context->_delegate resolver: self didPerformQuery: context->_query response: nil exception: exception];