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:----pNtxAEwNBYbW2T6KotbySV5GeOyGx2a9kHng+tC8vbYgvI40j85iWY8hMonEj5gJrN9evotIqUEX9k2j5X9sMKhPRskgqc20hSnxmawcQluvwKQYUOw2+w3YMV46//nLx/9ZVA1zVpV8JmGCZ2XrmALrpwmZxRUZn1tbsbNUoCcFXt2iG0uBlpul5lQkXsEmELbXOPEX/XTcbIuSTldodVpG4hldGa7QT117+McRFkNYKf8mqRdoZxMLY0Fz6YUJIl+8dG+637QVsdMgLOilkFAYV1hcRZlyehyg5d2S+wTSX4kdHCR8SikFWsyImfEWaoggrJU7l7WBeyLBU7YhOlhHPrehnuJeRuPQybQ/jKj5E2LhNUsv0Y9khjcyaH9eAw/ZOAG1Pj2qRgr6kWkEtWSGG0BRb1350pSzUxp6G7q3fP4mmZT6/9Vi9Cy4xdRcpKsIw/EjcREBrfyAgTjXHtDYppXgVvLSD05NPN6A8kbHXVlK51JUAOX843qZ+SCmjGh7TEFi14JqwVv3Um71QtftZuuMhn3JdoZli60+1uKerXmoavYyDgtS25RPtgWVWXlEIvT8ky/WHcUnxaKAbZ8iCgx/Nvpvh1gAuzw0cwkGCZQz/cPgj4iB9r4HiRHrcg9jGGI1VtFPMjsVrysti3CqcPxQ1nxLTMD/+ei6SwM=----ATTACHMENT:----NzYyOTE4OTAzMTMyMzIxOSA1OTcxMDM5NTI2NTI3NzIgODQyMDg4MjIyNDU0MTYzMQ==