From 2c472102f5154cb0fd9433bc39338b4d1a8b3140 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Thu, 31 Jul 2014 14:15:42 +0200 Subject: [PATCH] CURLINFO_TLS_SESSION --- php_http_client_curl.c | 88 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/php_http_client_curl.c b/php_http_client_curl.c index 501c252..edafe03 100644 --- a/php_http_client_curl.c +++ b/php_http_client_curl.c @@ -36,6 +36,13 @@ # endif #endif +#ifdef PHP_HTTP_HAVE_OPENSSL +# include +#endif +#ifdef PHP_HTTP_HAVE_GNUTLS +# include +#endif + typedef struct php_http_client_curl { CURLM *handle; @@ -474,6 +481,87 @@ static STATUS php_http_curle_get_info(CURL *ch, HashTable *info) /* END::CURLINFO */ +#if PHP_HTTP_CURL_VERSION(7,34,0) + { + int i; + zval *ti_array; + struct curl_tlssessioninfo *ti; + + if (CURLE_OK == curl_easy_getinfo(ch, CURLINFO_TLS_SESSION, &ti)) { + const char *backend; + + MAKE_STD_ZVAL(subarray); + ZVAL_NULL(subarray); + MAKE_STD_ZVAL(ti_array); + array_init(ti_array); + + switch (ti->backend) { + case CURLSSLBACKEND_NONE: + backend = "none"; + break; + case CURLSSLBACKEND_OPENSSL: + backend = "openssl"; +#ifdef PHP_HTTP_HAVE_OPENSSL + { + SSL_CTX *ctx = ti->internals; + + array_init(subarray); + add_assoc_long_ex(subarray, ZEND_STRS("number"), SSL_CTX_sess_number(ctx)); + add_assoc_long_ex(subarray, ZEND_STRS("connect"), SSL_CTX_sess_connect(ctx)); + add_assoc_long_ex(subarray, ZEND_STRS("connect_good"), SSL_CTX_sess_connect_good(ctx)); + add_assoc_long_ex(subarray, ZEND_STRS("connect_renegotiate"), SSL_CTX_sess_connect_renegotiate(ctx)); + add_assoc_long_ex(subarray, ZEND_STRS("hits"), SSL_CTX_sess_hits(ctx)); + add_assoc_long_ex(subarray, ZEND_STRS("cache_full"), SSL_CTX_sess_cache_full(ctx)); + } +#endif + break; + case CURLSSLBACKEND_GNUTLS: + backend = "gnutls"; +#ifdef PHP_HTTP_HAVE_GNUTLS + { + gnutls_session_t sess = ti->internals; + char *desc; + + array_init(subarray); + if ((desc = gnutls_session_get_desc(sess))) { + add_assoc_string_ex(subarray, ZEND_STRS("desc"), desc, 1); + gnutls_free(desc); + } + add_assoc_bool_ex(subarray, ZEND_STRS("resumed"), gnutls_session_is_resumed(sess)); + } +#endif + break; + case CURLSSLBACKEND_NSS: + backend = "nss"; + break; + case CURLSSLBACKEND_QSOSSL: + backend = "qsossl"; + break; + case CURLSSLBACKEND_GSKIT: + backend = "gskit"; + break; + case CURLSSLBACKEND_POLARSSL: + backend = "polarssl"; + break; + case CURLSSLBACKEND_CYASSL: + backend = "cyassl"; + break; + case CURLSSLBACKEND_SCHANNEL: + backend = "schannel"; + break; + case CURLSSLBACKEND_DARWINSSL: + backend = "darwinssl"; + break; + default: + backend = "unknown"; + } + add_assoc_string_ex(ti_array, ZEND_STRS("backend"), estrdup(backend), 0); + add_assoc_zval_ex(ti_array, ZEND_STRS("internals"), subarray); + add_assoc_zval_ex(&array, "tls_session", sizeof("tls_session"), ti_array); + } + } +#endif + #if PHP_HTTP_CURL_VERSION(7,19,1) && defined(PHP_HTTP_HAVE_OPENSSL) { int i; -- 2.30.2