Dumper   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2
Metric Value
wmc 5
lcom 0
cbo 2
dl 0
loc 56
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A toBinary() 0 9 1
B headerToBinary() 0 25 1
A questionToBinary() 0 17 3
1
<?php
2
3
namespace Thruster\Component\Dns;
4
5
/**
6
 * Class Dumper
7
 *
8
 * @package Thruster\Component\Dns
9
 * @author  Aurimas Niekis <[email protected]>
10
 */
11
class Dumper
12
{
13
    public function toBinary(Message $message) : string
14
    {
15
        $data = '';
16
17
        $data .= $this->headerToBinary($message->header);
18
        $data .= $this->questionToBinary($message->questions);
19
20
        return $data;
21
    }
22
23
    private function headerToBinary(HeaderBag $header) : string
24
    {
25
        $data = '';
26
27
        $data .= pack('n', $header->get('id'));
28
29
        $flags = 0x00;
30
        $flags = ($flags << 1) | $header->get('qr');
31
        $flags = ($flags << 4) | $header->get('opcode');
32
        $flags = ($flags << 1) | $header->get('aa');
33
        $flags = ($flags << 1) | $header->get('tc');
34
        $flags = ($flags << 1) | $header->get('rd');
35
        $flags = ($flags << 1) | $header->get('ra');
36
        $flags = ($flags << 3) | $header->get('z');
37
        $flags = ($flags << 4) | $header->get('rcode');
38
39
        $data .= pack('n', $flags);
40
41
        $data .= pack('n', $header->get('qdCount'));
42
        $data .= pack('n', $header->get('anCount'));
43
        $data .= pack('n', $header->get('nsCount'));
44
        $data .= pack('n', $header->get('arCount'));
45
46
        return $data;
47
    }
48
49
    private function questionToBinary(array $questions) : string
50
    {
51
        $data = '';
52
53
        /** @var Query $question */
54
        foreach ($questions as $question) {
55
            $labels = explode('.', $question->getName());
56
            foreach ($labels as $label) {
57
                $data .= chr(strlen($label)).$label;
58
            }
59
            $data .= "\x00";
60
61
            $data .= pack('n*', $question->getType(), $question->getClass());
62
        }
63
64
        return $data;
65
    }
66
}
67