spectrum2/backends/twitter/Requests/ProfileImageRequest.h
2012-07-19 19:11:48 +05:30

89 lines
2.5 KiB
C++

#ifndef PROFILEIMAGE_H
#define PROFILEIMAGE_H
#include "../ThreadPool.h"
#include "../libtwitcurl/curl/curl.h"
#include "../TwitterResponseParser.h"
#include "transport/logging.h"
#include "transport/config.h"
#include <string>
#include <boost/signals.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <iostream>
#include <sstream>
using namespace Transport;
using namespace boost::program_options;
class ProfileImageRequest : public Thread
{
std::string user;
std::string buddy;
std::string url;
std::string img;
unsigned int reqID;
boost::function< void (std::string&, std::string&, std::string&, int, std::string&) > callBack;
bool success;
CURL *curlhandle;
std::string error;
std::string callbackdata;
char curl_errorbuffer[1024];
bool fetchImage();
static int curlCallback( char* data, size_t size, size_t nmemb, ProfileImageRequest *obj);
public:
ProfileImageRequest(Config *config, const std::string &_user, const std::string &_buddy, const std::string &_url, unsigned int _reqID,
boost::function< void (std::string&, std::string&, std::string&, int, std::string&) > cb) {
curlhandle = curl_easy_init();
curl_easy_setopt(curlhandle, CURLOPT_PROXY, NULL);
curl_easy_setopt(curlhandle, CURLOPT_PROXYUSERPWD, NULL);
curl_easy_setopt(curlhandle, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY);
/************ Set proxy if available *****************************************/
if(CONFIG_HAS_KEY(config,"proxy.server")) {
std::string ip = CONFIG_STRING(config,"proxy.server");
std::ostringstream out;
out << CONFIG_INT(config,"proxy.port");
std::string port = out.str();
std::string puser = CONFIG_STRING(config,"proxy.user");
std::string ppasswd = CONFIG_STRING(config,"proxy.password");
if(ip != "localhost" && port != "0") {
/* Set proxy details in cURL */
std::string proxyIpPort = ip + ":" + port;
curl_easy_setopt(curlhandle, CURLOPT_PROXY, proxyIpPort.c_str());
/* Prepare username and password for proxy server */
if(puser.length() && ppasswd.length()) {
std::string proxyUserPass = puser + ":" + ppasswd;
curl_easy_setopt(curlhandle, CURLOPT_PROXYUSERPWD, proxyUserPass.c_str());
}
}
}
/*****************************************************************************/
user = _user;
buddy = _buddy;
url = _url;
reqID = _reqID;
callBack = cb;
}
~ProfileImageRequest() {
if(curlhandle) {
curl_easy_cleanup(curlhandle);
curlhandle = NULL;
}
}
void run();
void finalize();
};
#endif