22
33namespace React \Dns ;
44
5+ use React \Dns \Model \Message ;
6+ use React \Dns \Model \Record ;
7+
58/**
69 * DNS protocol parser
710 *
@@ -13,19 +16,19 @@ public function parseChunk($data, Message $message)
1316 {
1417 $ message ->data .= $ data ;
1518
16- if (!$ message ->header ) {
19+ if (!$ message ->headers -> get ( ' id ' ) ) {
1720 if (!$ this ->parseHeader ($ message )) {
1821 return ;
1922 }
2023 }
2124
22- if ($ message ->header [ 'qdCount ' ] != count ($ message ->question )) {
25+ if ($ message ->headers -> get ( 'qdCount ' ) != count ($ message ->questions )) {
2326 if (!$ this ->parseQuestion ($ message )) {
2427 return ;
2528 }
2629 }
2730
28- if ($ message ->header [ 'anCount ' ] != count ($ message ->answer )) {
31+ if ($ message ->headers -> get ( 'anCount ' ) != count ($ message ->answers )) {
2932 if (!$ this ->parseAnswer ($ message )) {
3033 return ;
3134 }
@@ -52,8 +55,13 @@ private function parseHeader(Message $message)
5255 $ opcode = ($ fields >> 11 ) & chr (bindec ('1111 ' ));
5356 $ qr = ($ fields >> 15 ) & 1 ;
5457
55- $ message ->header = compact ('id ' , 'qdCount ' , 'anCount ' , 'nsCount ' , 'arCount ' ,
56- 'qr ' , 'opcode ' , 'aa ' , 'tc ' , 'rd ' , 'ra ' , 'z ' , 'rcode ' );
58+ $ vars = compact ('id ' , 'qdCount ' , 'anCount ' , 'nsCount ' , 'arCount ' ,
59+ 'qr ' , 'opcode ' , 'aa ' , 'tc ' , 'rd ' , 'ra ' , 'z ' , 'rcode ' );
60+
61+
62+ foreach ($ vars as $ name => $ value ) {
63+ $ message ->headers ->set ($ name , $ value );
64+ }
5765
5866 return $ message ;
5967 }
@@ -96,13 +104,13 @@ private function parseQuestion(Message $message)
96104
97105 $ message ->data = substr ($ message ->data , $ consumed ) ?: '' ;
98106
99- $ message ->question [] = array (
107+ $ message ->questions [] = array (
100108 'name ' => implode ('. ' , $ labels ),
101109 'type ' => $ type ,
102110 'class ' => $ class ,
103111 );
104112
105- if ($ message ->header [ 'qdCount ' ] != count ($ message ->question )) {
113+ if ($ message ->headers -> get ( 'qdCount ' ) != count ($ message ->questions )) {
106114 return $ this ->parseQuestion ($ message );
107115 }
108116
@@ -122,7 +130,7 @@ private function parseAnswer(Message $message)
122130
123131 if ($ nameOffset & $ mask ) {
124132 $ consumed += 2 ;
125- $ labels [] = $ message ->question [0 ]['name ' ];
133+ $ labels [] = $ message ->questions [0 ]['name ' ];
126134 // TODO: get proper offset
127135 } else {
128136 $ length = ord (substr ($ message ->data , $ consumed , 1 ));
@@ -171,7 +179,7 @@ private function parseAnswer(Message $message)
171179 $ record ->ttl = $ this ->signedLongToUnsignedLong ($ ttl );
172180 $ record ->data = $ rdata ;
173181
174- $ message ->answer [] = $ record ;
182+ $ message ->answers [] = $ record ;
175183
176184 return $ message ;
177185 }
0 commit comments