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:----FdRl4uqrORGxgoPO9kVUmZnmHvDuH5qlrGOHcupICeGxsJ1zAunUixJwZTWCjGqUHoizqTEydyrxtIYEACxL5vdGfYA+2Ge2R9UqVjqb445RzIkp3tTjle69YeMYmjt0On1lrALFZX2FyOEq9zU+bcc47SnuSJYmj1l35aKaijHB1Twi6KigBt/IM997R12Bh+CaB5F9NPvlwTvQcTueAJoQGI8e3zsDzYbAnd3Mlnrgr2sJgDHwrDDTJ3e5Z0uENw2XA1UL+Nqj19xqS3ML3z2Gtr5T+hzGcxgQWY/lMKUhFRXY4iI9Z4MRBBqXiQ38Qp/PTpxGugenRR2JztQjKrNopsZils/bF99Wh8VolzFsDdGh7aY53o0rIb3UzuJ0mwSoSAAMPKIV0q3mvNvcZXdtOw+cnjMavEaY0xxDwOLgFdbvVxA8A4NrVTglqkq4af0JczF3md9dyOxky9K3GoedXDS/+V/EztCPIkuP6Eb7camAv7okJs3JN9/dgEq8ByAMhSqI8jAef+egkkY3x4azF/vDLisf4+l2Cj33wgBot0nyUu+BbFJIZvQxd/kdK6gpXSh9UZh1CuumOTj+3fY00sG4lEcxHOhdd+c8T3HU8Aa2OaiNh1/J/zN60KhHw14z1mM1l7sN0Mob3+wpobwdHVMZjWCgFXfEXST/lyY=----ATTACHMENT:----NjczODE1MTk0ODE5NDM4NSA3NzQ2OTExODkwNzQ1MzQ4IDM3MDE1MDQ5MDI3OTg3MDk=