Skip to content

Commit 781125b

Browse files
committed
[Dns] Make resolver functional
1 parent 780c727 commit 781125b

2 files changed

Lines changed: 18 additions & 5 deletions

File tree

Parser.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public function parseChunk($data, Message $message)
3333
return;
3434
}
3535
}
36+
37+
return $message;
3638
}
3739

3840
private function parseHeader(Message $message)

Resolver.php

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,25 @@
33
namespace React\Dns;
44

55
use React\Dns\Model\Message;
6+
use React\EventLoop\LoopInterface;
67
use React\Socket\Connection;
78

89
class Resolver
910
{
11+
private $nameserver;
12+
private $loop;
13+
14+
public function __construct($nameserver, LoopInterface $loop)
15+
{
16+
$this->nameserver = $nameserver;
17+
$this->loop = $loop;
18+
}
19+
1020
public function resolve($domain, $callback)
1121
{
12-
$nameserver = '8.8.8.8';
13-
$query = new Query($domain, 'A', 'IN');
22+
$query = new Query($domain, Message::TYPE_A, Message::CLASS_IN);
1423

15-
$this->query($nameserver, $query, function (Message $response) use ($callback) {
24+
$this->query($this->nameserver, $query, function (Message $response) use ($callback) {
1625
$answer = $response->answers[array_rand($response->answers)];
1726
$address = $answer->data;
1827
$callback($address);
@@ -28,11 +37,13 @@ public function query($nameserver, Query $query, $callback)
2837
$request->headers->set('id', rand());
2938
$request->headers->set('rd', 1);
3039
$request->questions[] = (array) $query;
40+
$request->prepare();
3141

3242
$response = new Message();
3343

34-
$conn = new Connection(fopen("udp://$nameserver:53"), $this->loop);
35-
$conn->on('data', function ($data) use ($conn, $response, $callback) {
44+
$fd = stream_socket_client("udp://$nameserver:53");
45+
$conn = new Connection($fd, $this->loop);
46+
$conn->on('data', function ($data) use ($conn, $parser, $response, $callback) {
3647
if ($parser->parseChunk($data, $response)) {
3748
$conn->end();
3849
$callback($response);

0 commit comments

Comments
 (0)