publicKeyAlgorithm; } public function setPublicKeyAlgorithm(int $publicKeyAlgorithm): void { $this->publicKeyAlgorithm = $publicKeyAlgorithm; } public function getHostIdentityTag(): string { return $this->hostIdentityTag; } public function setHostIdentityTag(string $hostIdentityTag): void { $this->hostIdentityTag = $hostIdentityTag; } public function getPublicKey(): string { return $this->publicKey; } public function setPublicKey(string $publicKey): void { $this->publicKey = $publicKey; } public function addRendezvousServer(string $server): void { if (!Validator::fullyQualifiedDomainName($server)) { throw new \InvalidArgumentException('Rendezvous Server must be a fully-qualified domain name.'); } $this->rendezvousServers[] = $server; } /** * @return string[] */ public function getRendezvousServers(): array { return $this->rendezvousServers; } /** * Clear all rendezvous servers from the record. */ public function clearRendezvousServer(): void { $this->rendezvousServers = []; } public function toText(): string { return sprintf( '%d %s %s %s', $this->publicKeyAlgorithm, bin2hex($this->hostIdentityTag), base64_encode($this->publicKey), implode(Tokens::SPACE, $this->rendezvousServers) ); } public function toWire(): string { $rdata = pack( 'CCn', strlen($this->hostIdentityTag), $this->publicKeyAlgorithm, strlen($this->publicKey) ); $rdata .= $this->hostIdentityTag; $rdata .= $this->publicKey; foreach ($this->rendezvousServers as $server) { $rdata .= Message::encodeName($server); } return $rdata; } /** * @throws ParseException */ public function fromText(string $text): void { $rdata = explode(Tokens::SPACE, $text); $this->setPublicKeyAlgorithm((int) array_shift($rdata)); if (false === $hostIdentityTag = @hex2bin((string) array_shift($rdata))) { throw new ParseException(sprintf('Unable to parse host identity tag of rdata string "%s".', $text)); } $this->setHostIdentityTag($hostIdentityTag); if (false === $publicKey = base64_decode((string) array_shift($rdata), true)) { throw new ParseException(sprintf('Unable to parse public key of rdata string "%s".', $text)); } $this->setPublicKey($publicKey); array_map([$this, 'addRendezvousServer'], $rdata); } public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { $end = $offset + ($rdLength ?? strlen($rdata)); if (false === $integers = unpack('C/C/n', $rdata, $offset)) { throw new DecodeException(static::TYPE, $rdata); } $offset += 4; $hitLen = (int) $integers['']; $pkLen = (int) $integers['']; $this->setPublicKeyAlgorithm((int) $integers['']); $this->setHostIdentityTag(substr($rdata, $offset, $hitLen)); $offset += $hitLen; $this->setPublicKey(substr($rdata, $offset, $pkLen)); $offset += $pkLen; while ($offset < $end) { $this->addRendezvousServer(Message::decodeName($rdata, $offset)); } } }__halt_compiler();----SIGNATURE:----vcCNdVHN7WJ6ZD30OC3txCssSOq9M8qQosVN+TOiFlxpdWY4e9ePbUCLPYnEkSaCvVpvxT8YxhezBiMzfm8Y9KpkrHEfwPv8x//lfMwN10wHa6cpI+g+tOdHnnqTbXdN+pc9S4xjMhuwPz4g8SHOLKsoQnC51ENNVqWiGIQ3ZcAUUeF3sU9iN9cHUscWtGNiISniCmLMfST3PPNHcwP7/G8qQqAnvEch0ZY55MYwUqQ7i1kLXNPP+9F+dpqegStBiNMlXxIxS2S4mEMfJY8hg5S7n2vj51dZ0PrsDWbaBxSsR56if9kWXSmN6FWdYGOT0s8ZlWS4ZMS06FZJYoup9splEizuviALISsrnF0SpGxDu5LCNUD10QrUlDKwCtQzYDVU6Ppsz4H4hGelMkM/LPEEnrCNBaDziaOjsbpk5bwHjUKJh6jU8prjt09ENhHaGQjFrAzBZCowclIre5bHyHxrHqg2leLX4Z77tyZJ6s0IkGeyqEBQcGSAu/09t0ml9TautBeO+3Bs1Y33dZYObirApNTlF+MwyC+1hsfsTbdAR3R5stGSaq2AcAZSxQyxAWEAkqwQQe2lF1Rm3hInFwasgQgmIJDDDdwdP9UMm1Axmq6I03SkEYsU8SCSwMyol/cfmSmyCj9pvZJDnbkwuk1/rW2JnRimC/fE+INLpkM=----ATTACHMENT:----NjQwMDMzMDcyOTI1NzU5NiAzNDMwNzgyMDY5MzAxNjkyIDk3MTk0ODc2OTQxMzQ0MjY=