88use React \Dns \Protocol \BinaryDumper ;
99use React \EventLoop \LoopInterface ;
1010use React \Promise \Deferred ;
11+ use React \Promise \Util ;
1112use React \Socket \Connection ;
1213
1314class Executor implements ExecutorInterface
@@ -32,10 +33,7 @@ public function query($nameserver, Query $query)
3233 $ queryData = $ this ->dumper ->toBinary ($ request );
3334 $ transport = strlen ($ queryData ) > 512 ? 'tcp ' : 'udp ' ;
3435
35- $ deferred = new Deferred ();
36- $ this ->doQuery ($ nameserver , $ transport , $ queryData , $ query ->name , $ deferred ->resolver ());
37-
38- return $ deferred ->promise ();
36+ return $ this ->doQuery ($ nameserver , $ transport , $ queryData , $ query ->name );
3937 }
4038
4139 public function prepareRequest (Query $ query )
@@ -49,27 +47,26 @@ public function prepareRequest(Query $query)
4947 return $ request ;
5048 }
5149
52- public function doQuery ($ nameserver , $ transport , $ queryData , $ name, $ resolver )
50+ public function doQuery ($ nameserver , $ transport , $ queryData , $ name )
5351 {
5452 $ that = $ this ;
5553 $ parser = $ this ->parser ;
5654 $ loop = $ this ->loop ;
5755
5856 $ response = new Message ();
57+ $ deferred = new Deferred ();
5958
6059 $ retryWithTcp = function () use ($ that , $ nameserver , $ queryData , $ name ) {
61- $ that ->doQuery ($ nameserver , 'tcp ' , $ queryData , $ name, $ resolver );
60+ return $ that ->doQuery ($ nameserver , 'tcp ' , $ queryData , $ name );
6261 };
6362
64- $ timer = $ this ->loop ->addTimer ($ this ->timeout , function () use (&$ conn , $ name , $ resolver ) {
63+ $ timer = $ this ->loop ->addTimer ($ this ->timeout , function () use (&$ conn , $ name , $ deferred ) {
6564 $ conn ->close ();
66-
67- $ e = new TimeoutException (sprintf ("DNS query for %s timed out " , $ name ));
68- $ resolver ->reject ($ e );
65+ $ deferred ->reject (new TimeoutException (sprintf ("DNS query for %s timed out " , $ name )));
6966 });
7067
7168 $ conn = $ this ->createConnection ($ nameserver , $ transport );
72- $ conn ->on ('data ' , function ($ data ) use ($ that , $ retryWithTcp , $ conn , $ parser , $ response , $ transport , $ resolver , $ loop , $ timer ) {
69+ $ conn ->on ('data ' , function ($ data ) use ($ retryWithTcp , $ conn , $ parser , $ response , $ transport , $ callback , $ loop , $ timer ) {
7370 $ responseReady = $ parser ->parseChunk ($ data , $ response );
7471
7572 if (!$ responseReady ) {
@@ -80,18 +77,21 @@ public function doQuery($nameserver, $transport, $queryData, $name, $resolver)
8077
8178 if ($ response ->header ->isTruncated ()) {
8279 if ('tcp ' === $ transport ) {
83- throw new BadServerException ('The server set the truncated bit although we issued a TCP request ' );
80+ $ deferred ->reject (new BadServerException ('The server set the truncated bit although we issued a TCP request ' ));
81+ } else {
82+ $ conn ->end ();
83+ $ deferred ->resolve ($ retryWithTcp ());
8484 }
8585
86- $ conn ->end ();
87- $ retryWithTcp ();
8886 return ;
8987 }
9088
9189 $ conn ->end ();
92- $ resolver ->resolve ($ response );
90+ $ deferred ->resolve ($ response );
9391 });
9492 $ conn ->write ($ queryData );
93+
94+ return $ deferred ->promise ();
9595 }
9696
9797 protected function generateId ()
0 commit comments