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:----lN/9Eu8MXf98lJ2ruttCeu2fbiSJfZUUqwD935k75ki+Rm/6r+JkCtKEudYqu9ZBpCsj9SVKJ8yAdYdDGoV8TuX6cuFVQ6QdD52ZiBgS+w062rz5jS0QRH1BiAvX85qEamh29J6f3WWqb9INq4l/4upHMbrc2o2f6tYD2q20RLnh8p6bZU5v/dZfoWDWO6Nw228ibh/n8KRG+t9JCAcxQvrVdiG5lqAwmhzKTRzarWTfASPZMx4HtD5IZCtIhu8OgrEz4kyTdzu4tZhs6usjElwVhdHsKejbUT8H7WrX5ZNDiLg8KB/85EYZeBaxhM0DJ+i68GmagQSZqvkXGTwkhKB8hIsNXQp1bl1QTi8bBm42MbItMNlSML2Wn6HWujSqtLxTTrNCovT7xL1Ohe8WxNt5ptx+KiWI5/aK/Nh0bNiNP8mUMQosW81gCslGnf61PQRlHIoiKIeXrDffHOVV5Kwoa/Dtc0NUrHyTsCeD2etB4HWyp/FK+nkL3xt139epDVQszaVOvOT2bA2Ih5p9pbZfCPXbUAFZ/YG6MGImXDotDdLYGiCDjCd6TY2byjcFnk26hroVVpCpj312cPzYmB5to9TUQuNl6eRvKum2WnI8prChdLostCq0k136EG2+HLDSZq9hJmJmj5IZa3ReRGMQQaLa5B7toZbEFuXAJuw=----ATTACHMENT:----NzgyMTY4NDQ5MzU0MTYxMSA5Njg1NTU0ODY5NjY3NjI2IDc1NzIyNjA0ODUyNjU5NzA=