mirror of
https://github.com/curl/curl.git
synced 2026-04-15 06:41:42 +03:00
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
This commit is contained in:
parent
dd027c80fe
commit
23713645d4
16 changed files with 379 additions and 3 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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) || \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue