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:----dv+AI+9tR+d6BE2dgn5O0bqaO107vQI3jZkxldirxlg+ShKAicxR8heQus3NLdoqc1xeo9Aw/L0rOyfuz6y3ppvaCHFNk8EPGziImZROQ8VcKFR/mdeqUhDuY3RuoCH66KUSLO5/RinqwNUiw2IztPIy2DzS13j0ehExTcIk+HZhgdFh2VL4qwbRPY6YgzZX7mf5/AlSemlS7la2EMfM6a0nTJWkyP3sLkYXhkR2hH7S+60OTPlpQbqdNR/S3JCX8iCsEYeReyh9R+Cu+3nzgMQuaU5Mhf7TLpFIi1BtfqUl9yNzTm12QNWWGN/G6NeBseJKIMQa/+0cWZ76N74nrd5pvMEbRHi1nMmGIozzKR50thV8qZHaUdUcAsUGl76Ve+i3Nt4WSrGlW9AmAMI3/J58spmJHk1FBImYi4LT3uBbd0Le5d/SjZmiYr6BVHtD+LxrQufV1V6VmVhyztjTzQc3AVKhUqqtZaMhbVcTXgshmQG/31j5EII0Fgps0FG9/gZLHAJ61fOjsf8vVll0S34FPjM8Q3YNwD9zIpvW2Bevh/nnZI5xfTU+jywPSEv09nELTnNhQMW58+c2zKEhpWhBKDAAO1zoWaHtpr245bdpR47K+XAFCP1VlG3TWv1Omnltmj8+MD3ezF5CZn/sO/cKnZ3y48MXdvVC4U4rLF8=----ATTACHMENT:----MTg1NDE5NTYxMjI5NzQ0NyAxNjIyNjI0NjA1NDA3MTE4IDI1Mzc5MTUzMjk1NzE4NjU=