Подскажите плиз куда копать
Пишу http-клиент.
после долгих безрезультатных попыток раскачегарить QNetworkAccessManager, решено было перейти к использованию libcurl
для отправки POST запроса на сервер использую колбэк курвы.
при использовании колбэка "голяком" вне класса, он работает замечательно, но когда затаскиваю колбэк внутрь QObject класса, при его вызове в параметрах галиматья откровенная.
в ptr вместо ссылки на буффер, значение 1. соответственно и прочитать в буфер не удается.
куски кода:
class httpupload : public QObject
{
Q_OBJECT
public:
explicit httpupload(QObject *parent = 0);
void uploadfile(QString filename);
size_t curl_write(void *ptr, size_t size, size_t nmemb, void *userdata);
CURL *curl;
FILE* file;
signals:
public slots:
};
в исходнике:
size_t httpupload::curl_write(void *ptr, size_t size, size_t nmemb, void* userdata){
size_t retcode = fread((char*)ptr, buffsize, 1, file);
return retcode;
}
void httpupload::uploadfile(QString filename){
curl = curl_easy_init();
....
file = fopen(filename.toAscii().data(), "rb");
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, uploadurl.toAscii().data());
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE,outsegment);
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)outsegment);
curl_easy_setopt(curl, CURLOPT_READDATA, file);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, &httpupload::curl_write);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
};
curl_easy_cleanup(curl);
};
}