Icicle\Http\Driver\Builder\Http1Builder::buildOutgoingStream PHP Метод

buildOutgoingStream() приватный Метод

private buildOutgoingStream ( Message $message, float $timeout ) : Generator
$message Message
$timeout float
Результат Generator
    private function buildOutgoingStream(Message $message, float $timeout = 0) : \Generator
    {
        $body = $message->getBody();
        if ($body instanceof SeekableStream && $body->isOpen()) {
            yield from $body->seek(0);
        }
        if (!$body->isReadable()) {
            if ($message instanceof Request) {
                switch ($message->getMethod()) {
                    case 'POST':
                    case 'PUT':
                        return $message->withHeader('Content-Length', 0);
                    default:
                        // No content length header required on other methods.
                        return $message;
                }
            }
            return $message->withHeader('Content-Length', 0);
        }
        $contentEncoding = strtolower($message->getHeader('Content-Encoding'));
        if ('' !== $contentEncoding) {
            switch ($contentEncoding) {
                case 'deflate':
                    $stream = new ZlibEncoder(ZlibEncoder::DEFLATE, $this->compressionLevel, $this->hwm);
                    break;
                case 'gzip':
                    $stream = new ZlibEncoder(ZlibEncoder::GZIP, $this->compressionLevel, $this->hwm);
                    break;
                default:
                    throw new MessageException(Response::BAD_REQUEST, sprintf('Unsupported content encoding set: %s', $contentEncoding));
            }
            $coroutine = new Coroutine(Stream\pipe($body, $stream, true, 0, null, $timeout));
            $coroutine->done(null, [$stream, 'close']);
            $message = $message->withBody($stream)->withoutHeader('Content-Length');
        }
        if ($message->getProtocolVersion() === '1.1' && !$message->hasHeader('Content-Length')) {
            $stream = new ChunkedEncoder($this->hwm);
            $coroutine = new Coroutine(Stream\pipe($message->getBody(), $stream, true, 0, null, $timeout));
            $coroutine->done(null, [$stream, 'close']);
            return $message->withBody($stream)->withHeader('Transfer-Encoding', 'chunked');
        }
        return $message;
    }