1/* 2 * Copyright (c) 2002-2009 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#ifndef _NETDB_ASYNC_H_ 25#define _NETDB_ASYNC_H_ 26 27#include <sys/cdefs.h> 28#include <mach/mach.h> 29#include <netdb.h> 30 31#define gethostbyname_async_handle_reply gethostbyname_async_handleReply 32#define gethostbyaddr_async_handle_reply gethostbyaddr_async_handleReply 33#define getipnodebyaddr_async_handle_reply getipnodebyaddr_async_handleReply 34#define getipnodebyname_async_handle_reply getipnodebyname_async_handleReply 35 36/* SPI for parallel / fast getaddrinfo */ 37#define AI_PARALLEL 0x00000008 38#define AI_SRV 0x01000000 39 40__BEGIN_DECLS 41 42 43/* 44 * getaddrinfo 45 */ 46typedef void (*getaddrinfo_async_callback)(int32_t status, struct addrinfo *res, void *context); 47int32_t getaddrinfo_async_start(mach_port_t *p, const char *nodename, const char *servname, const struct addrinfo *hints, getaddrinfo_async_callback callback, void *context); 48int32_t getaddrinfo_async_send(mach_port_t *p, const char *nodename, const char *servname, const struct addrinfo *hints); 49int32_t getaddrinfo_async_receive(mach_port_t p, struct addrinfo **res); 50int32_t getaddrinfo_async_handle_reply(void *msg); 51void getaddrinfo_async_cancel(mach_port_t p); 52 53 54/* 55 * getnameinfo 56 */ 57typedef void (*getnameinfo_async_callback)(int32_t status, char *host, char *serv, void *context); 58int32_t getnameinfo_async_start(mach_port_t *p, const struct sockaddr *sa, size_t salen, int flags, getnameinfo_async_callback callback, void *context); 59int32_t getnameinfo_async_send(mach_port_t *p, const struct sockaddr *sa, size_t salen, int flags); 60int32_t getnameinfo_async_receive(mach_port_t p, char **host, char **serv); 61int32_t getnameinfo_async_handle_reply(void *msg); 62void getnameinfo_async_cancel(mach_port_t p); 63 64/* 65 * DNS 66 */ 67typedef void (*dns_async_callback)(int32_t status, char *buf, uint32_t len, struct sockaddr *from, int fromlen, void *context); 68int32_t dns_async_start(mach_port_t *p, const char *name, uint16_t dnsclass, uint16_t dnstype, uint32_t do_search, dns_async_callback callback, void *context); 69int32_t dns_async_send(mach_port_t *p, const char *name, uint16_t dnsclass, uint16_t dnstype, uint32_t do_search); 70int32_t dns_async_receive(mach_port_t p, char **buf, uint32_t *len, struct sockaddr **from, uint32_t *fromlen); 71int32_t dns_async_handle_reply(void *msg); 72void dns_async_cancel(mach_port_t p); 73 74/* 75 * Host lookup 76 */ 77 78/* 79 @typedef gethostbyaddr_async_callback 80 @discussion Type of the callback function used when a 81 gethostbyaddr_async_start() request is delivered. 82 @param hent The resolved host entry. 83 @param context The context provided when the request 84 was initiated. 85 */ 86typedef void (*gethostbyaddr_async_callback)(struct hostent *hent, void *context); 87 88/*! 89 @function gethostbyaddr_async_start 90 @description Asynchronously resolves an Internet address 91 @param addr The address to be resolved. 92 @param len The length, in bytes, of the address. 93 @param type 94 @param callout The function to be called when the specified 95 address has been resolved. 96 @param context A user specified context which will be passed 97 to the callout function. 98 @result A mach reply port which will be sent a message when 99 the addr resolution has completed. This message 100 should be passed to the gethostbyaddr_async_handleReply 101 function. A NULL value indicates that no address 102 was specified or some other error occurred which 103 prevented the resolution from being started. 104 */ 105mach_port_t 106gethostbyaddr_async_start(const char *addr, int len, int type, gethostbyaddr_async_callback callout, void *context); 107 108/*! 109 @function gethostbyaddr_async_cancel 110 @description Cancel an asynchronous request currently in progress. 111 @param port The mach reply port associated with the request to be cancelled. 112 */ 113void gethostbyaddr_async_cancel(mach_port_t port); 114 115/*! 116 @function gethostbyaddr_async_handleReply 117 @description This function should be called with the Mach message sent 118 to the port returned by the call to gethostbyaddr_async_start. 119 The reply message will be interpreted and will result in a 120 call to the specified callout function. 121 @param replyMsg The Mach message. 122 */ 123void gethostbyaddr_async_handleReply(void *replyMsg); 124 125/* 126 @typedef gethostbyname_async_callback 127 @discussion Type of the callback function used when a 128 gethostbyname_async_start() request is delivered. 129 @param hent The resolved host entry. 130 @param context The context provided when the request was initiated. 131 */ 132typedef void (*gethostbyname_async_callback)(struct hostent *hent, void *context); 133 134/*! 135 @function gethostbyname_async_start 136 @description Asynchronously resolves a hostname 137 @param name The hostname to be resolved. 138 @param callout The function to be called when the specified 139 hostname has been resolved. 140 @param context A user specified context which will be passed 141 to the callout function. 142 @result A mach reply port which will be sent a message when 143 the name resolution has completed. This message 144 should be passed to the gethostbyname_async_handleReply 145 function. A NULL value indicates that no hostname 146 was specified or some other error occurred which 147 prevented the resolution from being started. 148 */ 149mach_port_t gethostbyname_async_start(const char *name, gethostbyname_async_callback callout, void *context); 150 151/*! 152 @function gethostbyname_async_cancel 153 @description Cancel an asynchronous request currently in progress. 154 @param port The mach reply port associated with the request to be cancelled. 155 */ 156void gethostbyname_async_cancel(mach_port_t port); 157 158/*! 159 @function gethostbyname_async_handleReply 160 @description This function should be called with the Mach message sent 161 to the port returned by the call to gethostbyname_async_start. 162 The reply message will be interpreted and will result in a 163 call to the specified callout function. 164 @param replyMsg The Mach message. 165 */ 166void gethostbyname_async_handleReply(void *replyMsg); 167 168/* 169 @typedef getipnodebyaddr_async_callback 170 @discussion Type of the callback function used when a 171 getipnodebyaddr_async_start() request is delivered. 172 @param hent The resolved host entry. If not NULL, the caller 173 must call freehostent() on the host entry. 174 @param error If error code if the resolved host entry is NULL 175 @param context The context provided when the request was initiated. 176 */ 177typedef void (*getipnodebyaddr_async_callback)(struct hostent *hent, int error, void *context); 178 179/*! 180 @function getipnodebyaddr_async_start 181 @description Asynchronously resolves an Internet address 182 @param addr The address to be resolved. 183 @param len The length, in bytes, of the address. 184 @param af The address family 185 @param error 186 @param callout The function to be called when the specified 187 address has been resolved. 188 @param context A user specified context which will be passed 189 to the callout function. 190 @result A mach reply port which will be sent a message when 191 the addr resolution has completed. This message 192 should be passed to the getipnodebyaddr_async_handleReply 193 function. A NULL value indicates that no address 194 was specified or some other error occurred which 195 prevented the resolution from being started. 196 */ 197mach_port_t getipnodebyaddr_async_start(const void *addr, size_t len, int af, int *error, getipnodebyaddr_async_callback callout, void *context); 198 199/*! 200 @function getipnodebyaddr_async_cancel 201 @description Cancel an asynchronous request currently in progress. 202 @param port The mach reply port associated with the request to be cancelled. 203 */ 204void getipnodebyaddr_async_cancel(mach_port_t port); 205 206/*! 207 @function getipnodebyaddr_async_handleReply 208 @description This function should be called with the Mach message sent 209 to the port returned by the call to getipnodebyaddr_async_start. 210 The reply message will be interpreted and will result in a 211 call to the specified callout function. 212 @param replyMsg The Mach message. 213 */ 214void getipnodebyaddr_async_handleReply(void *replyMsg); 215 216 217/* 218 @typedef getipnodebyname_async_callback 219 @discussion Type of the callback function used when a 220 getipnodebyname_async_start() request is delivered. 221 @param hent The resolved host entry. If not NULL, the caller 222 must call freehostent() on the host entry. 223 @param error If error code if the resolved host entry is NULL 224 @param context The context provided when the request was initiated. 225 */ 226typedef void (*getipnodebyname_async_callback)(struct hostent *hent, int error, void *context); 227 228/*! 229 @function getipnodebyname_async_start 230 @description Asynchronously resolves a hostname 231 @param name The hostname to be resolved. 232 @param af 233 @param flags 234 @param error 235 @param callout The function to be called when the specified 236 hostname has been resolved. 237 @param context A user specified context which will be passed 238 to the callout function. 239 @result A mach reply port which will be sent a message when 240 the name resolution has completed. This message 241 should be passed to the getipnodebyname_async_handleReply 242 function. A NULL value indicates that no hostname 243 was specified or some other error occurred which 244 prevented the resolution from being started. 245 */ 246mach_port_t getipnodebyname_async_start(const char *name, int af, int flags, int *error, getipnodebyname_async_callback callout, void *context); 247 248/*! 249 @function getipnodebyname_async_cancel 250 @description Cancel an asynchronous request currently in progress. 251 @param port The mach reply port associated with the request to be cancelled. 252 */ 253void getipnodebyname_async_cancel(mach_port_t port); 254 255/*! 256 @function getipnodebyname_async_handleReply 257 @description This function should be called with the Mach message sent 258 to the port returned by the call to getipnodebyname_async_start. 259 The reply message will be interpreted and will result in a 260 call to the specified callout function. 261 @param replyMsg The Mach message. 262 */ 263void getipnodebyname_async_handleReply(void *replyMsg); 264 265__END_DECLS 266 267#endif /* !_NETDB_ASYNC_H_ */ 268