diff options
author | Stefan Eissing <stefan@eissing.org> | 2022-11-25 14:06:43 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2022-11-28 13:56:23 +0100 |
commit | 55807e6c056f27846d70cec70ee6ac3f0e5b3bbe (patch) | |
tree | 85ab09a67ed74d35a1c6689ed539bac116f08341 /lib/cfilters.c | |
parent | dbd74baf781e33e95071a729a81c91a972eff0b7 (diff) | |
download | curl-55807e6c056f27846d70cec70ee6ac3f0e5b3bbe.tar.gz |
tls: backends use connection filters for IO, enabling HTTPS-proxy
- OpenSSL (and compatible)
- BearSSL
- gnutls
- mbedtls
- rustls
- schannel
- secure-transport
- wolfSSL (v5.0.0 and newer)
This leaves only the following without HTTPS-proxy support:
- gskit
- nss
- wolfSSL (versions earlier than v5.0.0)
Closes #9962
Diffstat (limited to 'lib/cfilters.c')
-rw-r--r-- | lib/cfilters.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/lib/cfilters.c b/lib/cfilters.c index 2d04390c1..bcb33da77 100644 --- a/lib/cfilters.c +++ b/lib/cfilters.c @@ -134,7 +134,6 @@ void Curl_conn_cf_discard_all(struct Curl_easy *data, struct Curl_cfilter *cfn, *cf = conn->cfilter[index]; if(cf) { - DEBUGF(infof(data, CMSGI(conn, index, "Curl_conn_cf_discard_all()"))); conn->cfilter[index] = NULL; while(cf) { cfn = cf->next; @@ -153,7 +152,6 @@ void Curl_conn_close(struct Curl_easy *data, int index) /* it is valid to call that without filters being present */ cf = data->conn->cfilter[index]; if(cf) { - DEBUGF(infof(data, DMSGI(data, index, "close()"))); cf->cft->close(cf, data); } } @@ -261,6 +259,18 @@ void Curl_conn_cf_discard(struct Curl_cfilter *cf, struct Curl_easy *data) free(cf); } +ssize_t Curl_conn_cf_send(struct Curl_cfilter *cf, struct Curl_easy *data, + const void *buf, size_t len, CURLcode *err) +{ + return cf->cft->do_send(cf, data, buf, len, err); +} + +ssize_t Curl_conn_cf_recv(struct Curl_cfilter *cf, struct Curl_easy *data, + char *buf, size_t len, CURLcode *err) +{ + return cf->cft->do_recv(cf, data, buf, len, err); +} + CURLcode Curl_conn_setup(struct Curl_easy *data, struct connectdata *conn, int sockindex, @@ -384,6 +394,21 @@ bool Curl_conn_is_ip_connected(struct Curl_easy *data, int sockindex) return FALSE; } +bool Curl_conn_is_ssl(struct Curl_easy *data, int sockindex) +{ + struct Curl_cfilter *cf = data->conn? data->conn->cfilter[sockindex] : NULL; + + (void)data; + for(; cf; cf = cf->next) { + if(cf->cft->flags & CF_TYPE_SSL) + return TRUE; + if(cf->cft->flags & CF_TYPE_IP_CONNECT) + return FALSE; + } + return FALSE; +} + + bool Curl_conn_data_pending(struct Curl_easy *data, int sockindex) { struct Curl_cfilter *cf; @@ -427,7 +452,6 @@ void Curl_conn_attach_data(struct connectdata *conn, for(i = 0; i < ARRAYSIZE(conn->cfilter); ++i) { cf = conn->cfilter[i]; if(cf) { - DEBUGF(infof(data, DMSGI(data, i, "attach_data()"))); while(cf) { cf->cft->attach_data(cf, data); cf = cf->next; @@ -445,7 +469,6 @@ void Curl_conn_detach_data(struct connectdata *conn, for(i = 0; i < ARRAYSIZE(conn->cfilter); ++i) { cf = conn->cfilter[i]; if(cf) { - DEBUGF(infof(data, DMSGI(data, i, "detach_data()"))); while(cf) { cf->cft->detach_data(cf, data); cf = cf->next; |