Skip to content

Commit 976b831

Browse files
committed
[Dns] Add basic BinaryDumper implementation and test
1 parent 72b0e6f commit 976b831

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

BinaryDumper.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,54 @@ class BinaryDumper
66
{
77
public function toBinary(Message $message)
88
{
9+
$data = '';
10+
11+
$data .= $this->headerToBinary($message->header);
12+
$data .= $this->questionToBinary($message->question);
13+
14+
return $data;
15+
}
16+
17+
private function headerToBinary(array $header)
18+
{
19+
$data = '';
20+
21+
$data .= pack('n', $header['id']);
22+
23+
$flags = 0x00;
24+
$flags = ($flags << 1) | $header['qr'];
25+
$flags = ($flags << 4) | $header['opcode'];
26+
$flags = ($flags << 1) | $header['aa'];
27+
$flags = ($flags << 1) | $header['tc'];
28+
$flags = ($flags << 1) | $header['rd'];
29+
$flags = ($flags << 1) | $header['ra'];
30+
$flags = ($flags << 3) | $header['z'];
31+
$flags = ($flags << 4) | $header['rcode'];
32+
33+
$data .= pack('n', $flags);
34+
35+
$data .= pack('n', $header['qdCount']);
36+
$data .= pack('n', $header['anCount']);
37+
$data .= pack('n', $header['nsCount']);
38+
$data .= pack('n', $header['arCount']);
39+
40+
return $data;
41+
}
42+
43+
private function questionToBinary(array $question)
44+
{
45+
$data = '';
46+
47+
foreach ($question as $q) {
48+
$labels = explode('.', $q['name']);
49+
foreach ($labels as $label) {
50+
$data .= chr(strlen($label)).$label;
51+
}
52+
$data .= "\x00";
53+
54+
$data .= pack('n*', $q['type'], $q['class']);
55+
}
56+
57+
return $data;
958
}
1059
}

0 commit comments

Comments
 (0)