curl_easy_getinfo: Post CURLINFO_TLS_SESSION tidy up

1) Renamed curl_tlsinfo to curl_tlssessioninfo as discussed on the
mailing list.
2) Renamed curl_ssl_backend to curl_sslbackend so it doesn't follow our
function naming convention.
3) Updated sessioninfo.c example accordingly.
This commit is contained in:
Steve Holme 2013-11-30 10:59:01 +00:00
Родитель 0db811b69b
Коммит dc68120e63
4 изменённых файлов: 27 добавлений и 28 удалений

Просмотреть файл

@ -32,7 +32,7 @@ static CURL *curl;
static size_t wrfu(void *ptr, size_t size, size_t nmemb, void *stream)
{
const struct curl_tlsinfo *tlsinfo;
const struct curl_tlssessioninfo *info;
unsigned int cert_list_size;
const gnutls_datum_t *chainp;
CURLcode res;
@ -40,14 +40,13 @@ static size_t wrfu(void *ptr, size_t size, size_t nmemb, void *stream)
(void)stream;
(void)ptr;
res = curl_easy_getinfo(curl, CURLINFO_TLS_SESSION, &tlsinfo);
res = curl_easy_getinfo(curl, CURLINFO_TLS_SESSION, &info);
if(!res) {
switch(tlsinfo->ssl_backend) {
switch(info->backend) {
case CURLSSLBACKEND_GNUTLS:
/* tlsinfo->internals is now the gnutls_session_t */
chainp = gnutls_certificate_get_peers(tlsinfo->internals,
&cert_list_size);
/* info->internals is now the gnutls_session_t */
chainp = gnutls_certificate_get_peers(info->internals, &cert_list_size);
if((chainp) && (cert_list_size)) {
unsigned int i;
@ -57,8 +56,7 @@ static size_t wrfu(void *ptr, size_t size, size_t nmemb, void *stream)
if(GNUTLS_E_SUCCESS == gnutls_x509_crt_init(&cert)) {
if(GNUTLS_E_SUCCESS ==
gnutls_x509_crt_import(cert, &chainp[i],
GNUTLS_X509_FMT_DER)) {
gnutls_x509_crt_import(cert, &chainp[i], GNUTLS_X509_FMT_DER)) {
if(GNUTLS_E_SUCCESS ==
gnutls_x509_crt_print(cert, GNUTLS_CRT_PRINT_FULL, &dn)) {
fprintf(stderr, "Certificate #%d: %.*s", i, dn.size, dn.data);

Просмотреть файл

@ -1997,13 +1997,13 @@ typedef enum {
CURLSSLBACKEND_CYASSL = 7,
CURLSSLBACKEND_SCHANNEL = 8,
CURLSSLBACKEND_DARWINSSL = 9
} curl_ssl_backend;
} curl_sslbackend;
/* Information about the SSL library used and the respective internal SSL
handle, which can be used to obtain further information regarding the
connection. Asked for with CURLINFO_TLS_SESSION. */
struct curl_tlsinfo {
curl_ssl_backend ssl_backend;
struct curl_tlssessioninfo {
curl_sslbackend backend;
void *internals;
};

Просмотреть файл

@ -279,14 +279,15 @@ static CURLcode getinfo_slist(struct SessionHandle *data, CURLINFO info,
break;
case CURLINFO_TLS_SESSION:
{
struct curl_tlsinfo **tlsinfop = (struct curl_tlsinfo **) param_slistp;
struct curl_tlsinfo *tlsinfo = &data->tlsinfo;
struct curl_tlssessioninfo **tsip = (struct curl_tlssessioninfo **)
param_slistp;
struct curl_tlssessioninfo *tsi = &data->tsi;
struct connectdata *conn = data->easy_conn;
unsigned int sockindex = 0;
*tlsinfop = tlsinfo;
tlsinfo->ssl_backend = CURLSSLBACKEND_NONE;
tlsinfo->internals = NULL;
*tsip = tsi;
tsi->backend = CURLSSLBACKEND_NONE;
tsi->internals = NULL;
if(!conn)
break;
@ -301,24 +302,24 @@ static CURLcode getinfo_slist(struct SessionHandle *data, CURLINFO info,
/* Return the TLS session information from the relevant backend */
#ifdef USE_SSLEAY
tlsinfo->ssl_backend = CURLSSLBACKEND_OPENSSL;
tlsinfo->internals = conn->ssl[sockindex].ctx;
tsi->backend = CURLSSLBACKEND_OPENSSL;
tsi->internals = conn->ssl[sockindex].ctx;
#endif
#ifdef USE_GNUTLS
tlsinfo->ssl_backend = CURLSSLBACKEND_GNUTLS;
tlsinfo->internals = conn->ssl[sockindex].session;
tsi->backend = CURLSSLBACKEND_GNUTLS;
tsi->internals = conn->ssl[sockindex].session;
#endif
#ifdef USE_NSS
tlsinfo->ssl_backend = CURLSSLBACKEND_NSS;
tlsinfo->internals = conn->ssl[sockindex].handle;
tsi->backend = CURLSSLBACKEND_NSS;
tsi->internals = conn->ssl[sockindex].handle;
#endif
#ifdef USE_QSOSSL
tlsinfo->ssl_backend = CURLSSLBACKEND_QSOSSL;
tlsinfo->internals = conn->ssl[sockindex].handle;
tsi->backend = CURLSSLBACKEND_QSOSSL;
tsi->internals = conn->ssl[sockindex].handle;
#endif
#ifdef USE_GSKIT
tlsinfo->ssl_backend = CURLSSLBACKEND_GSKIT;
tlsinfo->internals = conn->ssl[sockindex].handle;
tsi->backend = CURLSSLBACKEND_GSKIT;
tsi->internals = conn->ssl[sockindex].handle;
#endif
/* NOTE: For other SSL backends, it is not immediately clear what data
to return from 'struct ssl_connect_data'; thus, for now we keep the

Просмотреть файл

@ -1637,8 +1637,8 @@ struct SessionHandle {
other dynamic purposes */
struct WildcardData wildcard; /* wildcard download state info */
struct PureInfo info; /* stats, reports and info data */
struct curl_tlsinfo tlsinfo; /* Information about the TLS session, only
valid after a client has asked for it */
struct curl_tlssessioninfo tsi; /* Information about the TLS session, only
valid after a client has asked for it */
#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV)
iconv_t outbound_cd; /* for translating to the network encoding */
iconv_t inbound_cd; /* for translating from the network encoding */