Added OSG_CURL_SSL_VERIFYPEER option to the curl plugin to allow connecting to secure servers without the certificate
This commit is contained in:
parent
f9172a000e
commit
5e4543513b
@ -142,6 +142,7 @@ EasyCurl::EasyCurl()
|
|||||||
_previousHttpAuthentication = 0;
|
_previousHttpAuthentication = 0;
|
||||||
_connectTimeout = 0; // no timeout by default.
|
_connectTimeout = 0; // no timeout by default.
|
||||||
_timeout = 0;
|
_timeout = 0;
|
||||||
|
_sslVerifyPeer = 1L;
|
||||||
|
|
||||||
_curl = curl_easy_init();
|
_curl = curl_easy_init();
|
||||||
|
|
||||||
@ -252,6 +253,9 @@ void EasyCurl::setOptions(const std::string& proxyAddress, const std::string& fi
|
|||||||
curl_easy_setopt(_curl, CURLOPT_PROXY, proxyAddress.c_str()); //Sets proxy address and port on libcurl
|
curl_easy_setopt(_curl, CURLOPT_PROXY, proxyAddress.c_str()); //Sets proxy address and port on libcurl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setting ssl verify peer (default is enabled)
|
||||||
|
curl_easy_setopt(_curl, CURLOPT_SSL_VERIFYPEER, _sslVerifyPeer);
|
||||||
|
|
||||||
const osgDB::AuthenticationDetails* details = authenticationMap ?
|
const osgDB::AuthenticationDetails* details = authenticationMap ?
|
||||||
authenticationMap->getAuthenticationDetails(fileName) :
|
authenticationMap->getAuthenticationDetails(fileName) :
|
||||||
0;
|
0;
|
||||||
@ -385,6 +389,7 @@ ReaderWriterCURL::ReaderWriterCURL()
|
|||||||
supportsOption("OSG_CURL_PROXYPORT","Specify the http proxy port.");
|
supportsOption("OSG_CURL_PROXYPORT","Specify the http proxy port.");
|
||||||
supportsOption("OSG_CURL_CONNECTTIMEOUT","Specify the connection timeout duration in seconds [default = 0 = not set].");
|
supportsOption("OSG_CURL_CONNECTTIMEOUT","Specify the connection timeout duration in seconds [default = 0 = not set].");
|
||||||
supportsOption("OSG_CURL_TIMEOUT","Specify the timeout duration of the whole transfer in seconds [default = 0 = not set].");
|
supportsOption("OSG_CURL_TIMEOUT","Specify the timeout duration of the whole transfer in seconds [default = 0 = not set].");
|
||||||
|
supportsOption("OSG_CURL_SSL_VERIFYPEER","Specify ssl verification peer [default = 1 = set].");
|
||||||
}
|
}
|
||||||
|
|
||||||
ReaderWriterCURL::~ReaderWriterCURL()
|
ReaderWriterCURL::~ReaderWriterCURL()
|
||||||
@ -428,11 +433,13 @@ osgDB::ReaderWriter::WriteResult ReaderWriterCURL::writeFile(const osg::Object&
|
|||||||
std::string proxyAddress;
|
std::string proxyAddress;
|
||||||
long connectTimeout = 0;
|
long connectTimeout = 0;
|
||||||
long timeout = 0;
|
long timeout = 0;
|
||||||
getConnectionOptions(options, proxyAddress, connectTimeout, timeout);
|
long sslVerifyPeer = 1;
|
||||||
|
getConnectionOptions(options, proxyAddress, connectTimeout, timeout, sslVerifyPeer);
|
||||||
EasyCurl::StreamObject sp(&responseBuffer, &requestBuffer, std::string());
|
EasyCurl::StreamObject sp(&responseBuffer, &requestBuffer, std::string());
|
||||||
EasyCurl& easyCurl = getEasyCurl();
|
EasyCurl& easyCurl = getEasyCurl();
|
||||||
easyCurl.setConnectionTimeout(connectTimeout);
|
easyCurl.setConnectionTimeout(connectTimeout);
|
||||||
easyCurl.setTimeout(timeout);
|
easyCurl.setTimeout(timeout);
|
||||||
|
easyCurl.setSSLVerifyPeer(sslVerifyPeer);
|
||||||
|
|
||||||
// Output requestBuffer via curl, and return responseBuffer in message of result.
|
// Output requestBuffer via curl, and return responseBuffer in message of result.
|
||||||
return easyCurl.write(proxyAddress, fullFileName, sp, options);
|
return easyCurl.write(proxyAddress, fullFileName, sp, options);
|
||||||
@ -452,7 +459,11 @@ osgDB::ReaderWriter::ReadResult ReaderWriterCURL::readFile(ObjectType objectType
|
|||||||
return ReadResult::FILE_NOT_HANDLED;
|
return ReadResult::FILE_NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReaderWriterCURL::getConnectionOptions(const osgDB::ReaderWriter::Options *options, std::string& proxyAddress, long& connectTimeout, long& timeout) const
|
void ReaderWriterCURL::getConnectionOptions(const osgDB::ReaderWriter::Options *options,
|
||||||
|
std::string& proxyAddress,
|
||||||
|
long& connectTimeout,
|
||||||
|
long& timeout,
|
||||||
|
long& sslVerifyPeer) const
|
||||||
{
|
{
|
||||||
if (options)
|
if (options)
|
||||||
{
|
{
|
||||||
@ -469,8 +480,11 @@ void ReaderWriterCURL::getConnectionOptions(const osgDB::ReaderWriter::Options *
|
|||||||
connectTimeout = atol(opt.substr( index+1 ).c_str()); // this will return 0 in case of improper format.
|
connectTimeout = atol(opt.substr( index+1 ).c_str()); // this will return 0 in case of improper format.
|
||||||
else if( opt.substr( 0, index ) == "OSG_CURL_TIMEOUT" )
|
else if( opt.substr( 0, index ) == "OSG_CURL_TIMEOUT" )
|
||||||
timeout = atol(opt.substr( index+1 ).c_str()); // this will return 0 in case of improper format.
|
timeout = atol(opt.substr( index+1 ).c_str()); // this will return 0 in case of improper format.
|
||||||
|
else if( opt.substr(0, index) == "OSG_CURL_SSL_VERIFYPEER" )
|
||||||
|
sslVerifyPeer = atol(opt.substr( index+1 ).c_str()); // this will return 0 in case of improper format.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Setting Proxy by OSG Options
|
//Setting Proxy by OSG Options
|
||||||
if(!optProxy.empty())
|
if(!optProxy.empty())
|
||||||
{
|
{
|
||||||
@ -529,7 +543,8 @@ osgDB::ReaderWriter::ReadResult ReaderWriterCURL::readFile(ObjectType objectType
|
|||||||
std::string proxyAddress;
|
std::string proxyAddress;
|
||||||
long connectTimeout = 0;
|
long connectTimeout = 0;
|
||||||
long timeout = 0;
|
long timeout = 0;
|
||||||
getConnectionOptions(options, proxyAddress, connectTimeout, timeout);
|
long sslVerifyPeer = 1;
|
||||||
|
getConnectionOptions(options, proxyAddress, connectTimeout, timeout, sslVerifyPeer);
|
||||||
|
|
||||||
bool uncompress = false;
|
bool uncompress = false;
|
||||||
|
|
||||||
@ -568,6 +583,7 @@ osgDB::ReaderWriter::ReadResult ReaderWriterCURL::readFile(ObjectType objectType
|
|||||||
// setup the timeouts:
|
// setup the timeouts:
|
||||||
easyCurl.setConnectionTimeout(connectTimeout);
|
easyCurl.setConnectionTimeout(connectTimeout);
|
||||||
easyCurl.setTimeout(timeout);
|
easyCurl.setTimeout(timeout);
|
||||||
|
easyCurl.setSSLVerifyPeer(sslVerifyPeer);
|
||||||
|
|
||||||
ReadResult curlResult = easyCurl.read(proxyAddress, fileName, sp, options);
|
ReadResult curlResult = easyCurl.read(proxyAddress, fileName, sp, options);
|
||||||
|
|
||||||
|
@ -61,6 +61,8 @@ class EasyCurl : public osg::Referenced
|
|||||||
// the timeout variable is used to limit the whole transfer duration instead of the connection phase only.
|
// the timeout variable is used to limit the whole transfer duration instead of the connection phase only.
|
||||||
inline void setTimeout(long val) { _timeout = val; }
|
inline void setTimeout(long val) { _timeout = val; }
|
||||||
|
|
||||||
|
inline void setSSLVerifyPeer(long verifyPeer) { _sslVerifyPeer = verifyPeer; }
|
||||||
|
|
||||||
// Perform HTTP GET to download data from web server.
|
// Perform HTTP GET to download data from web server.
|
||||||
osgDB::ReaderWriter::ReadResult read(const std::string& proxyAddress, const std::string& fileName, StreamObject& sp, const osgDB::ReaderWriter::Options *options);
|
osgDB::ReaderWriter::ReadResult read(const std::string& proxyAddress, const std::string& fileName, StreamObject& sp, const osgDB::ReaderWriter::Options *options);
|
||||||
|
|
||||||
@ -91,6 +93,7 @@ class EasyCurl : public osg::Referenced
|
|||||||
long _previousHttpAuthentication;
|
long _previousHttpAuthentication;
|
||||||
long _connectTimeout;
|
long _connectTimeout;
|
||||||
long _timeout;
|
long _timeout;
|
||||||
|
long _sslVerifyPeer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -171,7 +174,7 @@ class ReaderWriterCURL : public osgDB::ReaderWriter
|
|||||||
bool read(std::istream& fin, std::string& destination) const;
|
bool read(std::istream& fin, std::string& destination) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void getConnectionOptions(const osgDB::ReaderWriter::Options *options, std::string& proxyAddress, long& connectTimeout, long& timeout) const;
|
void getConnectionOptions(const osgDB::ReaderWriter::Options *options, std::string& proxyAddress, long& connectTimeout, long& timeout, long& sslVerifyPeer) const;
|
||||||
|
|
||||||
typedef std::map< OpenThreads::Thread*, osg::ref_ptr<EasyCurl> > ThreadCurlMap;
|
typedef std::map< OpenThreads::Thread*, osg::ref_ptr<EasyCurl> > ThreadCurlMap;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user