Ejemplo n.º 1
0
 private function extractAddress(Query $query, Message $response)
 {
     $answers = $response->answers;
     $addresses = $this->resolveAliases($answers, $query->getName());
     if (0 === count($addresses)) {
         throw new RecordNotFoundException('DNS Request did not return valid answer.');
     }
     $address = $addresses[array_rand($addresses)];
     return $address;
 }
Ejemplo n.º 2
0
 private function buildResponse(Query $query, array $cachedRecords) : Message
 {
     $response = new Message();
     $response->header->set('id', $this->generateId());
     $response->header->set('qr', 1);
     $response->header->set('opcode', Message::OPCODE_QUERY);
     $response->header->set('rd', 1);
     $response->header->set('rcode', Message::RCODE_OK);
     $response->questions[] = new Record($query->getName(), $query->getType(), $query->getClass());
     foreach ($cachedRecords as $record) {
         $response->answers[] = $record;
     }
     $response->prepare();
     return $response;
 }
Ejemplo n.º 3
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);
 }
Ejemplo n.º 4
0
 private function serializeQueryToIdentity(Query $query)
 {
     return $query->getName() . ':' . $query->getType() . ':' . $query->getClass();
 }