static size_t sendBody()

in sdk/src/http/CurlHttpClient.cc [218:252]


    static size_t sendBody(char *ptr, size_t size, size_t nmemb, void *userdata)
    {
        TransferState *state = static_cast<TransferState*>(userdata);

        if (state == nullptr || 
            state->request == nullptr) {
            return 0;
        }
        
        std::shared_ptr<std::iostream> &content = state->request->Body();
        const size_t wanted = size * nmemb;
        size_t got = 0;
        if (content != nullptr && wanted > 0) {
            size_t read = wanted;
            if (state->total > 0) {
                int64_t remains = state->total - state->transferred;
                if (remains < static_cast<int64_t>(wanted)) {
                    read = static_cast<size_t>(remains);
                }
            }
            content->read(ptr, read);
            got = static_cast<size_t>(content->gcount());
        }

        state->transferred += got;
        if (state->progress) {
            state->progress(got, state->transferred, state->total, state->userData);
        }

        if (state->enableCrc64) {
            state->sendCrc64Value = CRC64::CalcCRC(state->sendCrc64Value, (void *)ptr, got);
        }

        return got;
    }