41 lines
1.2 KiB
C++
41 lines
1.2 KiB
C++
#include "uploadinfotask.h"
|
|
|
|
UploadInfoTask::
|
|
UploadInfoTask(const std::string &ticket, const HttpHost &server,
|
|
double duration, double max_time) :
|
|
ProgressTask("uploadinfo", ticket, server, 1, 3, duration, max_time) {
|
|
}
|
|
|
|
double UploadInfoTask::start() {
|
|
checkConnectionCount();
|
|
return timeout_s();
|
|
}
|
|
|
|
void UploadInfoTask::newRequest(HttpClientConnection *conn) {
|
|
conn->get("/ulinfo/1.txt?t=" + t());
|
|
}
|
|
|
|
|
|
bool UploadInfoTask::headerComplete(HttpClientConnection *conn) {
|
|
conn->doStreamResponse();
|
|
return true;
|
|
}
|
|
|
|
void UploadInfoTask::payload(HttpClientConnection *, char *buf, size_t len) {
|
|
buffer.append(buf, len);
|
|
while (true) {
|
|
std::string::size_type pos = buffer.find("\r\n");
|
|
if (pos == std::string::npos)
|
|
return;
|
|
std::istringstream line(buffer.substr(0, pos));
|
|
uint64_t byte_count;
|
|
double duration;
|
|
if (line >> byte_count >> duration) {
|
|
log() << "server upload info " << byte_count << ' ' << duration;
|
|
notifyBytesAndDuration(byte_count, duration);
|
|
} else if (pos) {
|
|
err_log() << "bad server info line: " << buffer.substr(0, pos);
|
|
}
|
|
buffer.erase(0, pos+2);
|
|
}
|
|
}
|