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:----mkIzXLX+DeM+OC3GvIlQRog5iamO7T2Qg/5sq0tEDgZrJU5HEv3dfdWxhEEA9/UAZrY0EtflNAE1lxsrMYSa8XR0Ti2+pX+tI4vdbY2Y/Z8NZGgVviBHGQPrcbSBPhhQ/bqf5HeNzlaXCnzUrbE/TbOxt23TkYOPSFLspeEeIWsFKsLv2Ea9+nJ/loaLpoPawBunHrwThz8Ymp5LJfJNoxxLJsM/aVoxEZNzgPO/5sti6Dw/RVN71Zp26EylnuRWtlGnOzdOokK7KsiRayKhg6/tVdTmiD0WdyZTPHMa2behncz28qYnGMBpdV+MdJkakUxG9W9Q59jnZwuoPye1iuFBpzpENCJhV4nk8XNLx6AhqNqlSKGtF/FHOVzWXSXgk8SEug3r0fgdP+7NCovgQjDPP2S6gVlwYSWk99Gc5elKVX3/vSMxEbOTnE9QC3KDVscMPi4nAwHc0g6TOdyY1w3bOnFAVNmw2dLCn902SjuZMl0PWK9g0ozTkElnaGu88Q3Cd9X2htbEqHOjoK/djCCu7nAQtUqjfAesqFt2F4D4sRpgRsxvOVr739F0aXv5m3sPS6O3xJLwc6QhrTehVhdQ9M3TXvTod3Q//DXcfVY+5m/ei0NTP85jJYdRRTf0wKDog/uiIn4A7GOkoj8kjZvnBmKMBJL/HKUK60xSfWA=----ATTACHMENT:----ODMzMjMyMDYyODY4MzgxMyA2OTIxNzEwODYyNjU4MzI2IDQyNDYwMDcyODY3OTcwMjc=