10 std::function<
bool(
const char* data,
size_t len)> writeFn,
14 std::istringstream stream(
buffer);
18 while (std::getline(stream, line)) {
19 if (line.empty())
continue;
22 std::istringstream chunkHeader(line);
23 chunkHeader >> std::hex >> chunkSize;
31 if ((
int)stream.rdbuf()->in_avail() < chunkSize + 2) {
35 char* chunkData =
new char[chunkSize];
36 stream.read(chunkData, chunkSize);
39 size_t toWrite = std::min((
size_t)chunkSize, available);
41 if (!writeFn(chunkData, toWrite)) {
49 if (chunkSize > (
int)available) {
55 std::getline(stream, line);
72 std::istringstream stream(
buffer);
74 std::string tempDecoded;
77 while (std::getline(stream, line)) {
78 if (line.empty())
continue;
81 std::istringstream chunkHeader(line);
82 chunkHeader >> std::hex >> chunkSize;
89 char* chunk =
new char[chunkSize];
90 stream.read(chunk, chunkSize);
92 size_t remaining = maxLength - tempDecoded.size();
93 if (chunkSize > remaining) {
94 tempDecoded.append(chunk, remaining);
100 tempDecoded.append(chunk, chunkSize);
103 std::getline(stream, line);
106 decoded = std::move(tempDecoded);
bool feedToFile(const std::string &data, std::function< bool(const char *data, size_t len)> writeFn, size_t maxLength=MAX_HTTP_BODY_LENGTH)
Feed data to the decoder, writing it to a file using the provided write function.