1
0
mirror of https://github.com/danog/dns.git synced 2024-12-02 17:38:05 +01:00
dns/lib/Native/NativeEncoder.php

59 lines
1.8 KiB
PHP
Raw Normal View History

2019-08-22 22:38:29 +02:00
<?php
2019-08-22 20:44:19 +02:00
/**
* Encodes Message objects to query strings.
*
* PHP version 5.4
*
* @category LibDNS
* @package Encoder
* @author Daniil Gentili <https://daniil.it>, Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
2019-08-22 20:46:31 +02:00
2019-08-22 20:44:19 +02:00
namespace Amp\Dns\Native;
use \LibDNS\Messages\Message;
use LibDNS\Messages\MessageTypes;
/**
* Encodes Message objects to query strings.
*
* @category LibDNS
* @package Encoder
* @author Daniil Gentili <https://daniil.it>, Chris Wright <https://github.com/DaveRandom>
*/
class NativeEncoder
{
/**
* Encode a Message to URL payload.
*
* @param \LibDNS\Messages\Message $message The Message to encode
* @return array Array of parameters to pass to the \dns_get_record function
*/
public function encode(Message $message): array
{
if ($message->getType() !== MessageTypes::QUERY) {
throw new \InvalidArgumentException('Invalid question: is not a question record');
}
$questions = $message->getQuestionRecords();
if ($questions->count() === 0) {
throw new \InvalidArgumentException('Invalid question: 0 question records provided');
}
if ($questions->count() !== 1) {
throw new \InvalidArgumentException('Invalid question: only one question record can be provided at a time');
}
$question = $questions->getRecordByIndex(0);
return [
\implode('.', $question->getName()->getLabels()), // Name
$question->getType(), // Type
null, // Authority records
null, // Additional records
true, // Raw results
];
}
}