Completed
Push — master ( 282f78...6dce89 )
by Sam
05:20
created

Message::getAdditionals()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
/*
3
 * This file is part of PHP DNS Server.
4
 *
5
 * (c) Yif Swery <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
namespace yswery\DNS;
12
13
class Message
14
{
15
    /**
16
     * @var Header
17
     */
18
    private $header;
19
20
    /**
21
     * @var ResourceRecord[]
22
     */
23
    private $questions = [];
24
25
    /**
26
     * @var ResourceRecord[]
27
     */
28
    private $answers = [];
29
30
    /**
31
     * @var ResourceRecord[]
32
     */
33
    private $authoritatives = [];
34
35
    /**
36
     * @var ResourceRecord[]
37
     */
38
    private $additionals = [];
39
40
    /**
41
     * Message constructor.
42
     *
43
     * @param Header|null $header
44
     */
45
    public function __construct(Header $header = null)
46
    {
47
        if (null === $header) {
48
            $header = (new Header())
49
                ->setQuestionCount(0)
50
                ->setAnswerCount(0)
51
                ->setNameServerCount(0)
52
                ->setAdditionalRecordsCount(0);
53
        }
54
        $this->setHeader($header);
55
    }
56
57
    /**
58
     * @return Header
59
     */
60
    public function getHeader(): Header
61
    {
62
        return $this->header;
63
    }
64
65
    /**
66
     * @param Header $header
67
     *
68
     * @return Message
69
     */
70
    public function setHeader(Header $header): Message
71
    {
72
        $this->header = $header;
73
74
        return $this;
75
    }
76
77
    /**
78
     * @return ResourceRecord[]
79
     */
80
    public function getQuestions(): array
81
    {
82
        return $this->questions;
83
    }
84
85
    /**
86
     * @param ResourceRecord $resourceRecord
87
     *
88
     * @throws \InvalidArgumentException
89
     *
90
     * @return Message
91
     */
92
    public function addQuestion(ResourceRecord $resourceRecord): Message
93
    {
94
        if (!$resourceRecord->isQuestion()) {
95
            throw new \InvalidArgumentException('Resource Record provided is not a question.');
96
        }
97
98
        $this->questions[] = $resourceRecord;
99
        $this->header->setQuestionCount(count($this->questions));
100
101
        return $this;
102
    }
103
104
    /**
105
     * @return ResourceRecord[]
106
     */
107
    public function getAnswers(): array
108
    {
109
        return $this->answers;
110
    }
111
112
    /**
113
     * @param ResourceRecord $resourceRecord
114
     *
115
     * @return Message
116
     */
117
    public function addAnswer(ResourceRecord $resourceRecord): Message
118
    {
119
        $this->answers[] = $resourceRecord;
120
        $this->header->setAnswerCount(count($this->answers));
121
122
        return $this;
123
    }
124
125
    /**
126
     * @return ResourceRecord[]
127
     */
128
    public function getAuthoritatives(): array
129
    {
130
        return $this->authoritatives;
131
    }
132
133
    /**
134
     * @param ResourceRecord $resourceRecord
135
     *
136
     * @return Message
137
     */
138
    public function addAuthoritative(ResourceRecord $resourceRecord): Message
139
    {
140
        $this->authoritatives[] = $resourceRecord;
141
        $this->header->setNameServerCount(count($this->authoritatives));
142
143
        return $this;
144
    }
145
146
    /**
147
     * @return ResourceRecord[]
148
     */
149
    public function getAdditionals(): array
150
    {
151
        return $this->additionals;
152
    }
153
154
    /**
155
     * @param ResourceRecord $resourceRecord
156
     *
157
     * @return Message
158
     */
159
    public function addAdditional(ResourceRecord $resourceRecord): Message
160
    {
161
        $this->additionals[] = $resourceRecord;
162
        $this->header->setAdditionalRecordsCount(count($this->additionals));
163
164
        return $this;
165
    }
166
167
    /**
168
     * @param array $resourceRecords
169
     *
170
     * @return Message
171
     */
172
    public function setQuestions(array $resourceRecords): Message
173
    {
174
        $this->questions = [];
175
        foreach ($resourceRecords as $resourceRecord) {
176
            $this->addQuestion($resourceRecord);
177
        }
178
179
        return $this;
180
    }
181
182
    /**
183
     * @param array $resourceRecords
184
     *
185
     * @return Message
186
     */
187
    public function setAnswers(array $resourceRecords): Message
188
    {
189
        $this->answers = $resourceRecords;
190
        $this->header->setAnswerCount(count($this->answers));
191
192
        return $this;
193
    }
194
195
    /**
196
     * @param array $resourceRecords
197
     *
198
     * @return Message
199
     */
200
    public function setAuthoritatives(array $resourceRecords): Message
201
    {
202
        $this->authoritatives = $resourceRecords;
203
        $this->header->setNameServerCount(count($this->authoritatives));
204
205
        return $this;
206
    }
207
208
    /**
209
     * @param array $resourceRecords
210
     *
211
     * @return Message
212
     */
213
    public function setAdditionals(array $resourceRecords): Message
214
    {
215
        $this->additionals = $resourceRecords;
216
        $this->header->setAdditionalRecordsCount(count($this->additionals));
217
218
        return $this;
219
    }
220
}
221