diff options
author | John-Mark Bell <jmb@netsurf-browser.org> | 2023-12-27 19:12:07 +0000 |
---|---|---|
committer | John-Mark Bell <jmb@netsurf-browser.org> | 2024-03-13 23:03:34 +0000 |
commit | e3a6ad7173d8746af0fde87a1ead69c1c7d61bfa (patch) | |
tree | 5fe6098aab43d1f47869d12754c802df1e07320f /content/fetchers | |
parent | f027a8095654e204f608ad9db5c9231646059128 (diff) | |
download | netsurf-e3a6ad7173d8746af0fde87a1ead69c1c7d61bfa.tar.gz netsurf-e3a6ad7173d8746af0fde87a1ead69c1c7d61bfa.tar.bz2 |
Fetch/curl: expose socket open/close via fetch vtable
This allows frontends to customise the behaviour of sockets. The
default implementation simply maps to socket(2)/close(2).
Diffstat (limited to 'content/fetchers')
-rw-r--r-- | content/fetchers/curl.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/content/fetchers/curl.c b/content/fetchers/curl.c index b1907448e..680e60456 100644 --- a/content/fetchers/curl.c +++ b/content/fetchers/curl.c @@ -1792,6 +1792,24 @@ fetch_curl_debug(CURL *handle, } +static curl_socket_t fetch_curl_socket_open(void *clientp, + curlsocktype purpose, struct curl_sockaddr *address) +{ + (void) clientp; + (void) purpose; + + return (curl_socket_t) guit->fetch->socket_open( + address->family, address->socktype, + address->protocol); +} + +static int fetch_curl_socket_close(void *clientp, curl_socket_t item) +{ + (void) clientp; + + return guit->fetch->socket_close((int) item); +} + /** * Callback function for cURL. */ @@ -2047,6 +2065,8 @@ nserror fetch_curl_register(void) SETOPT(CURLOPT_LOW_SPEED_TIME, 180L); SETOPT(CURLOPT_NOSIGNAL, 1L); SETOPT(CURLOPT_CONNECTTIMEOUT, nsoption_uint(curl_fetch_timeout)); + SETOPT(CURLOPT_OPENSOCKETFUNCTION, fetch_curl_socket_open); + SETOPT(CURLOPT_CLOSESOCKETFUNCTION, fetch_curl_socket_close); if (nsoption_charp(ca_bundle) && strcmp(nsoption_charp(ca_bundle), "")) { |