bbk/src/measurement/uploadinfotask.cpp
2025-10-13 10:38:50 +02:00

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);
}
}