BeginRequest::packPayload()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 9
c 0
b 0
f 0
ccs 6
cts 6
cp 1
rs 9.9666
cc 1
nc 1
nop 0
crap 1
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 Web server sends a FCGI_BEGIN_REQUEST record to start a request.
10
 *
11
 * @author Alexander.Lisachenko
12
 */
13
class BeginRequest extends Record
14
{
15
16
    /**
17
     * The role component sets the role the Web server expects the application to play.
18
     * The currently-defined roles are:
19
     *   FCGI_RESPONDER
20
     *   FCGI_AUTHORIZER
21
     *   FCGI_FILTER
22
     *
23
     * @var int
24
     */
25
    protected $role = FCGI::UNKNOWN_ROLE;
26
27
    /**
28
     * The flags component contains a bit that controls connection shutdown.
29
     *
30
     * flags & FCGI_KEEP_CONN:
31
     *   If zero, the application closes the connection after responding to this request.
32
     *   If not zero, the application does not close the connection after responding to this request;
33
     *   the Web server retains responsibility for the connection.
34
     *
35
     * @var int
36
     */
37
    protected $flags;
38
39
    /**
40
     * Reserved data, 5 bytes maximum
41
     *
42
     * @var string
43
     */
44
    protected $reserved1;
45
46
    public function __construct(int $role = FCGI::UNKNOWN_ROLE, int $flags = 0, string $reserved = '')
47
    {
48 3
        $this->type = FCGI::BEGIN_REQUEST;
49
        $this->role = $role;
50 3
        $this->flags = $flags;
51 3
        $this->reserved1 = $reserved;
52 3
        $this->setContentData($this->packPayload());
53 3
    }
54 3
55 3
    /**
56
     * Returns the role
57
     *
58
     * The role component sets the role the Web server expects the application to play.
59
     * The currently-defined roles are:
60
     *   FCGI_RESPONDER
61
     *   FCGI_AUTHORIZER
62
     *   FCGI_FILTER
63
     */
64
    public function getRole(): int
65
    {
66
        return $this->role;
67
    }
68 2
69
    /**
70 2
     * Returns the flags
71
     *
72
     * The flags component contains a bit that controls connection shutdown.
73
     *
74
     * flags & FCGI_KEEP_CONN:
75
     *   If zero, the application closes the connection after responding to this request.
76
     *   If not zero, the application does not close the connection after responding to this request;
77
     *   the Web server retains responsibility for the connection.
78
     */
79
    public function getFlags(): int
80
    {
81
        return $this->flags;
82
    }
83
84
    /**
85 2
     * {@inheritdoc}
86
     * @param static $self
87 2
     */
88
    protected static function unpackPayload($self, string $data): void
89
    {
90
        [
91
            $self->role,
92
            $self->flags,
93
            $self->reserved1
94
        ] = array_values(unpack("nrole/Cflags/a5reserved", $data));
95
    }
96
97
    /** {@inheritdoc} */
98 2
    protected function packPayload(): string
99
    {
100
        return pack(
101 2
            "nCa5",
102 2
            $this->role,
103 2
            $this->flags,
104 2
            $this->reserved1
105
        );
106 2
    }
107
}
108