CFHostSampleObjC/QHostAddressQuery.h
/* |
Copyright (C) 2017 Apple Inc. All Rights Reserved. |
See LICENSE.txt for this sample’s licensing information |
Abstract: |
Resolves a DNS name to a list of IP addresses. |
*/ |
@import Foundation; |
NS_ASSUME_NONNULL_BEGIN |
@protocol QHostAddressQueryDelegate; |
/// This class uses CFHost to query a DNS name for its addresses. To do this: |
/// |
/// 1. Create the `QHostAddressQuery` object with the name in question. |
/// |
/// 2. Set a delegate. |
/// |
/// 3. Call `start()`. |
/// |
/// 4. Wait for `-hostAddressQuery:didCompleteWithAddresses:` or `-hostAddressQuery:didCompleteWithError:` |
/// to be called. |
/// |
/// CFHost, and hence this class, is run loop based. The class remembers the run loop on which you |
/// call `start()` and delivers the delegate callbacks on that run loop. |
@interface QHostAddressQuery : NSObject |
/// Creates an instance to query the specified DNS name for its addresses. |
/// |
/// - Parameter name: The DNS name to query. |
- (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER; |
- (instancetype)init NS_UNAVAILABLE; |
/// The DNS name to query. |
@property (nonatomic, copy, readonly) NSString * name; |
/// You must set this to learn about the results of your query. |
@property (nonatomic, weak, readwrite) id<QHostAddressQueryDelegate> delegate; |
/// Starts the query process. |
/// |
/// The query remembers the thread that called this method and calls any delegate |
/// callbacks on that thread. |
/// |
/// - Important: For the query to make progress, this thread must run its run loop in |
/// the default run loop mode. |
/// |
/// - Warning: It is an error to start a query that's running. |
- (void)start; |
/// Cancels a running query. |
/// |
/// If you successfully cancel a query, no delegate callback for that query will be |
/// called. |
/// |
/// If the query is running, you must call this from the thread that called `start()`. |
/// |
/// - Note: It is acceptable to call this on a query that's not running; it does nothing |
// in that case. |
- (void)cancel; |
@end |
/// The delegate protocol for the HostAddressQuery class. |
@protocol QHostAddressQueryDelegate <NSObject> |
@required |
/// Called when the query completes successfully. |
/// |
/// This is called on the same thread that called `start()`. |
/// |
/// - Parameters: |
/// - addresses: The addresses for the DNS name. This has some important properties: |
/// - It will not be empty. |
/// - Each element is an `NSData` value that contains some flavour of `sockaddr` |
/// - It can contain any combination of IPv4 and IPv6 addresses |
/// - The addresses are sorted, with the most preferred first |
/// - query: The query that completed. |
- (void)hostAddressQuery:(QHostAddressQuery *)query didCompleteWithAddresses:(NSArray<NSData *> *)addresses; |
/// Called when the query completes with an error. |
/// |
/// This is called on the same thread that called `start()`. |
/// |
/// - Parameters: |
/// - error: An error describing the failure. |
/// - query: The query that completed. |
/// |
/// - Important: In most cases the error will be in domain `kCFErrorDomainCFNetwork` |
/// with a code of `kCFHostErrorUnknown` (aka `CFNetworkErrors.cfHostErrorUnknown`), |
/// and the user info dictionary will contain an element with the `kCFGetAddrInfoFailureKey` |
/// key whose value is an NSNumber containing an `EAI_XXX` value (from `<netdb.h>`). |
- (void)hostAddressQuery:(QHostAddressQuery *)query didCompleteWithError:(NSError *)error; |
@end |
NS_ASSUME_NONNULL_END |
Copyright © 2017 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2017-03-14