%PDF- %PDF-
Direktori : /data/www_bck/varak.net_bck/ampache.varak.net/modules/React/Dns/Query/ |
Current File : //data/www_bck/varak.net_bck/ampache.varak.net/modules/React/Dns/Query/CachedExecutor.php |
<?php namespace React\Dns\Query; use React\Dns\Model\Message; use React\Dns\Model\Record; use React\Promise\When; class CachedExecutor implements ExecutorInterface { private $executor; private $cache; public function __construct(ExecutorInterface $executor, RecordCache $cache) { $this->executor = $executor; $this->cache = $cache; } public function query($nameserver, Query $query) { $that = $this; $executor = $this->executor; $cache = $this->cache; return $this->cache ->lookup($query) ->then( function ($cachedRecords) use ($that, $query) { return $that->buildResponse($query, $cachedRecords); }, function () use ($executor, $cache, $nameserver, $query) { return $executor ->query($nameserver, $query) ->then(function ($response) use ($cache, $query) { $cache->storeResponseMessage($query->currentTime, $response); return $response; }); } ); } public function buildResponse(Query $query, array $cachedRecords) { $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->name, $query->type, $query->class); foreach ($cachedRecords as $record) { $response->answers[] = $record; } $response->prepare(); return $response; } protected function generateId() { return mt_rand(0, 0xffff); } }