1 | <?php |
||
19 | class Parser |
||
20 | { |
||
21 | /** |
||
22 | * @var string |
||
23 | */ |
||
24 | private $string; |
||
25 | |||
26 | /** |
||
27 | * @var string |
||
28 | */ |
||
29 | private $previousName; |
||
30 | |||
31 | /** |
||
32 | * @var Zone |
||
33 | */ |
||
34 | private $zone; |
||
35 | |||
36 | /** |
||
37 | * Array of methods that take an ArrayIterator and return an Rdata object. The array key is the Rdata type. |
||
38 | * |
||
39 | * @var array |
||
40 | */ |
||
41 | private $rdataHandlers = []; |
||
42 | |||
43 | /** |
||
44 | * Parser constructor. |
||
45 | * |
||
46 | * @param array $rdataHandlers |
||
47 | */ |
||
48 | 7 | public function __construct(array $rdataHandlers = []) |
|
52 | |||
53 | /** |
||
54 | * @param string $name |
||
55 | * @param string $zone |
||
56 | * |
||
57 | * @return Zone |
||
58 | * |
||
59 | * @throws ParseException |
||
60 | */ |
||
61 | 7 | public static function parse(string $name, string $zone): Zone |
|
65 | |||
66 | /** |
||
67 | * @param $name |
||
68 | * @param $string |
||
69 | * |
||
70 | * @return Zone |
||
71 | * |
||
72 | * @throws ParseException |
||
73 | */ |
||
74 | 7 | public function makeZone($name, $string): Zone |
|
85 | |||
86 | /** |
||
87 | * @param string $line |
||
88 | * |
||
89 | * @throws ParseException |
||
90 | */ |
||
91 | 7 | private function processLine(string $line): void |
|
110 | |||
111 | /** |
||
112 | * Processes control entries at the top of a BIND record, i.e. $ORIGIN, $TTL, $INCLUDE, etc. |
||
113 | * |
||
114 | * @param \ArrayIterator $iterator |
||
115 | */ |
||
116 | 4 | private function processControlEntry(\ArrayIterator $iterator): void |
|
123 | |||
124 | /** |
||
125 | * Processes a ResourceRecord name. |
||
126 | * |
||
127 | * @param \ArrayIterator $iterator |
||
128 | * @param ResourceRecord $resourceRecord |
||
129 | */ |
||
130 | 7 | private function processResourceName(\ArrayIterator $iterator, ResourceRecord $resourceRecord): void |
|
139 | |||
140 | /** |
||
141 | * Set RR's TTL if there is one. |
||
142 | * |
||
143 | * @param \ArrayIterator $iterator |
||
144 | * @param ResourceRecord $resourceRecord |
||
145 | */ |
||
146 | 7 | private function processTtl(\ArrayIterator $iterator, ResourceRecord $resourceRecord): void |
|
153 | |||
154 | /** |
||
155 | * Set RR's class if there is one. |
||
156 | * |
||
157 | * @param \ArrayIterator $iterator |
||
158 | * @param ResourceRecord $resourceRecord |
||
159 | */ |
||
160 | 7 | private function processClass(\ArrayIterator $iterator, ResourceRecord $resourceRecord): void |
|
167 | |||
168 | /** |
||
169 | * Determine if iterant is a resource name. |
||
170 | * |
||
171 | * @param \ArrayIterator $iterator |
||
172 | * |
||
173 | * @return bool |
||
174 | */ |
||
175 | 7 | private function isResourceName(\ArrayIterator $iterator): bool |
|
183 | |||
184 | /** |
||
185 | * Determine if iterant is a control entry such as $TTL, $ORIGIN, $INCLUDE, etcetera. |
||
186 | * |
||
187 | * @param \ArrayIterator $iterator |
||
188 | * |
||
189 | * @return bool |
||
190 | */ |
||
191 | 7 | private function isControlEntry(\ArrayIterator $iterator): bool |
|
195 | |||
196 | /** |
||
197 | * Determine if the iterant is a TTL (i.e. it is an integer). |
||
198 | * |
||
199 | * @param \ArrayIterator $iterator |
||
200 | * |
||
201 | * @return bool |
||
202 | */ |
||
203 | 7 | private function isTTL(\ArrayIterator $iterator): bool |
|
207 | |||
208 | /** |
||
209 | * @param \ArrayIterator $iterator |
||
210 | * |
||
211 | * @return RData\RDataInterface |
||
212 | * |
||
213 | * @throws ParseException |
||
214 | */ |
||
215 | 7 | private function extractRdata(\ArrayIterator $iterator): Rdata\RdataInterface |
|
226 | } |
||
227 |