public static function chunkedResponseFilter(InternalRequest $ireq) : \Generator
{
$headers = yield;
if (empty($headers["transfer-encoding"])) {
return $headers;
}
if (!\in_array("chunked", $headers["transfer-encoding"])) {
return $headers;
}
$bodyBuffer = "";
$bufferSize = $ireq->client->options->chunkBufferSize ?? 8192;
$unchunked = (yield $headers);
do {
$bodyBuffer .= $unchunked;
if (isset($bodyBuffer[$bufferSize]) || $unchunked === false && $bodyBuffer != "") {
$chunk = \dechex(\strlen($bodyBuffer)) . "\r\n{$bodyBuffer}\r\n";
$bodyBuffer = "";
} else {
$chunk = null;
}
} while (($unchunked = (yield $chunk)) !== null);
$chunk = $bodyBuffer != "" ? \dechex(\strlen($bodyBuffer)) . "\r\n{$bodyBuffer}\r\n0\r\n\r\n" : "0\r\n\r\n";
return $chunk;
}