Skip to content

Commit 9a9df33

Browse files
committed
[dns] Do not consume dns data to allow getting labels
1 parent 7448714 commit 9a9df33

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

Model/Message.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class Message
3333
public $authority = array();
3434
public $additional = array();
3535

36+
public $consumed = 0;
37+
3638
public function __construct()
3739
{
3840
$this->header = new HeaderBag();

Protocol/Parser.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function parseHeader(Message $message)
4444
}
4545

4646
$header = substr($message->data, 0, 12);
47-
$message->data = substr($message->data, 12);
47+
$message->consumed += 12;
4848

4949
list($id, $fields, $qdCount, $anCount, $nsCount, $arCount) = array_merge(unpack('n*', $header));
5050

@@ -76,7 +76,7 @@ public function parseQuestion(Message $message)
7676

7777
$labels = array();
7878

79-
$consumed = 0;
79+
$consumed = $message->consumed;
8080

8181
$length = ord(substr($message->data, $consumed, 1));
8282
$consumed += 1;
@@ -104,7 +104,7 @@ public function parseQuestion(Message $message)
104104
list($type, $class) = array_merge(unpack('n*', substr($message->data, $consumed, 4)));
105105
$consumed += 4;
106106

107-
$message->data = substr($message->data, $consumed) ?: '';
107+
$message->consumed = $consumed;
108108

109109
$message->questions[] = array(
110110
'name' => implode('.', $labels),
@@ -125,7 +125,7 @@ public function parseAnswer(Message $message)
125125
return;
126126
}
127127

128-
$consumed = 0;
128+
$consumed = $message->consumed;
129129

130130
$mask = 0xc000; // 1100000000000000
131131
list($nameOffset) = array_merge(unpack('n', substr($message->data, $consumed, 2)));
@@ -172,7 +172,7 @@ public function parseAnswer(Message $message)
172172
$rdata = inet_ntop($ip);
173173
}
174174

175-
$message->data = substr($message->data, $consumed) ?: '';
175+
$message->consumed = $consumed;
176176

177177
$name = implode('.', $labels);
178178
$ttl = $this->signedLongToUnsignedLong($ttl);

0 commit comments

Comments
 (0)