static int progressCallback()

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