diff options
author | Jacob Hoffman-Andrews <github@hoffman-andrews.com> | 2021-02-02 17:54:52 -0800 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2021-02-08 14:10:55 +0100 |
commit | c30bf22f1c1b2d5043517845204d53d6752db0fe (patch) | |
tree | d4d3eae375616590e12315567ae60e9e72c0a706 | |
parent | 8a644f3355fafd2c468d12332308459f5641b81a (diff) | |
download | curl-c30bf22f1c1b2d5043517845204d53d6752db0fe.tar.gz |
vtls: factor out Curl_ssl_getsock to field of Curl_ssl
Closes #6558
-rw-r--r-- | lib/vtls/bearssl.c | 1 | ||||
-rw-r--r-- | lib/vtls/gtls.c | 1 | ||||
-rw-r--r-- | lib/vtls/mbedtls.c | 1 | ||||
-rw-r--r-- | lib/vtls/mesalink.c | 1 | ||||
-rw-r--r-- | lib/vtls/nss.c | 1 | ||||
-rw-r--r-- | lib/vtls/openssl.c | 1 | ||||
-rw-r--r-- | lib/vtls/schannel.c | 1 | ||||
-rw-r--r-- | lib/vtls/sectransp.c | 1 | ||||
-rw-r--r-- | lib/vtls/vtls.c | 21 | ||||
-rw-r--r-- | lib/vtls/vtls.h | 12 | ||||
-rw-r--r-- | lib/vtls/wolfssl.c | 1 |
11 files changed, 29 insertions, 13 deletions
diff --git a/lib/vtls/bearssl.c b/lib/vtls/bearssl.c index 29b08c0e6..8efb7b96f 100644 --- a/lib/vtls/bearssl.c +++ b/lib/vtls/bearssl.c @@ -855,6 +855,7 @@ const struct Curl_ssl Curl_ssl_bearssl = { Curl_none_cert_status_request, bearssl_connect, bearssl_connect_nonblocking, + Curl_ssl_getsock, bearssl_get_internals, bearssl_close, Curl_none_close_all, diff --git a/lib/vtls/gtls.c b/lib/vtls/gtls.c index 3ddee1974..be2a43077 100644 --- a/lib/vtls/gtls.c +++ b/lib/vtls/gtls.c @@ -1671,6 +1671,7 @@ const struct Curl_ssl Curl_ssl_gnutls = { gtls_cert_status_request, /* cert_status_request */ gtls_connect, /* connect */ gtls_connect_nonblocking, /* connect_nonblocking */ + Curl_ssl_getsock, /* getsock */ gtls_get_internals, /* get_internals */ gtls_close, /* close_one */ Curl_none_close_all, /* close_all */ diff --git a/lib/vtls/mbedtls.c b/lib/vtls/mbedtls.c index fc3a948d1..1739b6eb1 100644 --- a/lib/vtls/mbedtls.c +++ b/lib/vtls/mbedtls.c @@ -1100,6 +1100,7 @@ const struct Curl_ssl Curl_ssl_mbedtls = { Curl_none_cert_status_request, /* cert_status_request */ mbedtls_connect, /* connect */ mbedtls_connect_nonblocking, /* connect_nonblocking */ + Curl_ssl_getsock, /* getsock */ mbedtls_get_internals, /* get_internals */ mbedtls_close, /* close_one */ mbedtls_close_all, /* close_all */ diff --git a/lib/vtls/mesalink.c b/lib/vtls/mesalink.c index b6d1005ec..4f1ab8627 100644 --- a/lib/vtls/mesalink.c +++ b/lib/vtls/mesalink.c @@ -654,6 +654,7 @@ const struct Curl_ssl Curl_ssl_mesalink = { Curl_none_cert_status_request, /* cert_status_request */ mesalink_connect, /* connect */ mesalink_connect_nonblocking, /* connect_nonblocking */ + Curl_ssl_getsock, /* getsock */ mesalink_get_internals, /* get_internals */ mesalink_close, /* close_one */ Curl_none_close_all, /* close_all */ diff --git a/lib/vtls/nss.c b/lib/vtls/nss.c index e5ab71cdf..aef5cd050 100644 --- a/lib/vtls/nss.c +++ b/lib/vtls/nss.c @@ -2435,6 +2435,7 @@ const struct Curl_ssl Curl_ssl_nss = { nss_cert_status_request, /* cert_status_request */ nss_connect, /* connect */ nss_connect_nonblocking, /* connect_nonblocking */ + Curl_ssl_getsock, /* getsock */ nss_get_internals, /* get_internals */ nss_close, /* close_one */ Curl_none_close_all, /* close_all */ diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c index 784d9f70e..c4621d8d3 100644 --- a/lib/vtls/openssl.c +++ b/lib/vtls/openssl.c @@ -4477,6 +4477,7 @@ const struct Curl_ssl Curl_ssl_openssl = { ossl_cert_status_request, /* cert_status_request */ ossl_connect, /* connect */ ossl_connect_nonblocking, /* connect_nonblocking */ + Curl_ssl_getsock, /* getsock */ ossl_get_internals, /* get_internals */ ossl_close, /* close_one */ ossl_close_all, /* close_all */ diff --git a/lib/vtls/schannel.c b/lib/vtls/schannel.c index 0668f98f2..bdc0e133b 100644 --- a/lib/vtls/schannel.c +++ b/lib/vtls/schannel.c @@ -2418,6 +2418,7 @@ const struct Curl_ssl Curl_ssl_schannel = { Curl_none_cert_status_request, /* cert_status_request */ schannel_connect, /* connect */ schannel_connect_nonblocking, /* connect_nonblocking */ + Curl_ssl_getsock, /* getsock */ schannel_get_internals, /* get_internals */ schannel_close, /* close_one */ Curl_none_close_all, /* close_all */ diff --git a/lib/vtls/sectransp.c b/lib/vtls/sectransp.c index 9a8f7de8d..f117e7f64 100644 --- a/lib/vtls/sectransp.c +++ b/lib/vtls/sectransp.c @@ -3301,6 +3301,7 @@ const struct Curl_ssl Curl_ssl_sectransp = { Curl_none_cert_status_request, /* cert_status_request */ sectransp_connect, /* connect */ sectransp_connect_nonblocking, /* connect_nonblocking */ + Curl_ssl_getsock, /* getsock */ sectransp_get_internals, /* get_internals */ sectransp_close, /* close_one */ Curl_none_close_all, /* close_all */ diff --git a/lib/vtls/vtls.c b/lib/vtls/vtls.c index b8ab7494f..5a1240938 100644 --- a/lib/vtls/vtls.c +++ b/lib/vtls/vtls.c @@ -593,9 +593,6 @@ void Curl_ssl_close_all(struct Curl_easy *data) Curl_ssl->close_all(data); } -#if defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \ - defined(USE_SECTRANSP) || defined(USE_NSS) || \ - defined(USE_MBEDTLS) || defined(USE_WOLFSSL) || defined(USE_BEARSSL) int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks) { struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET]; @@ -613,16 +610,6 @@ int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks) return GETSOCK_BLANK; } -#else -int Curl_ssl_getsock(struct connectdata *conn, - curl_socket_t *socks) -{ - (void)conn; - (void)socks; - return GETSOCK_BLANK; -} -/* USE_OPENSSL || USE_GNUTLS || USE_SCHANNEL || USE_SECTRANSP || USE_NSS */ -#endif void Curl_ssl_close(struct Curl_easy *data, struct connectdata *conn, int sockindex) @@ -1170,6 +1157,13 @@ static CURLcode multissl_connect_nonblocking(struct Curl_easy *data, return Curl_ssl->connect_nonblocking(data, conn, sockindex, done); } +static int multissl_getsock(struct connectdata *conn, curl_socket_t *socks) +{ + if(multissl_setup(NULL)) + return 0; + return Curl_ssl->getsock(conn, socks); +} + static void *multissl_get_internals(struct ssl_connect_data *connssl, CURLINFO info) { @@ -1201,6 +1195,7 @@ static const struct Curl_ssl Curl_ssl_multi = { Curl_none_cert_status_request, /* cert_status_request */ multissl_connect, /* connect */ multissl_connect_nonblocking, /* connect_nonblocking */ + multissl_getsock, /* getsock */ multissl_get_internals, /* get_internals */ multissl_close, /* close_one */ Curl_none_close_all, /* close_all */ diff --git a/lib/vtls/vtls.h b/lib/vtls/vtls.h index 9666682ec..250a8b99f 100644 --- a/lib/vtls/vtls.h +++ b/lib/vtls/vtls.h @@ -62,6 +62,14 @@ struct Curl_ssl { CURLcode (*connect_nonblocking)(struct Curl_easy *data, struct connectdata *conn, int sockindex, bool *done); + + /* If the SSL backend wants to read or write on this connection during a + handshake, set socks[0] to the connection's FIRSTSOCKET, and return + a bitmap indicating read or write with GETSOCK_WRITESOCK(0) or + GETSOCK_READSOCK(0). Otherwise return GETSOCK_BLANK. + Mandatory. */ + int (*getsock)(struct connectdata *conn, curl_socket_t *socks); + void *(*get_internals)(struct ssl_connect_data *connssl, CURLINFO info); void (*close_one)(struct Curl_easy *data, struct connectdata *conn, int sockindex); @@ -158,6 +166,10 @@ bool Curl_ssl_config_matches(struct ssl_primary_config *data, bool Curl_clone_primary_ssl_config(struct ssl_primary_config *source, struct ssl_primary_config *dest); void Curl_free_primary_ssl_config(struct ssl_primary_config *sslc); +/* An implementation of the getsock field of Curl_ssl that relies + on the ssl_connect_state enum. Asks for read or write depending + on whether conn->state is ssl_connect_2_reading or + ssl_connect_2_writing. */ int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks); int Curl_ssl_backend(void); diff --git a/lib/vtls/wolfssl.c b/lib/vtls/wolfssl.c index e1fa45926..169614c29 100644 --- a/lib/vtls/wolfssl.c +++ b/lib/vtls/wolfssl.c @@ -1152,6 +1152,7 @@ const struct Curl_ssl Curl_ssl_wolfssl = { Curl_none_cert_status_request, /* cert_status_request */ wolfssl_connect, /* connect */ wolfssl_connect_nonblocking, /* connect_nonblocking */ + Curl_ssl_getsock, /* getsock */ wolfssl_get_internals, /* get_internals */ wolfssl_close, /* close_one */ Curl_none_close_all, /* close_all */ |