struct curl_tlssessioninfo **tsip = (struct curl_tlssessioninfo **)
param_slistp;
struct curl_tlssessioninfo *tsi = &data->tsi;
+#ifdef USE_SSL
struct connectdata *conn = data->easy_conn;
+#endif
*tsip = tsi;
tsi->backend = Curl_ssl_backend();
tsi->internals = NULL;
+#ifdef USE_SSL
if(conn && tsi->backend != CURLSSLBACKEND_NONE) {
unsigned int i;
for(i = 0; i < (sizeof(conn->ssl) / sizeof(conn->ssl[0])); ++i) {
if(conn->ssl[i].use) {
-#if defined(USE_AXTLS)
- tsi->internals = (void *)conn->ssl[i].ssl;
-#elif defined(USE_CYASSL)
- tsi->internals = (void *)conn->ssl[i].handle;
-#elif defined(USE_DARWINSSL)
- tsi->internals = (void *)conn->ssl[i].ssl_ctx;
-#elif defined(USE_GNUTLS)
- tsi->internals = (void *)conn->ssl[i].session;
-#elif defined(USE_GSKIT)
- tsi->internals = (void *)conn->ssl[i].handle;
-#elif defined(USE_MBEDTLS)
- tsi->internals = (void *)&conn->ssl[i].ssl;
-#elif defined(USE_NSS)
- tsi->internals = (void *)conn->ssl[i].handle;
-#elif defined(USE_OPENSSL)
- /* Legacy: CURLINFO_TLS_SESSION must return an SSL_CTX pointer. */
- tsi->internals = ((info == CURLINFO_TLS_SESSION) ?
- (void *)conn->ssl[i].ctx :
- (void *)conn->ssl[i].handle);
-#elif defined(USE_POLARSSL)
- tsi->internals = (void *)&conn->ssl[i].ssl;
-#elif defined(USE_SCHANNEL)
- tsi->internals = (void *)&conn->ssl[i].ctxt->ctxt_handle;
-#elif defined(USE_SSL)
-#error "SSL backend specific information missing for CURLINFO_TLS_SSL_PTR"
-#endif
+ tsi->internals = Curl_ssl->get_internals(&conn->ssl[i], info);
break;
}
}
}
+#endif
}
break;
default:
return CURLE_OK;
}
+static void *Curl_axtls_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return connssl->ssl;
+}
+
const struct Curl_ssl Curl_ssl_axtls = {
"axtls", /* name */
Curl_none_cert_status_request, /* cert_status_request */
Curl_axtls_connect, /* connect */
Curl_axtls_connect_nonblocking, /* connect_nonblocking */
+ Curl_axtls_get_internals, /* get_internals */
Curl_axtls_close, /* close */
Curl_none_close_all, /* close_all */
Curl_axtls_session_free, /* session_free */
Sha256Final(&SHA256pw, sha256sum);
}
+static void *Curl_cyassl_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return connssl->handle;
+}
+
const struct Curl_ssl Curl_ssl_cyassl = {
"cyassl", /* name */
Curl_none_cert_status_request, /* cert_status_request */
Curl_cyassl_connect, /* connect */
Curl_cyassl_connect_nonblocking, /* connect_nonblocking */
+ Curl_cyassl_get_internals, /* get_internals */
Curl_cyassl_close, /* close */
Curl_none_close_all, /* close_all */
Curl_cyassl_session_free, /* session_free */
return (ssize_t)processed;
}
+static void *Curl_darwinssl_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return connssl->ssl_ctx;
+}
+
const struct Curl_ssl Curl_ssl_darwinssl = {
"darwinssl", /* name */
Curl_none_cert_status_request, /* cert_status_request */
Curl_darwinssl_connect, /* connect */
Curl_darwinssl_connect_nonblocking, /* connect_nonblocking */
+ Curl_darwinssl_get_internals, /* get_internals */
Curl_darwinssl_close, /* close */
Curl_none_close_all, /* close_all */
Curl_darwinssl_session_free, /* session_free */
return -1; /* connection status unknown */
}
+static void *Curl_gskit_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return connssl->handle;
+}
+
const struct Curl_ssl Curl_ssl_gskit = {
"gskit", /* name */
Curl_none_cert_status_request, /* cert_status_request */
Curl_gskit_connect, /* connect */
Curl_gskit_connect_nonblocking, /* connect_nonblocking */
+ Curl_gskit_get_internals, /* get_internals */
Curl_gskit_close, /* close */
Curl_none_close_all, /* close_all */
/* No session handling for GSKit */
#endif
}
+static void *Curl_gtls_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return connssl->session;
+}
+
const struct Curl_ssl Curl_ssl_gnutls = {
"gnutls", /* name */
Curl_gtls_cert_status_request, /* cert_status_request */
Curl_gtls_connect, /* connect */
Curl_gtls_connect_nonblocking, /* connect_nonblocking */
+ Curl_gtls_get_internals, /* get_internals */
Curl_gtls_close, /* close */
Curl_none_close_all, /* close_all */
Curl_glts_session_free, /* session_free */
mbedtls_sha256(input, inputlen, sha256sum, 0);
}
+static void *Curl_mbedtls_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return &connssl->ssl;
+}
+
const struct Curl_ssl Curl_ssl_mbedtls = {
"mbedtls", /* name */
Curl_none_cert_status_request, /* cert_status_request */
Curl_mbedtls_connect, /* connect */
Curl_mbedtls_connect_nonblocking, /* connect_nonblocking */
+ Curl_mbedtls_get_internals, /* get_internals */
Curl_mbedtls_close, /* close */
Curl_mbedtls_close_all, /* close_all */
Curl_mbedtls_session_free, /* session_free */
#endif
}
+static void *Curl_nss_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return connssl->handle;
+}
+
const struct Curl_ssl Curl_ssl_nss = {
"nss", /* name */
Curl_nss_cert_status_request, /* cert_status_request */
Curl_nss_connect, /* connect */
Curl_nss_connect_nonblocking, /* connect_nonblocking */
+ Curl_nss_get_internals, /* get_internals */
Curl_nss_close, /* close */
Curl_none_close_all, /* close_all */
/* NSS has its own session ID cache */
#endif
}
+static void *Curl_ossl_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info)
+{
+ /* Legacy: CURLINFO_TLS_SESSION must return an SSL_CTX pointer. */
+ return info == CURLINFO_TLS_SESSION ?
+ (void *)connssl->ctx : (void *)connssl->handle;
+}
+
const struct Curl_ssl Curl_ssl_openssl = {
"openssl", /* name */
Curl_ossl_cert_status_request, /* cert_status_request */
Curl_ossl_connect, /* connect */
Curl_ossl_connect_nonblocking, /* connect_nonblocking */
+ Curl_ossl_get_internals, /* get_internals */
Curl_ossl_close, /* close */
Curl_ossl_close_all, /* close_all */
Curl_ossl_session_free, /* session_free */
sha256(input, inputlen, sha256sum, 0);
}
+static void *Curl_polarssl_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return &connssl->ssl;
+}
+
const struct Curl_ssl Curl_ssl_polarssl = {
"polarssl", /* name */
Curl_none_cert_status_request, /* cert_status_request */
Curl_polarssl_connect, /* connect */
Curl_polarssl_connect_nonblocking, /* connect_nonblocking */
+ Curl_polarssl_get_internals, /* get_internals */
Curl_polarssl_close, /* close */
Curl_none_close_all, /* close_all */
Curl_polarssl_session_free, /* session_free */
}
#endif /* _WIN32_WCE */
+static void *Curl_schannel_get_internals(struct ssl_connect_data *connssl,
+ CURLINFO info UNUSED_PARAM)
+{
+ (void)info;
+ return &connssl->ctxt->ctxt_handle;
+}
+
const struct Curl_ssl Curl_ssl_schannel = {
"schannel", /* name */
Curl_none_cert_status_request, /* cert_status_request */
Curl_schannel_connect, /* connect */
Curl_schannel_connect_nonblocking, /* connect_nonblocking */
+ Curl_schannel_get_internals, /* get_internals */
Curl_schannel_close, /* close */
Curl_none_close_all, /* close_all */
Curl_schannel_session_free, /* session_free */
#include "curl_setup.h"
struct connectdata;
+struct ssl_connect_data;
struct Curl_ssl {
const char *name;
CURLcode (*connect)(struct connectdata *conn, int sockindex);
CURLcode (*connect_nonblocking)(struct connectdata *conn, int sockindex,
bool *done);
+ void *(*get_internals)(struct ssl_connect_data *connssl, CURLINFO info);
void (*close)(struct connectdata *conn, int sockindex);
void (*close_all)(struct Curl_easy *data);
void (*session_free)(void *ptr);