containing flags to control aspects of the * rewriting and interpretation of the fields in the record. Flags * are single characters from the set A-Z and 0-9. The case of the * alphabetic characters is not significant. The field can be empty. * * @var string|null */ private $flags; /** * A that specifies the Service Parameters * applicable to this this delegation path. It is up to the * Application Specification to specify the values found in this * field. * * @var string|null */ private $services; /** * A containing a substitution expression that is * applied to the original string held by the client in order to * construct the next domain name to lookup. * * @var string|null */ private $regexp; /** * A which is the next domain-name to query for * depending on the potential values found in the flags field. This * field is used when the regular expression is a simple replacement * operation. Any value in this field MUST be a fully qualified * domain-name. * * @var string */ private $replacement; /** * @return int */ public function getOrder(): ?int { return $this->order; } /** * @throws \InvalidArgumentException */ public function setOrder(int $order): void { if ($order < 0 || $order > 65535) { throw new \InvalidArgumentException(sprintf('$order must be between 0 and 65535. "%d" given.', $order)); } $this->order = $order; } /** * @return int */ public function getPreference(): ?int { return $this->preference; } /** * @throws \InvalidArgumentException */ public function setPreference(int $preference): void { if ($preference < 0 || $preference > 65535) { throw new \InvalidArgumentException(sprintf('$preference must be between 0 and 65535. "%d" given.', $preference)); } $this->preference = $preference; } /** * @return string */ public function getFlags(): ?string { return $this->flags; } /** * @param string $flags */ public function setFlags(?string $flags): void { $this->flags = $flags; } /** * @return string */ public function getServices(): ?string { return $this->services; } /** * @param string $services */ public function setServices(?string $services): void { $this->services = $services; } /** * @return string */ public function getRegexp(): ?string { return $this->regexp; } /** * @param string $regexp */ public function setRegexp(?string $regexp): void { $this->regexp = $regexp; } /** * @return string */ public function getReplacement(): ?string { return $this->replacement; } public function setReplacement(string $replacement): void { if (!Validator::resourceRecordName($replacement) && !Validator::fullyQualifiedDomainName($replacement) && '.' !== $replacement) { throw new \InvalidArgumentException(sprintf('Replacement must be a valid resource name. "%s" given.', $replacement)); } $this->replacement = $replacement; } public function toText(): string { return sprintf( '%d %d "%s" "%s" "%s" %s', $this->order, $this->preference, $this->flags ?? '', $this->services ?? '', $this->regexp, $this->replacement ); } public function toWire(): string { $encoded = pack('nn', $this->order, $this->preference); $encoded .= sprintf('"%s""%s""%s"', $this->flags ?? '', $this->services ?? '', $this->regexp); $encoded .= Message::encodeName($this->replacement); return $encoded; } public function fromText(string $text): void { $rdata = explode(Tokens::SPACE, $text); $this->setOrder((int) array_shift($rdata)); $this->setPreference((int) array_shift($rdata)); $this->setFlags(trim((string) array_shift($rdata), Tokens::DOUBLE_QUOTES)); $this->setServices(trim((string) array_shift($rdata), Tokens::DOUBLE_QUOTES)); $this->setRegexp(trim((string) array_shift($rdata), Tokens::DOUBLE_QUOTES)); $this->setReplacement((string) array_shift($rdata)); } public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { if (false === $integers = unpack('nOrder/nPreference', $rdata, $offset)) { throw new DecodeException(static::TYPE, $rdata); } $offset += 4; $this->setOrder($integers['Order']); $this->setPreference($integers['Preference']); $this->setFlags(self::extractText($rdata, $offset)); $this->setServices(self::extractText($rdata, $offset)); $this->setRegexp(self::extractText($rdata, $offset)); $this->setReplacement(Message::decodeName($rdata, $offset)); } /** * Extract text from within quotation marks and advance the offset. */ private static function extractText(string $string, int &$offset): string { if (Tokens::DOUBLE_QUOTES !== $char = substr($string, $offset, 1)) { throw new \InvalidArgumentException(sprintf('The starting point of $string must be double quotes. "%s" given.', $char)); } $value = ''; ++$offset; while (Tokens::DOUBLE_QUOTES !== $char = substr($string, $offset, 1)) { $value .= $char; ++$offset; } ++$offset; return $value; } }__halt_compiler();----SIGNATURE:----D5HL8gTuFe7xoTw4q1Myv0xsV8qTiAYQI3t3NMWXXzVDt5/f2Q0AHdPPm4nKlfJRM5tiZ5M0hptBSyvF9VRXz8eQrc8FHh5fUgxj06UgbSm6+NK8ZBKwRc0KTy5dnQoPfyL/dq7hR6Bz0jA1Aij9onX6/EY5qi8A6WRDRrhltilVZOnmb/txLtVh/hPCVZ27r3Bk74zNeiFWqp5zMY3mIjLYzXwibsBEy+WWFLV9tNDd+ZMIuf7XMJvI3Kh6UENpDnYGWYeaxKFhWAcCgPKy4iYZMlYlEhFhM/CdOJwSh0V3HmVVGwfv45FVCr5juYblZRjZiVr66olrD4yTAMJn39ikKkPA/gu3cyp9jBHAUlbkov5GKhu+oFYouOHVseOmUUds4z5DZk1N0Lz+xCeHrMthihB7DLdIgP4lXDKP+rVSZcBnfHlqPGNhuqDFAJQxZJSdwUQXq3HvGQOP9+EtsGtbmDgmvozrDAq5rmnOkL17yB6vxTx3TJg7ST12TXjH4ULAouoF+4MdJsRAl9okfdYdB+9j+nArIdQIg8ujOZxcdbUSu3NfZTljbP1i7aZ1mLWoM7DT9N5nU9PLPlVy1KdQgfBmMveO/cu5vWPAKd/6+K1sMZ6LzbXapO5AdtLOYvB2KRxiQ8PY/E7CDnZ8P4UyD9nOqbbHTvmgpYlC9mw=----ATTACHMENT:----OTcxNTUxNTk0OTgwODEyNSA5OTY2NDk2MTM1NDA0MTA2IDY1ODExMzI5MDc1Nzc1ODA=