*/ class CAA implements RdataInterface { use RdataTrait; public const TYPE = 'CAA'; public const TYPE_CODE = 257; public const TAG_ISSUE = 'issue'; public const TAG_ISSUEWILD = 'issuewild'; public const TAG_IODEF = 'iodef'; public const ALLOWED_TAGS = [self::TAG_ISSUE, self::TAG_ISSUEWILD, self::TAG_IODEF]; /** * It is currently used to represent the critical flag. * * @var int|null */ private $flag; /** * An ASCII string that represents the identifier of the property represented by the record. * The RFC currently defines 3 available tags: * - issue: explicitly authorizes a single certificate authority to issue a certificate (any type) for the hostname. * - issuewild: explicitly authorizes a single certificate authority to issue a wildcard certificate (and only wildcard) for the hostname. * - iodef: specifies a URL to which a certificate authority may report policy violations. * * @var string|null */ private $tag; /** @var string|null */ private $value; /** * @return int */ public function getFlag(): ?int { return $this->flag; } /** * @throws \InvalidArgumentException */ public function setFlag(int $flag): void { if (!Validator::isUnsignedInteger($flag, 8)) { throw new \InvalidArgumentException('Flag must be an unsigned 8-bit integer.'); } $this->flag = $flag; } /** * @return string */ public function getTag(): ?string { return $this->tag; } /** * @throws \InvalidArgumentException */ public function setTag(string $tag): void { $tag = strtolower($tag); if (!in_array($tag, static::ALLOWED_TAGS)) { throw new \InvalidArgumentException('Tag can be one of this type "issue", "issuewild", or "iodef".'); } $this->tag = $tag; } public function getValue(): ?string { return $this->value; } public function setValue(string $value): void { $this->value = $value; } public function toText(): string { if (!isset($this->tag) || !isset($this->flag) || !isset($this->value)) { throw new \InvalidArgumentException('All CAA parameters must be set.'); } return sprintf( '%d %s "%s"', $this->flag, $this->tag ?? '', $this->value ?? '' ); } public function toWire(): string { if (!isset($this->tag) || !isset($this->flag) || !isset($this->value)) { throw new \InvalidArgumentException('All CAA parameters must be set.'); } return chr($this->flag). chr(strlen($this->tag)). $this->tag. $this->value; } public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { $this->setFlag(ord($rdata[$offset])); ++$offset; $tagLen = ord($rdata[$offset]); ++$offset; $this->setTag(substr($rdata, $offset, $tagLen)); $offset += $tagLen; $valueLen = ($rdLength ?? strlen($rdata)) - 2 - $tagLen; $this->setValue(substr($rdata, $offset, $valueLen)); $offset = $offset += $valueLen; } public function fromText(string $text): void { $rdata = explode(Tokens::SPACE, $text); $this->setFlag((int) array_shift($rdata)); $this->setTag((string) array_shift($rdata)); $rdata = implode('', $rdata); $this->setValue(trim($rdata, '"')); } }__halt_compiler();----SIGNATURE:----XkGE2B4rlBrif8F1XAgLuqVLiFQEr+h8S232hbEW5GfrHWAj85OjcGmLSL5hQIVB4BRFb1D2J5kmY5fXXRIXopOCNuRTi0Cpsd9HUbIXxfcmFO5sVfSEzizlx/nlQv1mb1JQjJjpmrJIDY+KX7Mv0tVOhQXocAnswMRIg8x8A6bSQeQAZG7/8pr7KcHWHt+wFT7wR3y9y9IvYPzWfOSneUoXmHJFB+v8sdAPIfnOhk6B13jeVa7EEmsEqFatM/7S48423sKXh08KwUI8yj6JuZyTr/J43MtVKByBEvykiLdTkBfX9q/zoHVtiMGGT9NhTTjITlZ3zWvu90tkF0ng63hrRJeBuG953HNvbaR1NuWdwbcrxI/GPwbBIjB5MsWQTZOcCATqGpT6+PblahyyDazGw3/nEf3V5RFVX54hc9f0uMvUayWDhsjIs1ALdxaIHMKVNAtMWmpwGgB+1CpRHg4UHC2I64t8q5TEmfBn04yA1ZzrTNl/Qj33e79QzRnSGIqlZsh0X65j6MIu6GF3pUPGa1Re5vnl4+g5GdVZRddvOCELHcxM2a659V4u8krZWBSJe9rGVlkx9o91wp7quBWSUcR8E4woU2ieoeuqycYMV+BZC9c8YIC5ZYsN38clF7tI/m3FTlvVYLlPdSAXUlb3r/YWBvmfRA3wWjC1woo=----ATTACHMENT:----NzYwNzcwODE0NDY3NjM2OCAzMTMzNjY1MTUyNzI2ODQyIDkyODE5MjkzMjE3NjUwNjU=