@@ -36,14 +36,76 @@ public function testToBinaryRequestMessage()
3636 $ this ->assertSame ($ expected , $ data );
3737 }
3838
39- public function testToBinaryRequestMessageWithCustomOptForEdns0 ()
39+ public function testToBinaryRequestMessageWithUnknownAuthorityTypeEncodesValueAsBinary ()
40+ {
41+ $ data = "" ;
42+ $ data .= "72 62 01 00 00 01 00 00 00 01 00 00 " ; // header
43+ $ data .= "04 69 67 6f 72 02 69 6f 00 " ; // question: igor.io
44+ $ data .= "00 01 00 01 " ; // question: type A, class IN
45+ $ data .= "00 " ; // additional: (empty hostname)
46+ $ data .= "d4 31 03 e8 00 00 00 00 00 02 01 02 " ;// additional: type OPT, class 1000, TTL 0, binary rdata
47+
48+ $ expected = $ this ->formatHexDump ($ data );
49+
50+ $ request = new Message ();
51+ $ request ->id = 0x7262 ;
52+ $ request ->rd = true ;
53+
54+ $ request ->questions [] = new Query (
55+ 'igor.io ' ,
56+ Message::TYPE_A ,
57+ Message::CLASS_IN
58+ );
59+
60+ $ request ->authority [] = new Record ('' , 54321 , 1000 , 0 , "\x01\x02" );
61+
62+ $ dumper = new BinaryDumper ();
63+ $ data = $ dumper ->toBinary ($ request );
64+ $ data = $ this ->convertBinaryToHexDump ($ data );
65+
66+ $ this ->assertSame ($ expected , $ data );
67+ }
68+
69+ public function testToBinaryRequestMessageWithAdditionalOptForEdns0 ()
70+ {
71+ $ data = "" ;
72+ $ data .= "72 62 01 00 00 01 00 00 00 00 00 01 " ; // header
73+ $ data .= "04 69 67 6f 72 02 69 6f 00 " ; // question: igor.io
74+ $ data .= "00 01 00 01 " ; // question: type A, class IN
75+ $ data .= "00 " ; // additional: (empty hostname)
76+ $ data .= "00 29 03 e8 00 00 00 00 00 00 " ; // additional: type OPT, class 1000 UDP size, TTL 0, no RDATA
77+
78+ $ expected = $ this ->formatHexDump ($ data );
79+
80+ $ request = new Message ();
81+ $ request ->id = 0x7262 ;
82+ $ request ->rd = true ;
83+
84+ $ request ->questions [] = new Query (
85+ 'igor.io ' ,
86+ Message::TYPE_A ,
87+ Message::CLASS_IN
88+ );
89+
90+ $ request ->additional [] = new Record ('' , Message::TYPE_OPT , 1000 , 0 , array ());
91+
92+ $ dumper = new BinaryDumper ();
93+ $ data = $ dumper ->toBinary ($ request );
94+ $ data = $ this ->convertBinaryToHexDump ($ data );
95+
96+ $ this ->assertSame ($ expected , $ data );
97+ }
98+
99+ public function testToBinaryRequestMessageWithAdditionalOptForEdns0WithCustomOptCodes ()
40100 {
41101 $ data = "" ;
42102 $ data .= "72 62 01 00 00 01 00 00 00 00 00 01 " ; // header
43103 $ data .= "04 69 67 6f 72 02 69 6f 00 " ; // question: igor.io
44104 $ data .= "00 01 00 01 " ; // question: type A, class IN
45105 $ data .= "00 " ; // additional: (empty hostname)
46- $ data .= "00 29 03 e8 00 00 00 00 00 00 " ; // additional: type OPT, class UDP size, TTL 0, no RDATA
106+ $ data .= "00 29 03 e8 00 00 00 00 00 0d " ; // additional: type OPT, class 1000 UDP size, TTL 0, 13 bytes RDATA
107+ $ data .= "00 a0 00 03 66 6f 6f " ; // OPT code 0xa0 encoded
108+ $ data .= "00 01 00 02 00 00 " ; // OPT code 0x01 encoded
47109
48110 $ expected = $ this ->formatHexDump ($ data );
49111
@@ -57,7 +119,10 @@ public function testToBinaryRequestMessageWithCustomOptForEdns0()
57119 Message::CLASS_IN
58120 );
59121
60- $ request ->additional [] = new Record ('' , 41 , 1000 , 0 , '' );
122+ $ request ->additional [] = new Record ('' , Message::TYPE_OPT , 1000 , 0 , array (
123+ 0xa0 => 'foo ' ,
124+ 0x01 => "\x00\00"
125+ ));
61126
62127 $ dumper = new BinaryDumper ();
63128 $ data = $ dumper ->toBinary ($ request );
0 commit comments