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