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:----NBSvzlLziVT8HANixGbXJrLyAJNKBIFLexvjEp5uI4lPlrxDQ4wpDjBNsc5SQx2OIpYNcsoz1/A9chiB/64+aqWSmTBUKCbgDB1OUEO3nbzoaCdLuQnG2UhkPqofEuRLuZKP+2XZR0YAMeDPJjLczPpvl+aycyO2GdafHPbc01oQBO9fLPCBgWD09V+b+qxYjiZGAW7Hu55meBU+53jWC1/nGAU8vt2FgKZZe2Bac46Uwhra2Ev9107uLiQ7ugc3CBG2tw/SDTMlubAvh7PLNsiqM/BR/3t04Ral75hSx/USQ1YbYXkVbp0/IjNdhMDXHHBM2MJi/hpodRI0Su4F+C+dZ9ZHjaxnFWuxClKti7lgf+ay3LgodpDFj1W//nM6GFjYMjZhq8TPCvzVoJgfZNdBZGU9phgaNCcA91y7MBtpjurI03Tgo1iwQ96D/GMj2wxa1ea5ZbksP3rljRNi26vCi+xpcGKj5sqiO/X8t9jd/5pn+ztXcSKeyLixuX5t8H0zKvlC6iEYawVhLRAaJbWD8Zd4xJM4atYklmt4Hl07Rm3Vm/IMqHSZlCPtUeZ9rhD69CBY8Uz5JVtf7SR8FGmiEuAe9+71btH5hFir8GdVOTtJq+1lUHUj9vgOGPea3I9V/iQJXXZ/ZluPLu6BhbprN2b8hIo5yDv6z6O1QN0=----ATTACHMENT:----ODgzODQ1MDIzMzA3ODc3OCA0ODEzMzY3MTYzMzE2MjQgOTMyMDAyNTg5NTk3ODgyOQ==