lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | |
| 2 | /* Copyright (C) 2009-2013 by Daniel Stenberg |
| 3 | * |
| 4 | * Permission to use, copy, modify, and distribute this |
| 5 | * software and its documentation for any purpose and without |
| 6 | * fee is hereby granted, provided that the above copyright |
| 7 | * notice appear in all copies and that both that copyright |
| 8 | * notice and this permission notice appear in supporting |
| 9 | * documentation, and that the name of M.I.T. not be used in |
| 10 | * advertising or publicity pertaining to distribution of the |
| 11 | * software without specific, written prior permission. |
| 12 | * M.I.T. makes no representations about the suitability of |
| 13 | * this software for any purpose. It is provided "as is" |
| 14 | * without express or implied warranty. |
| 15 | */ |
| 16 | |
| 17 | typedef enum { |
| 18 | ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */ |
| 19 | ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */ |
| 20 | ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */ |
| 21 | ARES_DATATYPE_TXT_EXT, /* struct ares_txt_ext - introduced in 1.11.0 */ |
| 22 | ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */ |
| 23 | ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */ |
| 24 | ARES_DATATYPE_NAPTR_REPLY,/* struct ares_naptr_reply - introduced in 1.7.6 */ |
| 25 | ARES_DATATYPE_SOA_REPLY, /* struct ares_soa_reply - introduced in 1.9.0 */ |
| 26 | #if 0 |
| 27 | ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */ |
| 28 | ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */ |
| 29 | ARES_DATATYPE_HOSTENT, /* struct hostent */ |
| 30 | ARES_DATATYPE_OPTIONS, /* struct ares_options */ |
| 31 | #endif |
| 32 | ARES_DATATYPE_ADDR_PORT_NODE, /* struct ares_addr_port_node - introduced in 1.11.0 */ |
| 33 | ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */ |
| 34 | } ares_datatype; |
| 35 | |
| 36 | #define ARES_DATATYPE_MARK 0xbead |
| 37 | |
| 38 | /* |
| 39 | * ares_data struct definition is internal to c-ares and shall not |
| 40 | * be exposed by the public API in order to allow future changes |
| 41 | * and extensions to it without breaking ABI. This will be used |
| 42 | * internally by c-ares as the container of multiple types of data |
| 43 | * dynamically allocated for which a reference will be returned |
| 44 | * to the calling application. |
| 45 | * |
| 46 | * c-ares API functions returning a pointer to c-ares internally |
| 47 | * allocated data will actually be returning an interior pointer |
| 48 | * into this ares_data struct. |
| 49 | * |
| 50 | * All this is 'invisible' to the calling application, the only |
| 51 | * requirement is that this kind of data must be free'ed by the |
| 52 | * calling application using ares_free_data() with the pointer |
| 53 | * it has received from a previous c-ares function call. |
| 54 | */ |
| 55 | |
| 56 | struct ares_data { |
| 57 | ares_datatype type; /* Actual data type identifier. */ |
| 58 | unsigned int mark; /* Private ares_data signature. */ |
| 59 | union { |
| 60 | struct ares_txt_reply txt_reply; |
| 61 | struct ares_txt_ext txt_ext; |
| 62 | struct ares_srv_reply srv_reply; |
| 63 | struct ares_addr_node addr_node; |
| 64 | struct ares_addr_port_node addr_port_node; |
| 65 | struct ares_mx_reply mx_reply; |
| 66 | struct ares_naptr_reply naptr_reply; |
| 67 | struct ares_soa_reply soa_reply; |
| 68 | } data; |
| 69 | }; |
| 70 | |
| 71 | void *ares_malloc_data(ares_datatype type); |
| 72 | |