Amp\Artax\Client::assignParsedResponse PHP Method

assignParsedResponse() private method

private assignParsedResponse ( RequestCycle $cycle, array $parsedResponseArr )
$cycle RequestCycle
$parsedResponseArr array
    private function assignParsedResponse(RequestCycle $cycle, array $parsedResponseArr)
    {
        $this->collectRequestCycleWatchers($cycle);
        if (($body = $parsedResponseArr['body']) && $cycle->options[self::OP_BUFFER_BODY]) {
            $body = stream_get_contents($body);
        }
        /**
         * @var $response \Amp\Artax\Response
         */
        $cycle->response = $response = (new Response())->setStatus($parsedResponseArr['status'])->setReason($parsedResponseArr['reason'])->setProtocol($parsedResponseArr['protocol'])->setBody($body)->setAllHeaders($parsedResponseArr['headers']);
        if ($this->canDecompressResponseBody($response)) {
            $this->inflateGzipBody($response);
        }
        if ($response->hasHeader('Set-Cookie')) {
            $requestDomain = parse_url($cycle->request->getUri(), PHP_URL_HOST);
            $cookies = $response->getHeader('Set-Cookie');
            foreach ($cookies as $rawCookieStr) {
                $this->storeResponseCookie($requestDomain, $rawCookieStr);
            }
        }
        $response->setRequest(clone $cycle->request);
        if ($newUri = $this->getRedirectUri($cycle)) {
            return $this->redirect($cycle, $newUri);
        }
        if ($cycle->previousResponse) {
            $response->setPreviousResponse($cycle->previousResponse);
        }
        $socket = $cycle->socket;
        $cycle->futureResponse->update([Notify::RESPONSE, $cycle->response, "export_socket" => function () use(&$socket, $parsedResponseArr) {
            if ($socket) {
                $sock = $socket;
                $socket = null;
                $this->socketPool->clear($sock);
                return [$sock, $parsedResponseArr['buffer']];
            }
            throw new \LogicException("Cannot export socket after notification callback invocation");
        }]);
        // Do socket check-in *after* redirects because we handle the socket
        // differently if we need to redirect.
        if ($socket) {
            if ($this->shouldCloseSocketAfterResponse($cycle->request, $cycle->response)) {
                @fclose($socket);
                $this->socketPool->clear($socket);
            } else {
                $this->socketPool->checkin($socket);
            }
            $socket = null;
        }
        // If we've held any sockets over from previous redirected requests
        // we need to check those back in now.
        if ($cycle->redirectedSockets) {
            foreach ($cycle->redirectedSockets as $socket) {
                $this->socketPool->checkin($socket);
            }
        }
        $cycle->futureResponse->succeed($response);
    }