EndRequest::unpackPayload()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
c 0
b 0
f 0
ccs 0
cts 0
cp 0
rs 10
cc 1
nc 1
nop 2
crap 2
1
<?php declare(strict_types=1);
2
3
namespace Lisachenko\Protocol\FCGI\Record;
4
5
use Lisachenko\Protocol\FCGI;
6
use Lisachenko\Protocol\FCGI\Record;
7
8
/**
9
 * The application sends a FCGI_END_REQUEST record to terminate a request, either because the application
10
 * has processed the request or because the application has rejected the request.
11
 *
12
 * @author Alexander.Lisachenko
13
 */
14
class EndRequest extends Record
15
{
16
17
    /**
18
     * The appStatus component is an application-level status code. Each role documents its usage of appStatus.
19
     *
20
     * @var int
21
     */
22
    protected $appStatus = 0;
23
24
    /**
25
     * The protocolStatus component is a protocol-level status code.
26
     *
27
     * The possible protocolStatus values are:
28
     *   FCGI_REQUEST_COMPLETE: normal end of request.
29
     *   FCGI_CANT_MPX_CONN: rejecting a new request.
30
     *      This happens when a Web server sends concurrent requests over one connection to an application that is
31
     *      designed to process one request at a time per connection.
32
     *   FCGI_OVERLOADED: rejecting a new request.
33
     *      This happens when the application runs out of some resource, e.g. database connections.
34
     *   FCGI_UNKNOWN_ROLE: rejecting a new request.
35
     *      This happens when the Web server has specified a role that is unknown to the application.
36
     *
37
     * @var int
38
     */
39
    protected $protocolStatus = FCGI::REQUEST_COMPLETE;
40
41
    /**
42
     * Reserved data, 3 bytes maximum
43
     *
44
     * @var string
45
     */
46
    protected $reserved1;
47
48
    public function __construct(int $protocolStatus = FCGI::REQUEST_COMPLETE, int $appStatus = 0, string $reserved = '')
49
    {
50 2
        $this->type = FCGI::END_REQUEST;
51
        $this->protocolStatus = $protocolStatus;
52 2
        $this->appStatus = $appStatus;
53 2
        $this->reserved1 = $reserved;
54 2
        $this->setContentData($this->packPayload());
55 2
    }
56 2
57 2
    /**
58
     * Returns app status
59
     *
60
     * The appStatus component is an application-level status code. Each role documents its usage of appStatus.
61
     */
62
    public function getAppStatus(): int
63
    {
64
        return $this->appStatus;
65
    }
66 2
67
    /**
68 2
     * Returns the protocol status
69
     *
70
     * The possible protocolStatus values are:
71
     *   FCGI_REQUEST_COMPLETE: normal end of request.
72
     *   FCGI_CANT_MPX_CONN: rejecting a new request.
73
     *      This happens when a Web server sends concurrent requests over one connection to an application that is
74
     *      designed to process one request at a time per connection.
75
     *   FCGI_OVERLOADED: rejecting a new request.
76
     *      This happens when the application runs out of some resource, e.g. database connections.
77
     *   FCGI_UNKNOWN_ROLE: rejecting a new request.
78
     *      This happens when the Web server has specified a role that is unknown to the application.
79
     */
80
    public function getProtocolStatus(): int
81
    {
82
        return $this->protocolStatus;
83
    }
84
85
    /**
86 2
     * {@inheritdoc}
87
     * @param static $self
88 2
     */
89
    protected static function unpackPayload($self, string $data): void
90
    {
91
        [
92
            $self->appStatus,
93
            $self->protocolStatus,
94
            $self->reserved1
95
        ] = array_values(unpack("NappStatus/CprotocolStatus/a3reserved", $data));
96
    }
97
98
    /** {@inheritdoc} */
99 1
    protected function packPayload(): string
100
    {
101
        return pack(
102 1
            "NCa3",
103 1
            $this->appStatus,
104 1
            $this->protocolStatus,
105 1
            $this->reserved1
106
        );
107 1
    }
108
109
}
110