33namespace React \Dns ;
44
55use React \Dns \Model \Message ;
6+ use React \EventLoop \LoopInterface ;
67use React \Socket \Connection ;
78
89class Resolver
910{
11+ private $ nameserver ;
12+ private $ loop ;
13+
14+ public function __construct ($ nameserver , LoopInterface $ loop )
15+ {
16+ $ this ->nameserver = $ nameserver ;
17+ $ this ->loop = $ loop ;
18+ }
19+
1020 public function resolve ($ domain , $ callback )
1121 {
12- $ nameserver = '8.8.8.8 ' ;
13- $ query = new Query ($ domain , 'A ' , 'IN ' );
22+ $ query = new Query ($ domain , Message::TYPE_A , Message::CLASS_IN );
1423
15- $ this ->query ($ nameserver , $ query , function (Message $ response ) use ($ callback ) {
24+ $ this ->query ($ this -> nameserver , $ query , function (Message $ response ) use ($ callback ) {
1625 $ answer = $ response ->answers [array_rand ($ response ->answers )];
1726 $ address = $ answer ->data ;
1827 $ callback ($ address );
@@ -28,11 +37,13 @@ public function query($nameserver, Query $query, $callback)
2837 $ request ->headers ->set ('id ' , rand ());
2938 $ request ->headers ->set ('rd ' , 1 );
3039 $ request ->questions [] = (array ) $ query ;
40+ $ request ->prepare ();
3141
3242 $ response = new Message ();
3343
34- $ conn = new Connection (fopen ("udp:// $ nameserver:53 " ), $ this ->loop );
35- $ conn ->on ('data ' , function ($ data ) use ($ conn , $ response , $ callback ) {
44+ $ fd = stream_socket_client ("udp:// $ nameserver:53 " );
45+ $ conn = new Connection ($ fd , $ this ->loop );
46+ $ conn ->on ('data ' , function ($ data ) use ($ conn , $ parser , $ response , $ callback ) {
3647 if ($ parser ->parseChunk ($ data , $ response )) {
3748 $ conn ->end ();
3849 $ callback ($ response );
0 commit comments