getdns_extra.h
Go to the documentation of this file.
1 
8 /*
9  * Copyright (c) 2013, NLNet Labs, Verisign, Inc.
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions are met:
14  * * Redistributions of source code must retain the above copyright
15  * notice, this list of conditions and the following disclaimer.
16  * * Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in the
18  * documentation and/or other materials provided with the distribution.
19  * * Neither the names of the copyright holders nor the
20  * names of its contributors may be used to endorse or promote products
21  * derived from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26  * DISCLAIMED. IN NO EVENT SHALL Verisign, Inc. BE LIABLE FOR ANY
27  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
30  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 #ifndef _GETDNS_EXTRA_H_
36 #define _GETDNS_EXTRA_H_
37 
38 #include <getdns/getdns.h>
39 #include <sys/time.h>
40 #include <stdio.h>
41 #include <time.h>
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
59 #define GETDNS_RETURN_NO_UPSTREAM_AVAILABLE ((getdns_return_t) 398 )
60 #define GETDNS_RETURN_NO_UPSTREAM_AVAILABLE_TEXT "None of the configured upstreams could be used to send queries on the specified transports"
61 #define GETDNS_RETURN_NEED_MORE_SPACE ((getdns_return_t) 399 )
62 #define GETDNS_RETURN_NEED_MORE_SPACE_TEXT "The buffer was too small"
63 
71 #define GETDNS_CONTEXT_CODE_TLS_AUTHENTICATION 618
72 #define GETDNS_CONTEXT_CODE_TLS_AUTHENTICATION_TEXT "Change related to getdns_context_set_tls_authentication"
73 #define GETDNS_CONTEXT_CODE_EDNS_CLIENT_SUBNET_PRIVATE 619
74 #define GETDNS_CONTEXT_CODE_EDNS_CLIENT_SUBNET_PRIVATE_TEXT "Change related to getdns_context_set_edns_client_subnet_private"
75 #define GETDNS_CONTEXT_CODE_TLS_QUERY_PADDING_BLOCKSIZE 620
76 #define GETDNS_CONTEXT_CODE_TLS_QUERY_PADDING_BLOCKSIZE_TEXT "Change related to getdns_context_set_tls_query_padding_blocksize"
77 #define GETDNS_CONTEXT_CODE_PUBKEY_PINSET 621
78 #define GETDNS_CONTEXT_CODE_PUBKEY_PINSET_TEXT "Change related to getdns_context_set_pubkey_pinset"
79 #define GETDNS_CONTEXT_CODE_ROUND_ROBIN_UPSTREAMS 622
80 #define GETDNS_CONTEXT_CODE_ROUND_ROBIN_UPSTREAMS_TEXT "Change related to getdns_context_set_round_robin_upstreams"
81 #define GETDNS_CONTEXT_CODE_TLS_BACKOFF_TIME 623
82 #define GETDNS_CONTEXT_CODE_TLS_BACKOFF_TIME_TEXT "Change related to getdns_context_set_tls_backoff_time"
83 #define GETDNS_CONTEXT_CODE_TLS_CONNECTION_RETRIES 624
84 #define GETDNS_CONTEXT_CODE_TLS_CONNECTION_RETRIES_TEXT "Change related to getdns_context_set_tls_connection_retries"
85 
93 #define GETDNS_VERSION "1.1.0-rc1"
94 #define GETDNS_NUMERIC_VERSION 0x0100C100
95 #define GETDNS_API_VERSION "December 2015"
96 #define GETDNS_API_NUMERIC_VERSION 0x07df0c00
97 
101 /* an alias for REQUIRED */
102 #define GETDNS_AUTHENTICATION_HOSTNAME GETDNS_AUTHENTICATION_REQUIRED
103 
108 /* Authentication options used when doing TLS */
109 typedef enum getdns_tls_authentication_t {
113 
114 #define GETDNS_AUTHENTICATION_NONE_TEXT "See getdns_context_set_tls_authentication()"
115 #define GETDNS_AUTHENTICATION_REQUIRED_TEXT "See getdns_context_set_tls_authentication()"
116 
124 #define GETDNS_APPEND_NAME_TO_SINGLE_LABEL_FIRST ((getdns_append_name_t) 554 )
125 #define GETDNS_APPEND_NAME_TO_SINGLE_LABEL_FIRST_TEXT "See getdns_context_set_append_name()"
126 
139 #define GETDNS_TRANSPORT_TLS_ONLY_KEEP_CONNECTIONS_OPEN 544
140 #define GETDNS_TRANSPORT_TLS_ONLY_KEEP_CONNECTIONS_OPEN_TEXT "See getdns_context_set_dns_transport()"
141 #define GETDNS_TRANSPORT_TLS_FIRST_AND_FALL_BACK_TO_TCP_KEEP_CONNECTIONS_OPEN 545
142 #define GETDNS_TRANSPORT_TLS_FIRST_AND_FALL_BACK_TO_TCP_KEEP_CONNECTIONS_OPEN_TEXT "See getdns_context_set_dns_transport()"
143 
160 typedef void (*getdns_eventloop_callback)(void *userarg);
161 
162 /* context extension event data */
163 typedef struct getdns_eventloop_event {
164  void *userarg;
169  /* Pointer to the underlying event
170  * that the eventloop extension will create and free.
171  */
172  void *ev;
176 typedef struct getdns_eventloop {
179 
180 /* A prototype for a method having no arguments and not return value. */
181 typedef void (*getdns_eventloop_noargs)(getdns_eventloop *loop);
182 
183 /* Call the extension to schedule an event
184  *
185  * The getdns_eventloop_event must be provided by the caller with the callbacks
186  * and userarg therein already supplied (by the caller). This function will set
187  * the ev pointer (in the getdns_eventloop_event) to refer to the underlying
188  * (extension) event.
189  */
191  int fd, uint64_t timeout, getdns_eventloop_event *ev);
192 
193 /* Call the extension to clean a scheduled event */
197 typedef void (*getdns_eventloop_run_once)(getdns_eventloop *loop,int blocking);
199  /* Virtual Method Table */
200 struct getdns_eventloop_vmt {
201  getdns_eventloop_noargs cleanup;
202  getdns_eventloop_schedule schedule;
205  getdns_eventloop_run_once run_once;
206 };
207 
208 /* set an event loop extension on the context */
211  getdns_eventloop *eventloop);
212 
213 /* get the currently active (pluggable) eventloop from the context */
216  getdns_eventloop **eventloop);
217 
218 /* detach the eventloop from the context */
221 
222 /* Run the context's event loop until nothing more to do */
223 void
247  void (*value) (getdns_context *, getdns_context_code_t, void *));
248 
249 /* Enable the return_dnssec_status extension on every request.
250  value is either GETDNS_EXTENSION_TRUE or GETDNS_EXTENSION_FALSE
251  returns GETDNS_RETURN_GOOD on success or GETDNS_RETURN_INVALID_PARAMETER
252  if context or value is invalid */
254  getdns_context *context, int enabled);
255 
256 /* tells underlying unbound to use background threads or fork */
258  int use_threads);
259 
263 
266 
268 getdns_context_set_tls_backoff_time(getdns_context *context, uint16_t value);
269 
272 
275 
288  getdns_resolution_t* value);
289 
293  size_t* namespace_count, getdns_namespace_t **namespaces);
294 
297  getdns_transport_t* value);
298 
301  size_t* transport_count, getdns_transport_list_t **transports);
302 
305  uint16_t* limit);
306 
308 getdns_context_get_timeout(getdns_context *context, uint64_t* timeout);
309 
311 getdns_context_get_idle_timeout(getdns_context *context, uint64_t* timeout);
312 
315  getdns_redirects_t* value);
316 
319  getdns_list **addresses);
320 
323  getdns_append_name_t* value);
324 
327 
330  getdns_list **value);
331 
334  uint32_t* value);
335 
338  getdns_list **upstream_list);
339 
342  uint16_t* value);
343 
346  uint8_t* value);
347 
349 getdns_context_get_edns_version(getdns_context *context, uint8_t* value);
350 
352 getdns_context_get_edns_do_bit(getdns_context *context, uint8_t* value);
353 
356 
359 
363 
366  uint8_t* value);
367 
370  uint16_t* value);
371 
374  uint16_t* value);
375 
390 getdns_context_get_update_callback(getdns_context *context, void **userarg,
391  void (**value) (getdns_context *, getdns_context_code_t, void *));
392 
402 const char *getdns_get_version(void);
403 uint32_t getdns_get_version_number(void);
404 const char *getdns_get_api_version(void);
405 uint32_t getdns_get_api_version_number(void);
406 
414 const char *getdns_get_errorstr_by_id(uint16_t err);
415 
416 /* dict util */
417 /* set a string as bindata */
419  char *name, const char *value);
420 
421 /* get a string from a dict. the result must be freed if valid */
423  char *name, char **result);
424 
425 
426 
457  getdns_list *support_records,
458  getdns_list *trust_anchors,
459  time_t validation_time, uint32_t skew);
460 
492  getdns_context* context,
493  const char* str);
494 
495 
510  const getdns_list* pinset,
511  getdns_list* errorlist);
512 
547 getdns_context_config(getdns_context *context, const getdns_dict *config_dict);
548 
549 
550 
569 int
570 getdns_pretty_snprint_dict(char *str, size_t size, const getdns_dict *dict);
571 
577 char *
578 getdns_pretty_print_list(const getdns_list *some_list);
579 
590 int
591 getdns_pretty_snprint_list(char *str, size_t size, const getdns_list *list);
592 
602 char *
603 getdns_print_json_dict(const getdns_dict *some_dict, int pretty);
604 
619 int
621  char *str, size_t size, const getdns_dict *dict, int pretty);
622 
632 char *
633 getdns_print_json_list(const getdns_list *some_list, int pretty);
634 
649 int
651  char *str, size_t size, const getdns_list *list, int pretty);
652 
653 
672  const getdns_dict *rr_dict, uint8_t **wire, size_t *wire_sz);
673 
689  const getdns_dict *rr_dict, uint8_t *wire, size_t *wire_sz);
690 
710  const getdns_dict *rr_dict, uint8_t **wire, int *wire_sz);
711 
712 
723  const uint8_t *wire, size_t wire_sz, getdns_dict **rr_dict);
724 
736  const uint8_t *wire, size_t *wire_sz, getdns_dict **rr_dict);
737 
752  const uint8_t **wire, size_t *wire_sz, getdns_dict **rr_dict);
753 
754 
764  const getdns_dict *rr_dict, char **str);
765 
781  const getdns_dict *rr_dict, char *str, size_t *str_len);
782 
802  const getdns_dict *rr_dict, char **str, int *str_len);
803 
804 
816  const char *str, getdns_dict **rr_dict,
817  const char *origin, uint32_t default_ttl);
818 
830  FILE *in, getdns_list **rr_list,
831  const char *origin, uint32_t default_ttl);
832 
843  const getdns_dict *msg_dict, uint8_t **wire, size_t *wire_sz);
844 
860  const getdns_dict *msg_dict, uint8_t *wire, size_t *wire_sz);
861 
881  const getdns_dict *msg_dict, uint8_t **wire, int *wire_sz);
882 
883 
894  const uint8_t *wire, size_t wire_sz, getdns_dict **msg_dict);
895 
907  const uint8_t *wire, size_t *wire_sz, getdns_dict **msg_dict);
908 
923  const uint8_t **wire, size_t *wire_sz, getdns_dict **msg_dict);
924 
925 
935  const getdns_dict *msg_dict, char **str);
936 
952  const getdns_dict *msg_dict, char *str, size_t *str_len);
953 
973  const getdns_dict *msg_dict, char **str, int *str_len);
974 
1006 getdns_str2dict(const char *str, getdns_dict **dict);
1007 
1017 getdns_str2list(const char *str, getdns_list **list);
1018 
1056 getdns_str2bindata(const char *str, getdns_bindata **bindata);
1057 
1070 getdns_str2int(const char *str, uint32_t *value);
1071 
1083 typedef void (*getdns_request_handler_t)(
1084  getdns_context *context,
1085  getdns_callback_type_t callback_type,
1086  getdns_dict *request,
1087  void *userarg,
1088  getdns_transaction_t request_id
1089 );
1090 
1120  getdns_context *context, const getdns_list *listen_addresses,
1121  void *userarg, getdns_request_handler_t handler);
1122 
1140 getdns_reply(getdns_context *context,
1141  getdns_dict *reply, getdns_transaction_t request_id);
1142 
1143 
1152 /* WARNING! Function getdns_strerror is not in the API specification and
1153  * is likely to be removed from future versions of our implementation, to be
1154  * replaced by getdns_get_errorstr_by_id or something similar.
1155  * Please use getdns_get_errorstr_by_id instead of getdns_strerror.
1156  */
1157 getdns_return_t getdns_strerror(getdns_return_t err, char *buf, size_t buflen);
1158 
1160 
1161 /* Async support */
1163  struct timeval* next_timeout);
1164 
1172 #ifdef __cplusplus
1173 }
1174 #endif
1175 
1176 #endif
1177 
getdns_resolution_t
Definition: getdns.h:142
getdns_return_t getdns_context_get_dns_transport_list(getdns_context *context, size_t *transport_count, getdns_transport_list_t **transports)
getdns_return_t getdns_context_set_tls_backoff_time(getdns_context *context, uint16_t value)
getdns_redirects_t
Definition: getdns.h:157
getdns_return_t getdns_context_get_tls_connection_retries(getdns_context *context, uint16_t *value)
getdns_return_t getdns_pubkey_pinset_sanity_check(const getdns_list *pinset, getdns_list *errorlist)
getdns_return_t getdns_context_get_dns_root_servers(getdns_context *context, getdns_list **addresses)
getdns_tls_authentication_t
Definition: getdns_extra.h:106
getdns_return_t getdns_wire2rr_dict_scan(const uint8_t **wire, size_t *wire_sz, getdns_dict **rr_dict)
int getdns_pretty_snprint_dict(char *str, size_t size, const getdns_dict *dict)
getdns_namespace_t
Definition: getdns.h:121
getdns_dict * getdns_pubkey_pin_create_from_string(getdns_context *context, const char *str)
getdns_return_t getdns_context_config(getdns_context *context, const getdns_dict *config_dict)
const char * getdns_get_version(void)
getdns_return_t getdns_context_get_dnssec_allowed_skew(getdns_context *context, uint32_t *value)
getdns_return_t getdns_context_set_update_callback(getdns_context *context, void *userarg, void(*value)(getdns_context *, getdns_context_code_t, void *))
getdns_return_t getdns_wire2msg_dict(const uint8_t *wire, size_t wire_sz, getdns_dict **msg_dict)
getdns_return_t getdns_str2int(const char *str, uint32_t *value)
getdns_return_t getdns_dict_util_set_string(getdns_dict *dict, char *name, const char *value)
getdns_return_t getdns_fp2rr_list(FILE *in, getdns_list **rr_list, const char *origin, uint32_t default_ttl)
getdns_return_t getdns_context_get_tls_backoff_time(getdns_context *context, uint16_t *value)
uint64_t getdns_transaction_t
Definition: getdns.h:476
getdns_return_t getdns_context_set_use_threads(getdns_context *context, int use_threads)
struct getdns_eventloop getdns_eventloop
getdns_return_t getdns_context_get_namespaces(getdns_context *context, size_t *namespace_count, getdns_namespace_t **namespaces)
getdns_return_t getdns_validate_dnssec2(getdns_list *to_validate, getdns_list *support_records, getdns_list *trust_anchors, time_t validation_time, uint32_t skew)
getdns_return_t getdns_context_get_update_callback(getdns_context *context, void **userarg, void(**value)(getdns_context *, getdns_context_code_t, void *))
getdns_return_t getdns_msg_dict2wire_scan(const getdns_dict *msg_dict, uint8_t **wire, int *wire_sz)
getdns_return_t getdns_str2bindata(const char *str, getdns_bindata **bindata)
void(* getdns_eventloop_run_once)(getdns_eventloop *loop, int blocking)
Definition: getdns_extra.h:190
getdns_return_t getdns_context_get_eventloop(getdns_context *context, getdns_eventloop **eventloop)
getdns_return_t getdns_wire2rr_dict(const uint8_t *wire, size_t wire_sz, getdns_dict **rr_dict)
Public interfaces to getdns, include in your application to use getdns API.
getdns_return_t getdns_context_set_tls_authentication(getdns_context *context, getdns_tls_authentication_t value)
getdns_return_t getdns_wire2rr_dict_buf(const uint8_t *wire, size_t *wire_sz, getdns_dict **rr_dict)
getdns_return_t getdns_reply(getdns_context *context, getdns_dict *reply, getdns_transaction_t request_id)
getdns_return_t getdns_strerror(getdns_return_t err, char *buf, size_t buflen)
getdns_return_t getdns_context_get_append_name(getdns_context *context, getdns_append_name_t *value)
char * getdns_print_json_list(const getdns_list *some_list, int pretty)
getdns_return_t(* getdns_eventloop_clear)(getdns_eventloop *loop, getdns_eventloop_event *ev)
Definition: getdns_extra.h:188
getdns_return_t getdns_context_get_edns_client_subnet_private(getdns_context *context, uint8_t *value)
const char * getdns_get_errorstr_by_id(uint16_t err)
getdns_return_t getdns_context_get_edns_do_bit(getdns_context *context, uint8_t *value)
getdns_transport_list_t
Definition: getdns.h:191
int getdns_snprint_json_list(char *str, size_t size, const getdns_list *list, int pretty)
getdns_return_t getdns_context_set_eventloop(getdns_context *context, getdns_eventloop *eventloop)
getdns_return_t getdns_str2rr_dict(const char *str, getdns_dict **rr_dict, const char *origin, uint32_t default_ttl)
getdns_return_t getdns_context_set_return_dnssec_status(getdns_context *context, int enabled)
getdns_return_t getdns_context_get_suffix(getdns_context *context, getdns_list **value)
getdns_return_t getdns_context_set_listen_addresses(getdns_context *context, const getdns_list *listen_addresses, void *userarg, getdns_request_handler_t handler)
uint32_t getdns_get_api_version_number(void)
getdns_return_t getdns_rr_dict2str_scan(const getdns_dict *rr_dict, char **str, int *str_len)
void getdns_context_run(getdns_context *context)
uint32_t getdns_context_get_num_pending_requests(getdns_context *context, struct timeval *next_timeout)
getdns_return_t getdns_context_process_async(getdns_context *context)
getdns_return_t getdns_context_get_idle_timeout(getdns_context *context, uint64_t *timeout)
int getdns_snprint_json_dict(char *str, size_t size, const getdns_dict *dict, int pretty)
getdns_return_t getdns_msg_dict2str_scan(const getdns_dict *msg_dict, char **str, int *str_len)
getdns_return_t getdns_wire2msg_dict_scan(const uint8_t **wire, size_t *wire_sz, getdns_dict **msg_dict)
getdns_return_t getdns_rr_dict2wire(const getdns_dict *rr_dict, uint8_t **wire, size_t *wire_sz)
struct getdns_list getdns_list
Definition: getdns.h:503
getdns_eventloop_callback read_cb
Definition: getdns_extra.h:158
getdns_return_t getdns_context_detach_eventloop(getdns_context *context)
getdns_callback_type_t
Definition: getdns.h:275
getdns_context_code_t
Definition: getdns.h:228
getdns_return_t getdns_rr_dict2str(const getdns_dict *rr_dict, char **str)
getdns_return_t getdns_rr_dict2str_buf(const getdns_dict *rr_dict, char *str, size_t *str_len)
getdns_return_t getdns_context_get_resolution_type(getdns_context *context, getdns_resolution_t *value)
struct getdns_eventloop_event getdns_eventloop_event
getdns_return_t getdns_context_get_dnssec_trust_anchors(getdns_context *context, getdns_list **value)
getdns_return_t getdns_dict_util_get_string(getdns_dict *dict, char *name, char **result)
getdns_return_t getdns_context_set_tls_query_padding_blocksize(getdns_context *context, uint16_t value)
char * getdns_print_json_dict(const getdns_dict *some_dict, int pretty)
getdns_return_t getdns_str2dict(const char *str, getdns_dict **dict)
struct getdns_context getdns_context
Definition: getdns.h:475
getdns_return_t getdns_context_get_timeout(getdns_context *context, uint64_t *timeout)
getdns_return_t(* getdns_eventloop_schedule)(getdns_eventloop *loop, int fd, uint64_t timeout, getdns_eventloop_event *ev)
Definition: getdns_extra.h:183
getdns_append_name_t
Definition: getdns.h:208
getdns_return_t getdns_context_get_edns_version(getdns_context *context, uint8_t *value)
int getdns_pretty_snprint_list(char *str, size_t size, const getdns_list *list)
getdns_return_t getdns_context_get_tls_authentication(getdns_context *context, getdns_tls_authentication_t *value)
getdns_return_t
Definition: getdns.h:63
void(* getdns_eventloop_noargs)(getdns_eventloop *loop)
Definition: getdns_extra.h:174
getdns_return_t getdns_context_get_upstream_recursive_servers(getdns_context *context, getdns_list **upstream_list)
void(* getdns_eventloop_callback)(void *userarg)
Definition: getdns_extra.h:153
void(* getdns_request_handler_t)(getdns_context *context, getdns_callback_type_t callback_type, getdns_dict *request, void *userarg, getdns_transaction_t request_id)
getdns_return_t getdns_context_get_dns_transport(getdns_context *context, getdns_transport_t *value)
getdns_return_t getdns_wire2msg_dict_buf(const uint8_t *wire, size_t *wire_sz, getdns_dict **msg_dict)
getdns_return_t getdns_msg_dict2str(const getdns_dict *msg_dict, char **str)
struct getdns_dict getdns_dict
Definition: getdns.h:496
getdns_return_t getdns_msg_dict2wire_buf(const getdns_dict *msg_dict, uint8_t *wire, size_t *wire_sz)
getdns_return_t getdns_context_set_edns_client_subnet_private(getdns_context *context, uint8_t value)
char * getdns_pretty_print_list(const getdns_list *some_list)
getdns_return_t getdns_rr_dict2wire_buf(const getdns_dict *rr_dict, uint8_t *wire, size_t *wire_sz)
getdns_return_t getdns_context_get_edns_maximum_udp_payload_size(getdns_context *context, uint16_t *value)
getdns_return_t getdns_context_get_tls_query_padding_blocksize(getdns_context *context, uint16_t *value)
const char * getdns_get_api_version(void)
getdns_return_t getdns_context_get_limit_outstanding_queries(getdns_context *context, uint16_t *limit)
getdns_return_t getdns_context_set_tls_connection_retries(getdns_context *context, uint16_t value)
uint32_t getdns_get_version_number(void)
getdns_return_t getdns_context_get_round_robin_upstreams(getdns_context *context, uint8_t *value)
getdns_return_t getdns_str2list(const char *str, getdns_list **list)
getdns_transport_t
Definition: getdns.h:172
getdns_return_t getdns_rr_dict2wire_scan(const getdns_dict *rr_dict, uint8_t **wire, int *wire_sz)
getdns_eventloop_callback write_cb
Definition: getdns_extra.h:159
getdns_return_t getdns_msg_dict2str_buf(const getdns_dict *msg_dict, char *str, size_t *str_len)
getdns_return_t getdns_context_set_round_robin_upstreams(getdns_context *context, uint8_t value)
getdns_return_t getdns_msg_dict2wire(const getdns_dict *msg_dict, uint8_t **wire, size_t *wire_sz)
getdns_eventloop_callback timeout_cb
Definition: getdns_extra.h:160
getdns_return_t getdns_context_get_edns_extended_rcode(getdns_context *context, uint8_t *value)
getdns_return_t getdns_context_get_follow_redirects(getdns_context *context, getdns_redirects_t *value)