1 /* MIT License 2 * 3 * Copyright (c) 2009 Daniel Stenberg 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a copy 6 * of this software and associated documentation files (the "Software"), to deal 7 * in the Software without restriction, including without limitation the rights 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 * copies of the Software, and to permit persons to whom the Software is 10 * furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 * SOFTWARE. 23 * 24 * SPDX-License-Identifier: MIT 25 */ 26 #ifndef __ARES_DATA_H 27 #define __ARES_DATA_H 28 29 typedef enum { 30 ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */ 31 ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */ 32 ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */ 33 ARES_DATATYPE_TXT_EXT, /* struct ares_txt_ext - introduced in 1.11.0 */ 34 ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */ 35 ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */ 36 ARES_DATATYPE_NAPTR_REPLY, /* struct ares_naptr_reply - introduced in 1.7.6 */ 37 ARES_DATATYPE_SOA_REPLY, /* struct ares_soa_reply - introduced in 1.9.0 */ 38 ARES_DATATYPE_URI_REPLY, /* struct ares_uri_reply */ 39 #if 0 40 ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */ 41 ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */ 42 ARES_DATATYPE_HOSTENT, /* struct hostent */ 43 ARES_DATATYPE_OPTIONS, /* struct ares_options */ 44 #endif 45 ARES_DATATYPE_ADDR_PORT_NODE, /* struct ares_addr_port_node - introduced 46 in 1.11.0 */ 47 ARES_DATATYPE_CAA_REPLY, /* struct ares_caa_reply - introduced in 1.17 */ 48 ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */ 49 } ares_datatype; 50 51 #define ARES_DATATYPE_MARK 0xbead 52 53 /* 54 * ares_data struct definition is internal to c-ares and shall not 55 * be exposed by the public API in order to allow future changes 56 * and extensions to it without breaking ABI. This will be used 57 * internally by c-ares as the container of multiple types of data 58 * dynamically allocated for which a reference will be returned 59 * to the calling application. 60 * 61 * c-ares API functions returning a pointer to c-ares internally 62 * allocated data will actually be returning an interior pointer 63 * into this ares_data struct. 64 * 65 * All this is 'invisible' to the calling application, the only 66 * requirement is that this kind of data must be free'ed by the 67 * calling application using ares_free_data() with the pointer 68 * it has received from a previous c-ares function call. 69 */ 70 71 struct ares_data { 72 ares_datatype type; /* Actual data type identifier. */ 73 unsigned int mark; /* Private ares_data signature. */ 74 75 union { 76 struct ares_txt_reply txt_reply; 77 struct ares_txt_ext txt_ext; 78 struct ares_srv_reply srv_reply; 79 struct ares_addr_node addr_node; 80 struct ares_addr_port_node addr_port_node; 81 struct ares_mx_reply mx_reply; 82 struct ares_naptr_reply naptr_reply; 83 struct ares_soa_reply soa_reply; 84 struct ares_caa_reply caa_reply; 85 struct ares_uri_reply uri_reply; 86 } data; 87 }; 88 89 void *ares_malloc_data(ares_datatype type); 90 91 92 #endif /* __ARES_DATA_H */ 93