diff --git a/README.md b/README.md
index 54d046a9..a475b9be 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ easily be used to create a DNS server.
* [Basic usage](#basic-usage)
* [Caching](#caching)
* [Custom cache adapter](#custom-cache-adapter)
-* [Resolver](#resolver)
+* [ResolverInterface](#resolverinterface)
* [resolve()](#resolve)
* [resolveAll()](#resolveall)
* [Advanced usage](#advanced-usage)
@@ -111,7 +111,9 @@ $dns = $factory->createCached('8.8.8.8', $loop, $cache);
See also the wiki for possible [cache implementations](https://github.com/reactphp/react/wiki/Users#cache-implementations).
-## Resolver
+## ResolverInterface
+
+
### resolve()
diff --git a/src/Resolver/Factory.php b/src/Resolver/Factory.php
index 151807bb..4223f080 100644
--- a/src/Resolver/Factory.php
+++ b/src/Resolver/Factory.php
@@ -16,6 +16,11 @@
final class Factory
{
+ /**
+ * @param string $nameserver
+ * @param LoopInterface $loop
+ * @return \React\Dns\Resolver\ResolverInterface
+ */
public function create($nameserver, LoopInterface $loop)
{
$executor = $this->decorateHostsFileExecutor($this->createRetryExecutor($nameserver, $loop));
@@ -23,6 +28,12 @@ public function create($nameserver, LoopInterface $loop)
return new Resolver($executor);
}
+ /**
+ * @param string $nameserver
+ * @param LoopInterface $loop
+ * @param ?CacheInterface $cache
+ * @return \React\Dns\Resolver\ResolverInterface
+ */
public function createCached($nameserver, LoopInterface $loop, CacheInterface $cache = null)
{
// default to keeping maximum of 256 responses in cache unless explicitly given
@@ -65,7 +76,7 @@ private function decorateHostsFileExecutor(ExecutorInterface $executor)
return $executor;
}
- protected function createExecutor($nameserver, LoopInterface $loop)
+ private function createExecutor($nameserver, LoopInterface $loop)
{
return new TimeoutExecutor(
new UdpTransportExecutor(
@@ -77,12 +88,12 @@ protected function createExecutor($nameserver, LoopInterface $loop)
);
}
- protected function createRetryExecutor($namserver, LoopInterface $loop)
+ private function createRetryExecutor($namserver, LoopInterface $loop)
{
return new CoopExecutor(new RetryExecutor($this->createExecutor($namserver, $loop)));
}
- protected function createCachedExecutor($namserver, LoopInterface $loop, CacheInterface $cache)
+ private function createCachedExecutor($namserver, LoopInterface $loop, CacheInterface $cache)
{
return new CachingExecutor($this->createRetryExecutor($namserver, $loop), $cache);
}
diff --git a/src/Resolver/Resolver.php b/src/Resolver/Resolver.php
index 87e7f34c..71a9b93a 100644
--- a/src/Resolver/Resolver.php
+++ b/src/Resolver/Resolver.php
@@ -6,9 +6,11 @@
use React\Dns\Query\ExecutorInterface;
use React\Dns\Query\Query;
use React\Dns\RecordNotFoundException;
-use React\Promise\PromiseInterface;
-final class Resolver
+/**
+ * @see ResolverInterface for the base interface
+ */
+final class Resolver implements ResolverInterface
{
private $executor;
@@ -17,44 +19,6 @@ public function __construct(ExecutorInterface $executor)
$this->executor = $executor;
}
- /**
- * Resolves the given $domain name to a single IPv4 address (type `A` query).
- *
- * ```php
- * $resolver->resolve('reactphp.org')->then(function ($ip) {
- * echo 'IP for reactphp.org is ' . $ip . PHP_EOL;
- * });
- * ```
- *
- * This is one of the main methods in this package. It sends a DNS query
- * for the given $domain name to your DNS server and returns a single IP
- * address on success.
- *
- * If the DNS server sends a DNS response message that contains more than
- * one IP address for this query, it will randomly pick one of the IP
- * addresses from the response. If you want the full list of IP addresses
- * or want to send a different type of query, you should use the
- * [`resolveAll()`](#resolveall) method instead.
- *
- * If the DNS server sends a DNS response message that indicates an error
- * code, this method will reject with a `RecordNotFoundException`. Its
- * message and code can be used to check for the response code.
- *
- * If the DNS communication fails and the server does not respond with a
- * valid response message, this message will reject with an `Exception`.
- *
- * Pending DNS queries can be cancelled by cancelling its pending promise like so:
- *
- * ```php
- * $promise = $resolver->resolve('reactphp.org');
- *
- * $promise->cancel();
- * ```
- *
- * @param string $domain
- * @return PromiseInterface Returns a promise which resolves with a single IP address on success or
- * rejects with an Exception on error.
- */
public function resolve($domain)
{
return $this->resolveAll($domain, Message::TYPE_A)->then(function (array $ips) {
@@ -62,52 +26,6 @@ public function resolve($domain)
});
}
- /**
- * Resolves all record values for the given $domain name and query $type.
- *
- * ```php
- * $resolver->resolveAll('reactphp.org', Message::TYPE_A)->then(function ($ips) {
- * echo 'IPv4 addresses for reactphp.org ' . implode(', ', $ips) . PHP_EOL;
- * });
- *
- * $resolver->resolveAll('reactphp.org', Message::TYPE_AAAA)->then(function ($ips) {
- * echo 'IPv6 addresses for reactphp.org ' . implode(', ', $ips) . PHP_EOL;
- * });
- * ```
- *
- * This is one of the main methods in this package. It sends a DNS query
- * for the given $domain name to your DNS server and returns a list with all
- * record values on success.
- *
- * If the DNS server sends a DNS response message that contains one or more
- * records for this query, it will return a list with all record values
- * from the response. You can use the `Message::TYPE_*` constants to control
- * which type of query will be sent. Note that this method always returns a
- * list of record values, but each record value type depends on the query
- * type. For example, it returns the IPv4 addresses for type `A` queries,
- * the IPv6 addresses for type `AAAA` queries, the hostname for type `NS`,
- * `CNAME` and `PTR` queries and structured data for other queries. See also
- * the `Record` documentation for more details.
- *
- * If the DNS server sends a DNS response message that indicates an error
- * code, this method will reject with a `RecordNotFoundException`. Its
- * message and code can be used to check for the response code.
- *
- * If the DNS communication fails and the server does not respond with a
- * valid response message, this message will reject with an `Exception`.
- *
- * Pending DNS queries can be cancelled by cancelling its pending promise like so:
- *
- * ```php
- * $promise = $resolver->resolveAll('reactphp.org', Message::TYPE_AAAA);
- *
- * $promise->cancel();
- * ```
- *
- * @param string $domain
- * @return PromiseInterface Returns a promise which resolves with all record values on success or
- * rejects with an Exception on error.
- */
public function resolveAll($domain, $type)
{
$query = new Query($domain, $type, Message::CLASS_IN);
diff --git a/src/Resolver/ResolverInterface.php b/src/Resolver/ResolverInterface.php
new file mode 100644
index 00000000..fe937dc7
--- /dev/null
+++ b/src/Resolver/ResolverInterface.php
@@ -0,0 +1,94 @@
+resolve('reactphp.org')->then(function ($ip) {
+ * echo 'IP for reactphp.org is ' . $ip . PHP_EOL;
+ * });
+ * ```
+ *
+ * This is one of the main methods in this package. It sends a DNS query
+ * for the given $domain name to your DNS server and returns a single IP
+ * address on success.
+ *
+ * If the DNS server sends a DNS response message that contains more than
+ * one IP address for this query, it will randomly pick one of the IP
+ * addresses from the response. If you want the full list of IP addresses
+ * or want to send a different type of query, you should use the
+ * [`resolveAll()`](#resolveall) method instead.
+ *
+ * If the DNS server sends a DNS response message that indicates an error
+ * code, this method will reject with a `RecordNotFoundException`. Its
+ * message and code can be used to check for the response code.
+ *
+ * If the DNS communication fails and the server does not respond with a
+ * valid response message, this message will reject with an `Exception`.
+ *
+ * Pending DNS queries can be cancelled by cancelling its pending promise like so:
+ *
+ * ```php
+ * $promise = $resolver->resolve('reactphp.org');
+ *
+ * $promise->cancel();
+ * ```
+ *
+ * @param string $domain
+ * @return \React\Promise\PromiseInterface
+ * resolves with a single IP address on success or rejects with an Exception on error.
+ */
+ public function resolve($domain);
+
+ /**
+ * Resolves all record values for the given $domain name and query $type.
+ *
+ * ```php
+ * $resolver->resolveAll('reactphp.org', Message::TYPE_A)->then(function ($ips) {
+ * echo 'IPv4 addresses for reactphp.org ' . implode(', ', $ips) . PHP_EOL;
+ * });
+ *
+ * $resolver->resolveAll('reactphp.org', Message::TYPE_AAAA)->then(function ($ips) {
+ * echo 'IPv6 addresses for reactphp.org ' . implode(', ', $ips) . PHP_EOL;
+ * });
+ * ```
+ *
+ * This is one of the main methods in this package. It sends a DNS query
+ * for the given $domain name to your DNS server and returns a list with all
+ * record values on success.
+ *
+ * If the DNS server sends a DNS response message that contains one or more
+ * records for this query, it will return a list with all record values
+ * from the response. You can use the `Message::TYPE_*` constants to control
+ * which type of query will be sent. Note that this method always returns a
+ * list of record values, but each record value type depends on the query
+ * type. For example, it returns the IPv4 addresses for type `A` queries,
+ * the IPv6 addresses for type `AAAA` queries, the hostname for type `NS`,
+ * `CNAME` and `PTR` queries and structured data for other queries. See also
+ * the `Record` documentation for more details.
+ *
+ * If the DNS server sends a DNS response message that indicates an error
+ * code, this method will reject with a `RecordNotFoundException`. Its
+ * message and code can be used to check for the response code.
+ *
+ * If the DNS communication fails and the server does not respond with a
+ * valid response message, this message will reject with an `Exception`.
+ *
+ * Pending DNS queries can be cancelled by cancelling its pending promise like so:
+ *
+ * ```php
+ * $promise = $resolver->resolveAll('reactphp.org', Message::TYPE_AAAA);
+ *
+ * $promise->cancel();
+ * ```
+ *
+ * @param string $domain
+ * @return \React\Promise\PromiseInterface
+ * Resolves with all record values on success or rejects with an Exception on error.
+ */
+ public function resolveAll($domain, $type);
+}