diff --git a/src/osgPlugins/curl/ReaderWriterCURL.cpp b/src/osgPlugins/curl/ReaderWriterCURL.cpp index b1f313803..ff2984bf6 100644 --- a/src/osgPlugins/curl/ReaderWriterCURL.cpp +++ b/src/osgPlugins/curl/ReaderWriterCURL.cpp @@ -22,37 +22,109 @@ #include #include - -class ReaderWriterCURL : public osgDB::ReaderWriter +class EasyCurl { public: + struct StreamPair + { + StreamPair(std::ostream* stream1, std::ostream* stream2=0): + _stream1(stream1), + _stream2(stream2) {} + + std::ostream* _stream1; + std::ostream* _stream2; + }; + static size_t StreamMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) { size_t realsize = size * nmemb; - std::ostream* buffer = (std::ostream*)data; + StreamPair* sp = (StreamPair*)data; - buffer->write((const char*)ptr, realsize); + if (sp->_stream1) sp->_stream1->write((const char*)ptr, realsize); + if (sp->_stream2) sp->_stream2->write((const char*)ptr, realsize); return realsize; } - ReaderWriterCURL() + EasyCurl() { _curl = curl_easy_init(); curl_easy_setopt(_curl, CURLOPT_USERAGENT, "libcurl-agent/1.0"); curl_easy_setopt(_curl, CURLOPT_WRITEFUNCTION, StreamMemoryCallback); } - - ~ReaderWriterCURL() + + ~EasyCurl() { if (_curl) curl_easy_cleanup(_curl); _curl = 0; } + + osgDB::ReaderWriter::ReadResult read(const std::string& proxyAddress, const std::string& fileName, StreamPair& sp) + { + if(!proxyAddress.empty()) + { + osg::notify(osg::NOTICE)<<"Setting proxy: "<=400) + { + osg::notify(osg::NOTICE)<<"Error: libcurl read error, file="<getReaderWriterForExtension( osgDB::getFileExtension(fileName)); - - if (!reader) - { - osg::notify(osg::NOTICE)<<"Error: No ReaderWriter for file "<getReaderWriterForExtension( osgDB::getFileExtension(fileName)); + + if (!reader) + { + osg::notify(osg::NOTICE)<<"Error: No ReaderWriter for file "<=400) - { - osg::notify(osg::NOTICE)<<"Error: libcurl read error, file="<