From 557d06543fe85a0f217d003277f52c5266507ff4 Mon Sep 17 00:00:00 2001 From: David Cutting Date: Mon, 29 Sep 2025 18:28:48 +0100 Subject: [PATCH] RCode handling and return --- src/PurplePixie/PhpDns/DNSAnswer.php | 33 ++++++++++++++++++++++++++++ src/PurplePixie/PhpDns/DNSQuery.php | 2 ++ 2 files changed, 35 insertions(+) diff --git a/src/PurplePixie/PhpDns/DNSAnswer.php b/src/PurplePixie/PhpDns/DNSAnswer.php index a25734d..83114a3 100644 --- a/src/PurplePixie/PhpDns/DNSAnswer.php +++ b/src/PurplePixie/PhpDns/DNSAnswer.php @@ -29,6 +29,8 @@ class DNSAnswer implements \Countable, \Iterator */ private array $results = array(); + private int $rcode = -1; + public function addResult(DNSResult $result) { $this->results[] = $result; @@ -81,4 +83,35 @@ public function rewind(): void { reset($this->results); } + + /** + * rcode getter and setter + */ + public function getRcode(): int + { + return $this->rcode; + } + + public function getRcodeDescription(): string // from RFC 1035 + { + switch($this->rcode) + { + case -1: return "Untested"; // untested (default initialised value i.e. no response) + + case 0: return "No error condition"; // ok + case 1: return "Format error"; // format error + case 2: return "Server failure"; // server failure + case 3: return "Name error"; // name error + case 4: return "Not implemented"; // not implemented + case 5: return "Refused"; // refused + + default: + return "Unknown"; // unknown/undefined error code + } + } + + public function setRcode(int $value): void + { + $this->rcode = $value; + } } diff --git a/src/PurplePixie/PhpDns/DNSQuery.php b/src/PurplePixie/PhpDns/DNSQuery.php index 9f9297d..5f3d0c5 100644 --- a/src/PurplePixie/PhpDns/DNSQuery.php +++ b/src/PurplePixie/PhpDns/DNSQuery.php @@ -534,6 +534,8 @@ public function query(string $question, string $typeName = DNSTypes::NAME_A) $dns_answer = new DNSAnswer(); + $dns_answer->setRcode($rcode); + // Deal with the header question data if ($this->header['qdcount'] > 0) {