in sdk/src/http/CurlHttpClient.cc [352:399]
static int progressCallback(void *userdata, double dltotal, double dlnow, double ultotal, double ulnow)
{
UNUSED_PARAM(dltotal);
UNUSED_PARAM(dlnow);
UNUSED_PARAM(ultotal);
UNUSED_PARAM(ulnow);
TransferState *state = static_cast<TransferState*>(userdata);
if (state == nullptr || state->owner == nullptr) {
return 0;
}
CurlHttpClient *thiz = static_cast<CurlHttpClient *>(state->owner);
//stop by upper caller
if (!thiz->isEnable()) {
return 1;
}
//stop by upper progress controller
if (state->progressControl) {
if (state->progressControl(state->userData) != 0) {
return 1;
}
}
//for speed update
if (thiz->sendRateLimiter_ != nullptr) {
auto rate = thiz->sendRateLimiter_->Rate();
if (rate != state->sendSpeed) {
state->sendSpeed = rate;
auto speed = static_cast<curl_off_t>(rate);
speed = speed * 1024;
curl_easy_setopt(state->curl, CURLOPT_MAX_SEND_SPEED_LARGE, speed);
}
}
if (thiz->recvRateLimiter_ != nullptr) {
auto rate = thiz->recvRateLimiter_->Rate();
if (rate != state->recvSpeed) {
state->recvSpeed = rate;
auto speed = static_cast<curl_off_t>(rate);
speed = speed * 1024;
curl_easy_setopt(state->curl, CURLOPT_MAX_RECV_SPEED_LARGE, speed);
}
}
return 0;
}