@@ -96,6 +96,105 @@ public function testToBinaryRequestMessageWithAdditionalOptForEdns0()
9696 $ this ->assertSame ($ expected , $ data );
9797 }
9898
99+ public function testToBinaryRequestMessageWithAdditionalOptForEdns0WithOptTcpKeepAliveDesired ()
100+ {
101+ $ data = "" ;
102+ $ data .= "72 62 01 00 00 01 00 00 00 00 00 01 " ; // header
103+ $ data .= "04 69 67 6f 72 02 69 6f 00 " ; // question: igor.io
104+ $ data .= "00 01 00 01 " ; // question: type A, class IN
105+ $ data .= "00 " ; // additional: (empty hostname)
106+ $ data .= "00 29 03 e8 00 00 00 00 00 04 " ; // additional: type OPT, class 1000 UDP size, TTL 0, 4 bytes RDATA
107+ $ data .= "00 0b 00 00 " ; // OPT_TCP_KEEPALIVE=null encoded
108+
109+ $ expected = $ this ->formatHexDump ($ data );
110+
111+ $ request = new Message ();
112+ $ request ->id = 0x7262 ;
113+ $ request ->rd = true ;
114+
115+ $ request ->questions [] = new Query (
116+ 'igor.io ' ,
117+ Message::TYPE_A ,
118+ Message::CLASS_IN
119+ );
120+
121+ $ request ->additional [] = new Record ('' , Message::TYPE_OPT , 1000 , 0 , array (
122+ Message::OPT_TCP_KEEPALIVE => null ,
123+ ));
124+
125+ $ dumper = new BinaryDumper ();
126+ $ data = $ dumper ->toBinary ($ request );
127+ $ data = $ this ->convertBinaryToHexDump ($ data );
128+
129+ $ this ->assertSame ($ expected , $ data );
130+ }
131+
132+ public function testToBinaryRequestMessageWithAdditionalOptForEdns0WithOptTcpKeepAliveGiven ()
133+ {
134+ $ data = "" ;
135+ $ data .= "72 62 01 00 00 01 00 00 00 00 00 01 " ; // header
136+ $ data .= "04 69 67 6f 72 02 69 6f 00 " ; // question: igor.io
137+ $ data .= "00 01 00 01 " ; // question: type A, class IN
138+ $ data .= "00 " ; // additional: (empty hostname)
139+ $ data .= "00 29 03 e8 00 00 00 00 00 06 " ; // additional: type OPT, class 1000 UDP size, TTL 0, 6 bytes RDATA
140+ $ data .= "00 0b 00 02 00 0c " ; // OPT_TCP_KEEPALIVE=1.2 encoded
141+
142+ $ expected = $ this ->formatHexDump ($ data );
143+
144+ $ request = new Message ();
145+ $ request ->id = 0x7262 ;
146+ $ request ->rd = true ;
147+
148+ $ request ->questions [] = new Query (
149+ 'igor.io ' ,
150+ Message::TYPE_A ,
151+ Message::CLASS_IN
152+ );
153+
154+ $ request ->additional [] = new Record ('' , Message::TYPE_OPT , 1000 , 0 , array (
155+ Message::OPT_TCP_KEEPALIVE => 1.2 ,
156+ ));
157+
158+ $ dumper = new BinaryDumper ();
159+ $ data = $ dumper ->toBinary ($ request );
160+ $ data = $ this ->convertBinaryToHexDump ($ data );
161+
162+ $ this ->assertSame ($ expected , $ data );
163+ }
164+
165+ public function testToBinaryRequestMessageWithAdditionalOptForEdns0WithOptPadding ()
166+ {
167+ $ data = "" ;
168+ $ data .= "72 62 01 00 00 01 00 00 00 00 00 01 " ; // header
169+ $ data .= "04 69 67 6f 72 02 69 6f 00 " ; // question: igor.io
170+ $ data .= "00 01 00 01 " ; // question: type A, class IN
171+ $ data .= "00 " ; // additional: (empty hostname)
172+ $ data .= "00 29 03 e8 00 00 00 00 00 06 " ; // additional: type OPT, class 1000 UDP size, TTL 0, 6 bytes RDATA
173+ $ data .= "00 0c 00 02 00 00 " ; // OPT_PADDING=0x0000 encoded
174+
175+ $ expected = $ this ->formatHexDump ($ data );
176+
177+ $ request = new Message ();
178+ $ request ->id = 0x7262 ;
179+ $ request ->rd = true ;
180+
181+ $ request ->questions [] = new Query (
182+ 'igor.io ' ,
183+ Message::TYPE_A ,
184+ Message::CLASS_IN
185+ );
186+
187+ $ request ->additional [] = new Record ('' , Message::TYPE_OPT , 1000 , 0 , array (
188+ Message::OPT_PADDING => "\x00\x00"
189+ ));
190+
191+ $ dumper = new BinaryDumper ();
192+ $ data = $ dumper ->toBinary ($ request );
193+ $ data = $ this ->convertBinaryToHexDump ($ data );
194+
195+ $ this ->assertSame ($ expected , $ data );
196+ }
197+
99198 public function testToBinaryRequestMessageWithAdditionalOptForEdns0WithCustomOptCodes ()
100199 {
101200 $ data = "" ;
@@ -121,7 +220,7 @@ public function testToBinaryRequestMessageWithAdditionalOptForEdns0WithCustomOpt
121220
122221 $ request ->additional [] = new Record ('' , Message::TYPE_OPT , 1000 , 0 , array (
123222 0xa0 => 'foo ' ,
124- 0x01 => "\x00\00 "
223+ 0x01 => "\x00\x00 "
125224 ));
126225
127226 $ dumper = new BinaryDumper ();
0 commit comments