예제 #1
0
 public function query(string $nameServer, Query $query) : PromiseInterface
 {
     return $this->cache->lookup($query)->then(function ($cachedRecords) use($query) {
         return $this->buildResponse($query, $cachedRecords);
     }, function () use($nameServer, $query) {
         return $this->executor->query($nameServer, $query)->then(function ($response) use($query) {
             $this->cache->storeResponseMessage($query->getCurrentTime(), $response);
             return $response;
         });
     });
 }
예제 #2
0
 public function tryQuery(string $nameServer, Query $query, int $retries, Deferred $deferred)
 {
     $errorCallback = function ($error) use($nameServer, $query, $retries, $deferred) {
         if (false === $error instanceof TimeoutException) {
             $deferred->reject($error);
             return;
         }
         if (0 >= $retries) {
             $error = new \RuntimeException(sprintf("DNS query for %s failed: too many retries", $query->getName()), 0, $error);
             $deferred->reject($error);
             return;
         }
         $this->tryQuery($nameServer, $query, $retries - 1, $deferred);
     };
     $this->executor->query($nameServer, $query)->then([$deferred, 'resolve'], $errorCallback);
 }
예제 #3
0
파일: Resolver.php 프로젝트: ThrusterIO/dns
 protected function resolveInternal(string $nameServer, Query $query)
 {
     return $this->executor->query($nameServer, $query)->then(function (Message $response) use($query) {
         return $this->extractAddress($query, $response);
     });
 }