48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 2000, 2001, 2004, 2006, 2007, 2009, 2013, 2016 Internet Systems Consortium, Inc. ("ISC")
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
9a14f870ddc0108402d2daa7a7ff84b6e20f08b4Automatic Updater/* $Id: netdb.h,v 1.9 2009/01/18 23:48:14 tbox Exp $ */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#ifndef NETDB_H
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NETDB_H 1
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
9a14f870ddc0108402d2daa7a7ff84b6e20f08b4Automatic Updater#include <stddef.h>
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#include <winsock2.h>
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * Define if <netdb.h> does not declare struct addrinfo.
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
f42c0dcca86f2009c089e27ba513cb6fc9ee88baEvan Hunt#if _MSC_VER < 1600
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayerstruct addrinfo {
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer int ai_family; /* PF_xxx */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer int ai_socktype; /* SOCK_xxx */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer size_t ai_addrlen; /* Length of ai_addr */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer char *ai_canonname; /* Canonical name for hostname */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer struct sockaddr *ai_addr; /* Binary address */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer struct addrinfo *ai_next; /* Next structure in linked list */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer};
f42c0dcca86f2009c089e27ba513cb6fc9ee88baEvan Hunt#endif
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
29747dfe5e073a299b3681e01f5c55540f8bfed7Mark Andrews * Undefine all \#defines we are interested in as <netdb.h> may or may not have
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * defined them.
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * Error return codes from gethostbyname() and gethostbyaddr()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * (left in extern int h_errno).
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NETDB_INTERNAL
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NETDB_SUCCESS
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef HOST_NOT_FOUND
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef TRY_AGAIN
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NO_RECOVERY
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NO_DATA
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NO_ADDRESS
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NETDB_INTERNAL -1 /* see errno */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NETDB_SUCCESS 0 /* no problem */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */
1016f2638f8a34a802ce41043d5369553ac14246Francis Dupont#define TRY_AGAIN 2 /* Non-Authoritative Host not found, or SERVERFAIL */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NO_DATA 4 /* Valid name, no data record of requested type */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NO_ADDRESS NO_DATA /* no address, look for MX record */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * Error return codes from getaddrinfo()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_ADDRFAMILY
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_AGAIN
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_BADFLAGS
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_FAIL
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_FAMILY
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_MEMORY
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_NODATA
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_NONAME
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_SERVICE
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_SOCKTYPE
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_SYSTEM
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_BADHINTS
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_PROTOCOL
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef EAI_MAX
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_AGAIN 2 /* temporary failure in name resolution */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_FAMILY 5 /* ai_family not supported */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_MEMORY 6 /* memory allocation failure */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_NODATA 7 /* no address associated with hostname */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_SYSTEM 11 /* system error returned in errno */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_BADHINTS 12
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_PROTOCOL 13
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define EAI_MAX 14
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * Flag values for getaddrinfo()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef AI_PASSIVE
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef AI_CANONNAME
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef AI_NUMERICHOST
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define AI_PASSIVE 0x00000001
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define AI_CANONNAME 0x00000002
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define AI_NUMERICHOST 0x00000004
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * Flag values for getipnodebyname()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef AI_V4MAPPED
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef AI_ALL
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef AI_ADDRCONFIG
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef AI_DEFAULT
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define AI_V4MAPPED 0x00000008
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define AI_ALL 0x00000010
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define AI_ADDRCONFIG 0x00000020
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define AI_DEFAULT (AI_V4MAPPED|AI_ADDRCONFIG)
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
68c2ccc953059f389cefc0f8a5ce0f83be7458c9Danny Mayer * Constants for getnameinfo()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NI_MAXHOST
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NI_MAXSERV
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NI_MAXHOST 1025
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NI_MAXSERV 32
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
68c2ccc953059f389cefc0f8a5ce0f83be7458c9Danny Mayer * Flag values for getnameinfo()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NI_NOFQDN
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NI_NUMERICHOST
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NI_NAMEREQD
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NI_NUMERICSERV
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NI_DGRAM
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#undef NI_NUMERICSCOPE
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NI_NOFQDN 0x00000001
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NI_NUMERICHOST 0x00000002
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NI_NAMEREQD 0x00000004
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NI_NUMERICSERV 0x00000008
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NI_DGRAM 0x00000010
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define NI_NUMERICSCOPE 0x00000020 /*2553bis-00*/
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * Structures for getrrsetbyname()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayerstruct rdatainfo {
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer unsigned int rdi_length;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer unsigned char *rdi_data;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer};
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayerstruct rrsetinfo {
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer unsigned int rri_flags;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer int rri_rdclass;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer int rri_rdtype;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer unsigned int rri_ttl;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer unsigned int rri_nrdatas;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer unsigned int rri_nsigs;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer char *rri_name;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer struct rdatainfo *rri_rdatas;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer struct rdatainfo *rri_sigs;
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer};
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * Flags for getrrsetbyname()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define RRSET_VALIDATED 0x00000001
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer /* Set was dnssec validated */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer/*
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer * Return codes for getrrsetbyname()
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer */
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define ERRSET_SUCCESS 0
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define ERRSET_NOMEMORY 1
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define ERRSET_FAIL 2
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#define ERRSET_INVAL 3
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer
48b785fe6bcc95831f962b9b3a61c0b39e339558Danny Mayer#endif /* NETDB_H */