mirror of
https://github.com/Yetangitu/ampache
synced 2025-10-04 02:09:23 +02:00
60 lines
1.8 KiB
PHP
60 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace React\Dns\Resolver;
|
|
|
|
use React\Cache\ArrayCache;
|
|
use React\Dns\Query\Executor;
|
|
use React\Dns\Query\CachedExecutor;
|
|
use React\Dns\Query\RecordCache;
|
|
use React\Dns\Protocol\Parser;
|
|
use React\Dns\Protocol\BinaryDumper;
|
|
use React\EventLoop\LoopInterface;
|
|
use React\Dns\Query\RetryExecutor;
|
|
|
|
class Factory
|
|
{
|
|
public function create($nameserver, LoopInterface $loop)
|
|
{
|
|
$nameserver = $this->addPortToServerIfMissing($nameserver);
|
|
$executor = $this->createRetryExecutor($loop);
|
|
|
|
return new Resolver($nameserver, $executor);
|
|
}
|
|
|
|
public function createCached($nameserver, LoopInterface $loop)
|
|
{
|
|
$nameserver = $this->addPortToServerIfMissing($nameserver);
|
|
$executor = $this->createCachedExecutor($loop);
|
|
|
|
return new Resolver($nameserver, $executor);
|
|
}
|
|
|
|
protected function createExecutor(LoopInterface $loop)
|
|
{
|
|
return new Executor($loop, new Parser(), new BinaryDumper());
|
|
}
|
|
|
|
protected function createRetryExecutor(LoopInterface $loop)
|
|
{
|
|
return new RetryExecutor($this->createExecutor($loop));
|
|
}
|
|
|
|
protected function createCachedExecutor(LoopInterface $loop)
|
|
{
|
|
return new CachedExecutor($this->createRetryExecutor($loop), new RecordCache(new ArrayCache()));
|
|
}
|
|
|
|
protected function addPortToServerIfMissing($nameserver)
|
|
{
|
|
if (strpos($nameserver, '[') === false && substr_count($nameserver, ':') >= 2) {
|
|
// several colons, but not enclosed in square brackets => enclose IPv6 address in square brackets
|
|
$nameserver = '[' . $nameserver . ']';
|
|
}
|
|
// assume a dummy scheme when checking for the port, otherwise parse_url() fails
|
|
if (parse_url('dummy://' . $nameserver, PHP_URL_PORT) === null) {
|
|
$nameserver .= ':53';
|
|
}
|
|
|
|
return $nameserver;
|
|
}
|
|
}
|