ResponseSender::parseToSocketBody()   B
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
cc 4
eloc 13
nc 3
nop 1
dl 0
loc 22
ccs 0
cts 18
cp 0
crap 20
rs 8.9197
c 0
b 0
f 0
1
<?php
2
namespace Wandu\Http\Sender;
3
4
use Psr\Http\Message\ResponseInterface;
5
use Traversable;
6
7
class ResponseSender
8
{
9
    /**
10
     * @param \Psr\Http\Message\ResponseInterface $response
11
     */
12
    public function sendToGlobal(ResponseInterface $response)
13
    {
14
        $statusCode = $response->getStatusCode();
15
        $reasonPhrase = $response->getReasonPhrase();
16
        $protocolVersion = $response->getProtocolVersion();
17
18
        header("HTTP/{$protocolVersion} $statusCode $reasonPhrase", true, $statusCode);
19
        foreach ($response->getHeaders() as $name => $values) {
20
            if (strtolower($name) === 'set-cookie') {
21
                foreach ($values as $cookie) {
22
                    header(sprintf('Set-Cookie: %s', $cookie), false);
23
                }
24
                break;
25
            }
26
            header(sprintf('%s: %s', $name, $response->getHeaderLine($name)));
27
        }
28
        $body = $response->getBody();
29
        if ($body) {
30
            // faster and less memory!
31
            if ($body instanceof Traversable) {
32
                foreach ($body as $contents) {
33
                    echo $contents;
34
                }
35
            } else {
36
                echo $body->__toString();
37
            }
38
        }
39
    }
40
41
    /**
42
     * @param \Psr\Http\Message\ResponseInterface $response
43
     * @return string
44
     */
45
    public function parseToSocketBody(ResponseInterface $response)
46
    {
47
        $lines = [];
48
49
        $statusCode = $response->getStatusCode();
50
        $reasonPhrase = $response->getReasonPhrase();
51
        $protocolVersion = $response->getProtocolVersion();
52
53
        $lines[] = "HTTP/{$protocolVersion} $statusCode $reasonPhrase";
54
55
        foreach ($response->getHeaders() as $name => $values) {
56
            if (strtolower($name) === 'set-cookie') {
57
                foreach ($values as $cookie) {
58
                    $lines[] = sprintf('Set-Cookie: %s', $cookie);
59
                }
60
                break;
61
            }
62
            $lines[] = sprintf('%s: %s', $name, $response->getHeaderLine($name));
63
        }
64
65
        return implode(" \r\n", $lines) . "\r\n\r\n" . $response->getBody()->__toString();
66
    }
67
}
68