void handle_download_completed(const boost::system::error_code& err, std::string url, curl::easy* easy) { if (!err) { std::cout << "Download of " << url << " completed" << std::endl; } else { std::cout << "Download of " << url << " failed: " << err.message() << std::endl; } active_downloads.erase(*easy); }
void start_download(curl::multi& multi, const std::string& url) { std::auto_ptr<curl::easy> easy(new curl::easy(multi)); // see 'Use server-provided file names' example for a more detailed implementation of this function which receives // the target file name from the server using libcurl's header callbacks std::string file_name = url.substr(url.find_last_of('/') + 1); easy->set_url(url); easy->set_sink(boost::make_shared<std::ofstream>(file_name.c_str(), std::ios::binary)); easy->async_perform(boost::bind(handle_download_completed, boost::asio::placeholders::error, url, easy.get())); active_downloads.insert(easy); }
void insert(boost::ptr_set<T> &arg_ptr_set, ///< The ptr_set into which the value should be inserted std::unique_ptr<T> &&arg_ptr_value ///< The associated value to insert, held by unique_ptr ) { arg_ptr_set.insert( arg_ptr_value.release() ); }