diff options
author | Francisco Sedano <fran@fransedano.net> | 2018-02-14 17:20:43 +0000 |
---|---|---|
committer | Jay Satiro <raysatiro@yahoo.com> | 2018-02-21 21:29:10 -0500 |
commit | 23713645d4e9ae00a3065f7a3d995e57748da4c7 (patch) | |
tree | f0add953900167057056308a77ef9ba8ac6228a6 /include | |
parent | dd027c80fe444e9555ad324ddf8e461eb358f4a3 (diff) |
url: Add option CURLOPT_RESOLVER_START_FUNCTION
- Add new option CURLOPT_RESOLVER_START_FUNCTION to set a callback that
will be called every time before a new resolve request is started
(ie before a host is resolved) with a pointer to backend-specific
resolver data. Currently this is only useful for ares.
- Add new option CURLOPT_RESOLVER_START_DATA to set a user pointer to
pass to the resolver start callback.
Closes https://github.com/curl/curl/pull/2311
Diffstat (limited to 'include')
-rw-r--r-- | include/curl/curl.h | 10 | ||||
-rw-r--r-- | include/curl/typecheck-gcc.h | 13 |
2 files changed, 22 insertions, 1 deletions
diff --git a/include/curl/curl.h b/include/curl/curl.h index 93954bca5..fa019eca9 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -245,7 +245,9 @@ typedef size_t (*curl_write_callback)(char *buffer, size_t nitems, void *outstream); - +/* This callback will be called when a new resolver request is made */ +typedef int (*curl_resolver_start_callback)(void *resolver_state, + void *reserved, void *userdata); /* enumeration of file types */ typedef enum { @@ -1833,6 +1835,12 @@ typedef enum { /* Head start in milliseconds to give happy eyeballs. */ CINIT(HAPPY_EYEBALLS_TIMEOUT_MS, LONG, 271), + /* Function that will be called before a resolver request is made */ + CINIT(RESOLVER_START_FUNCTION, FUNCTIONPOINT, 272), + + /* User data to pass to the resolver start callback. */ + CINIT(RESOLVER_START_DATA, OBJECTPOINT, 273), + CURLOPT_LASTENTRY /* the last unused */ } CURLoption; diff --git a/include/curl/typecheck-gcc.h b/include/curl/typecheck-gcc.h index 10c74c764..3a0f253f6 100644 --- a/include/curl/typecheck-gcc.h +++ b/include/curl/typecheck-gcc.h @@ -54,6 +54,9 @@ __extension__ ({ \ if(_curl_is_write_cb_option(_curl_opt)) \ if(!_curl_is_write_cb(value)) \ _curl_easy_setopt_err_write_callback(); \ + if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ + if(!_curl_is_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ if((_curl_opt) == CURLOPT_READFUNCTION) \ if(!_curl_is_read_cb(value)) \ _curl_easy_setopt_err_read_cb(); \ @@ -170,6 +173,10 @@ _CURL_WARNING(_curl_easy_setopt_err_string, ) _CURL_WARNING(_curl_easy_setopt_err_write_callback, "curl_easy_setopt expects a curl_write_callback argument for this option") +_CURL_WARNING(_curl_easy_setopt_err_resolver_start_callback, + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option" + ) _CURL_WARNING(_curl_easy_setopt_err_read_cb, "curl_easy_setopt expects a curl_read_callback argument for this option") _CURL_WARNING(_curl_easy_setopt_err_ioctl_cb, @@ -354,6 +361,7 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_off_t, (option) == CURLOPT_SSH_KEYDATA || \ (option) == CURLOPT_SSL_CTX_DATA || \ (option) == CURLOPT_WRITEDATA || \ + (option) == CURLOPT_RESOLVER_START_DATA || \ 0) /* evaluates to true if option takes a POST data argument (void* or char*) */ @@ -504,6 +512,11 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_off_t, (__builtin_types_compatible_p(__typeof__(func), type) || \ __builtin_types_compatible_p(__typeof__(func) *, type)) +/* evaluates to true if expr is of type curl_resolver_start_callback */ +#define _curl_is_resolver_start_callback(expr) \ + (_curl_is_NULL(expr) || \ + _curl_callback_compatible((expr), curl_resolver_start_callback)) + /* evaluates to true if expr is of type curl_read_callback or "similar" */ #define _curl_is_read_cb(expr) \ (_curl_is_NULL(expr) || \ |