Fixed: Check CURL backend on old CURL versions (tested with 7.22)
--HG-- branch : develop
This commit is contained in:
parent
adc89b3a82
commit
40dc2188f2
1 changed files with 49 additions and 2 deletions
|
@ -25,6 +25,14 @@
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
// for compatibility with older versions
|
||||||
|
#ifndef CURL_AT_LEAST_VERSION
|
||||||
|
#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|z)
|
||||||
|
#define CURL_AT_LEAST_VERSION(x,y,z) \
|
||||||
|
(LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace NLMISC;
|
using namespace NLMISC;
|
||||||
|
|
||||||
|
@ -81,6 +89,9 @@ namespace NLGUI
|
||||||
// get information on CURL
|
// get information on CURL
|
||||||
curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
|
curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
|
||||||
|
|
||||||
|
bool useOpenSSLBackend = false;
|
||||||
|
|
||||||
|
#if CURL_AT_LEAST_VERSION(7, 34, 0)
|
||||||
// get more information on CURL session
|
// get more information on CURL session
|
||||||
curl_tlssessioninfo *sessionInfo;
|
curl_tlssessioninfo *sessionInfo;
|
||||||
|
|
||||||
|
@ -94,8 +105,30 @@ namespace NLGUI
|
||||||
|
|
||||||
CURLcode res = curl_easy_getinfo(curl, info, &sessionInfo);
|
CURLcode res = curl_easy_getinfo(curl, info, &sessionInfo);
|
||||||
|
|
||||||
|
// CURL using OpenSSL backend
|
||||||
|
if ((res == CURLE_OK) && sessionInfo && sessionInfo->backend == CURLSSLBACKEND_OPENSSL) useOpenSSLBackend = true;
|
||||||
|
#elif CURL_AT_LEAST_VERSION(7, 12, 3)
|
||||||
|
// get a list of OpenSSL engines
|
||||||
|
struct curl_slist *engines;
|
||||||
|
|
||||||
|
CURLcode res = curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines);
|
||||||
|
|
||||||
|
// CURL using OpenSSL backend
|
||||||
|
// With OpenSSL compiled without any engine, engines will too return NULL
|
||||||
|
// Fortunately, if OpenSSL isn't compiled with engines means we compiled it ourself and CURL is a recent version
|
||||||
|
if ((res == CURLE_OK) && engine)
|
||||||
|
{
|
||||||
|
// free engines
|
||||||
|
curl_slist_free_all(engines);
|
||||||
|
|
||||||
|
useOpenSSLBackend = true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// TODO: implement an equivalent, but CURL 7.12 was released in 2004
|
||||||
|
#endif
|
||||||
|
|
||||||
// only use OpenSSL callback if not using Windows SSPI and using OpenSSL backend
|
// only use OpenSSL callback if not using Windows SSPI and using OpenSSL backend
|
||||||
if (!res && sessionInfo && sessionInfo->backend == CURLSSLBACKEND_OPENSSL && !(data && data->features & CURL_VERSION_SSPI))
|
if (useOpenSSLBackend && !(data && data->features & CURL_VERSION_SSPI))
|
||||||
{
|
{
|
||||||
#ifdef NL_OS_WINDOWS
|
#ifdef NL_OS_WINDOWS
|
||||||
// load native Windows CA Certs
|
// load native Windows CA Certs
|
||||||
|
@ -181,7 +214,21 @@ namespace NLGUI
|
||||||
|
|
||||||
void addCertificatesFromFile(const std::string &cert)
|
void addCertificatesFromFile(const std::string &cert)
|
||||||
{
|
{
|
||||||
if (!isInitialized || !isUsingOpenSSLBackend) return;
|
if (!isInitialized)
|
||||||
|
{
|
||||||
|
nlwarning("CURL not initialized! Check if there are another errors");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isUsingOpenSSLBackend)
|
||||||
|
{
|
||||||
|
nlinfo("CURL not using OpenSSL backend! Unable to use custom certificates");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nlinfo("CURL using OpenSSL backend!");
|
||||||
|
}
|
||||||
|
|
||||||
// this file was already loaded
|
// this file was already loaded
|
||||||
if (std::find(CertList.begin(), CertList.end(), cert) != CertList.end()) return;
|
if (std::find(CertList.begin(), CertList.end(), cert) != CertList.end()) return;
|
||||||
|
|
Loading…
Reference in a new issue