1*6236dae4SAndroid Build Coastguard Worker #ifndef HEADER_CURL_ADDRINFO_H 2*6236dae4SAndroid Build Coastguard Worker #define HEADER_CURL_ADDRINFO_H 3*6236dae4SAndroid Build Coastguard Worker /*************************************************************************** 4*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _ 5*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| | 6*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | | 7*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___ 8*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____| 9*6236dae4SAndroid Build Coastguard Worker * 10*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al. 11*6236dae4SAndroid Build Coastguard Worker * 12*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which 13*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms 14*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html. 15*6236dae4SAndroid Build Coastguard Worker * 16*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is 18*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file. 19*6236dae4SAndroid Build Coastguard Worker * 20*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied. 22*6236dae4SAndroid Build Coastguard Worker * 23*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl 24*6236dae4SAndroid Build Coastguard Worker * 25*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/ 26*6236dae4SAndroid Build Coastguard Worker 27*6236dae4SAndroid Build Coastguard Worker #include "curl_setup.h" 28*6236dae4SAndroid Build Coastguard Worker 29*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_NETINET_IN_H 30*6236dae4SAndroid Build Coastguard Worker # include <netinet/in.h> 31*6236dae4SAndroid Build Coastguard Worker #endif 32*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_NETDB_H 33*6236dae4SAndroid Build Coastguard Worker # include <netdb.h> 34*6236dae4SAndroid Build Coastguard Worker #endif 35*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_ARPA_INET_H 36*6236dae4SAndroid Build Coastguard Worker # include <arpa/inet.h> 37*6236dae4SAndroid Build Coastguard Worker #endif 38*6236dae4SAndroid Build Coastguard Worker 39*6236dae4SAndroid Build Coastguard Worker #ifdef __VMS 40*6236dae4SAndroid Build Coastguard Worker # include <in.h> 41*6236dae4SAndroid Build Coastguard Worker # include <inet.h> 42*6236dae4SAndroid Build Coastguard Worker # include <stdlib.h> 43*6236dae4SAndroid Build Coastguard Worker #endif 44*6236dae4SAndroid Build Coastguard Worker 45*6236dae4SAndroid Build Coastguard Worker /* 46*6236dae4SAndroid Build Coastguard Worker * Curl_addrinfo is our internal struct definition that we use to allow 47*6236dae4SAndroid Build Coastguard Worker * consistent internal handling of this data. We use this even when the system 48*6236dae4SAndroid Build Coastguard Worker * provides an addrinfo structure definition. We use this for all sorts of 49*6236dae4SAndroid Build Coastguard Worker * IPv4 and IPV6 builds. 50*6236dae4SAndroid Build Coastguard Worker */ 51*6236dae4SAndroid Build Coastguard Worker 52*6236dae4SAndroid Build Coastguard Worker struct Curl_addrinfo { 53*6236dae4SAndroid Build Coastguard Worker int ai_flags; 54*6236dae4SAndroid Build Coastguard Worker int ai_family; 55*6236dae4SAndroid Build Coastguard Worker int ai_socktype; 56*6236dae4SAndroid Build Coastguard Worker int ai_protocol; 57*6236dae4SAndroid Build Coastguard Worker curl_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ 58*6236dae4SAndroid Build Coastguard Worker char *ai_canonname; 59*6236dae4SAndroid Build Coastguard Worker struct sockaddr *ai_addr; 60*6236dae4SAndroid Build Coastguard Worker struct Curl_addrinfo *ai_next; 61*6236dae4SAndroid Build Coastguard Worker }; 62*6236dae4SAndroid Build Coastguard Worker 63*6236dae4SAndroid Build Coastguard Worker void 64*6236dae4SAndroid Build Coastguard Worker Curl_freeaddrinfo(struct Curl_addrinfo *cahead); 65*6236dae4SAndroid Build Coastguard Worker 66*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_GETADDRINFO 67*6236dae4SAndroid Build Coastguard Worker int 68*6236dae4SAndroid Build Coastguard Worker Curl_getaddrinfo_ex(const char *nodename, 69*6236dae4SAndroid Build Coastguard Worker const char *servname, 70*6236dae4SAndroid Build Coastguard Worker const struct addrinfo *hints, 71*6236dae4SAndroid Build Coastguard Worker struct Curl_addrinfo **result); 72*6236dae4SAndroid Build Coastguard Worker #endif 73*6236dae4SAndroid Build Coastguard Worker 74*6236dae4SAndroid Build Coastguard Worker #if !(defined(HAVE_GETADDRINFO) && defined(HAVE_GETADDRINFO_THREADSAFE)) 75*6236dae4SAndroid Build Coastguard Worker struct Curl_addrinfo * 76*6236dae4SAndroid Build Coastguard Worker Curl_he2ai(const struct hostent *he, int port); 77*6236dae4SAndroid Build Coastguard Worker #endif 78*6236dae4SAndroid Build Coastguard Worker 79*6236dae4SAndroid Build Coastguard Worker struct Curl_addrinfo * 80*6236dae4SAndroid Build Coastguard Worker Curl_ip2addr(int af, const void *inaddr, const char *hostname, int port); 81*6236dae4SAndroid Build Coastguard Worker 82*6236dae4SAndroid Build Coastguard Worker struct Curl_addrinfo *Curl_str2addr(char *dotted, int port); 83*6236dae4SAndroid Build Coastguard Worker 84*6236dae4SAndroid Build Coastguard Worker #ifdef USE_UNIX_SOCKETS 85*6236dae4SAndroid Build Coastguard Worker struct Curl_addrinfo *Curl_unix2addr(const char *path, bool *longpath, 86*6236dae4SAndroid Build Coastguard Worker bool abstract); 87*6236dae4SAndroid Build Coastguard Worker #endif 88*6236dae4SAndroid Build Coastguard Worker 89*6236dae4SAndroid Build Coastguard Worker #if defined(CURLDEBUG) && defined(HAVE_GETADDRINFO) && \ 90*6236dae4SAndroid Build Coastguard Worker defined(HAVE_FREEADDRINFO) 91*6236dae4SAndroid Build Coastguard Worker void 92*6236dae4SAndroid Build Coastguard Worker curl_dbg_freeaddrinfo(struct addrinfo *freethis, int line, const char *source); 93*6236dae4SAndroid Build Coastguard Worker #endif 94*6236dae4SAndroid Build Coastguard Worker 95*6236dae4SAndroid Build Coastguard Worker #if defined(CURLDEBUG) && defined(HAVE_GETADDRINFO) 96*6236dae4SAndroid Build Coastguard Worker int 97*6236dae4SAndroid Build Coastguard Worker curl_dbg_getaddrinfo(const char *hostname, const char *service, 98*6236dae4SAndroid Build Coastguard Worker const struct addrinfo *hints, struct addrinfo **result, 99*6236dae4SAndroid Build Coastguard Worker int line, const char *source); 100*6236dae4SAndroid Build Coastguard Worker #endif 101*6236dae4SAndroid Build Coastguard Worker 102*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_GETADDRINFO 103*6236dae4SAndroid Build Coastguard Worker #ifdef USE_RESOLVE_ON_IPS 104*6236dae4SAndroid Build Coastguard Worker void Curl_addrinfo_set_port(struct Curl_addrinfo *addrinfo, int port); 105*6236dae4SAndroid Build Coastguard Worker #else 106*6236dae4SAndroid Build Coastguard Worker #define Curl_addrinfo_set_port(x,y) 107*6236dae4SAndroid Build Coastguard Worker #endif 108*6236dae4SAndroid Build Coastguard Worker #endif 109*6236dae4SAndroid Build Coastguard Worker 110*6236dae4SAndroid Build Coastguard Worker #endif /* HEADER_CURL_ADDRINFO_H */ 111