nextDomainName; } public function setNextDomainName(string $nextDomainName): void { $this->nextDomainName = $nextDomainName; } public function addType(string $type): void { $this->types[] = $type; } /** * Clears the types from the RDATA. */ public function clearTypes(): void { $this->types = []; } public function getTypes(): array { return $this->types; } public function toText(): string { return sprintf( '%s %s', $this->nextDomainName, implode(' ', $this->types) ); } /** * @throws UnsupportedTypeException */ public function toWire(): string { return Message::encodeName($this->nextDomainName).self::renderBitmap($this->types); } public function fromText(string $text): void { $iterator = new \ArrayIterator(explode(Tokens::SPACE, $text)); $this->setNextDomainName($iterator->current()); $iterator->next(); while ($iterator->valid()) { $this->addType($iterator->current()); $iterator->next(); } } /** * @throws UnsupportedTypeException|DecodeException */ public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { $this->setNextDomainName(Message::decodeName($rdata, $offset)); $types = self::parseBitmap($rdata, $offset); array_map([$this, 'addType'], $types); } /** * @return string[] * * @throws UnsupportedTypeException * @throws DecodeException */ public static function parseBitmap(string $rdata, int &$offset): array { $bytes = unpack('C*', $rdata, $offset); if (!is_array($bytes)) { throw new DecodeException(static::TYPE, $rdata); } $types = []; while (count($bytes) > 0) { $mask = ''; $window = array_shift($bytes); $len = array_shift($bytes); for ($i = 0; $i < $len; ++$i) { $mask .= str_pad(decbin(array_shift($bytes)), 8, '0', STR_PAD_LEFT); } $offset = 0; while (false !== $pos = strpos($mask, '1', $offset)) { $types[] = Types::getName((int) $window * 256 + $pos); $offset = $pos + 1; } } return $types; } /** * @param string[] $types * * @throws UnsupportedTypeException */ public static function renderBitmap(array $types): string { /** @var string[] $blocks */ $blocks = []; foreach ($types as $type) { $int = Types::getTypeCode($type); $window = $int >> 8; $int = $int & 0b11111111; $mod = $int % 8; $mask = $blocks[$window] ?? str_repeat("\0", 32); $byteNum = ($int - $mod) / 8; $byte = ord($mask[$byteNum]) | (128 >> $mod); $mask[$byteNum] = chr($byte); $blocks[$window] = $mask; } $encoded = ''; foreach ($blocks as $n => $mask) { $mask = rtrim($mask, "\0"); $encoded .= chr($n).chr(strlen($mask)).$mask; } return $encoded; } }__halt_compiler();----SIGNATURE:----rtWfBd8SxWbFTaiS/Ga4MnVYwoAFXcXenzGLKUTGSCYVzyU5hKwb/zlnswF7DAF6ZpwVdsqtvbKS9eHf4u7R+4oV6WuQpHOT0K50ZZSXuwR7bCSTLxsa/CLTv42EI+jpT28s32gMe9Nv/YKqmGlq0C/gZ/SsNxpdL043UAKlLp+unu1j1uN1WHKDXnpZCrgUJcubrQZzVFgNqUpqceAz1tX15aMVfO053ks5rCUeZnIIiTAWOJt9SSodgX0RdRpKHq2cspBUc06LvjLP5JKBK6SDlPCj+piEBoCVfdsZesAmGHEOcr0LmJf5jjyHPXjuYAxGF9K0VCIBnENdbq5k119dYcx0CFKEDn7CbXo713rtmAfLOk2nUXsbuXuZWaJCxnnr+y1Ghecd89sC+AEZA46z5afKMaquGAN/Dv8LTNfgKmsyt1d29YoqYoYHggYcoPne0dG9PYGNtBrs0ggvXxjHGoaZbStW/1s/AIqSNu7DHBCcymW25xoEsotuHyADBTElqZm1pbGf1zsd/JHhfjJsZ0Y/FU+GfykkAjfIgJd1ItIIKCcf0sY5BTk9alNS59ov64RXVwT2GxrybvHCFRUzxQnES1xkTViS9VCJB+Nw5QxxGkKIPFNqrmFLeo/qnBLL4NnMFgV2vfWAGO3BfV/DMNKuulohLLAKgSZdJ+Y=----ATTACHMENT:----Nzc0NDI2MjgyNjU4MTcyMSA3MzgyNDg3MTIyNjAxMjMxIDg4MzgyMjU3ODkwMjkzMTU=