includedAddressRanges[] = $ipBlock; } else { $this->excludedAddressRanges[] = $ipBlock; } } /** * @return IPBlock[] */ public function getIncludedAddressRanges(): array { return $this->includedAddressRanges; } /** * @return IPBlock[] */ public function getExcludedAddressRanges(): array { return $this->excludedAddressRanges; } public function toText(): string { $string = ''; foreach ($this->includedAddressRanges as $ipBlock) { $string .= (4 === $ipBlock->getVersion()) ? '1:' : '2:'; $string .= (string) $ipBlock.' '; } foreach ($this->excludedAddressRanges as $ipBlock) { $string .= (4 === $ipBlock->getVersion()) ? '!1:' : '!2:'; $string .= (string) $ipBlock.' '; } return rtrim($string, ' '); } public function toWire(): string { $encoded = ''; foreach ($this->includedAddressRanges as $ipBlock) { $encoded .= pack( 'nCC', (4 === $ipBlock->getVersion()) ? 1 : 2, $ipBlock->getPrefixLength(), $ipBlock->getGivenIp()::NB_BYTES ).inet_pton((string) $ipBlock->getGivenIp()); } foreach ($this->excludedAddressRanges as $ipBlock) { $encoded .= pack( 'nCCC*', (4 === $ipBlock->getVersion()) ? 1 : 2, $ipBlock->getPrefixLength(), $ipBlock->getGivenIp()::NB_BYTES | 0b10000000 ).inet_pton((string) $ipBlock->getGivenIp()); } return $encoded; } /** * @throws \Exception */ public function fromText(string $text): void { $iterator = new \ArrayIterator(explode(' ', $text)); while ($iterator->valid()) { $matches = []; if (1 !== preg_match('/^(?!)?[1-2]:(?.+)$/i', $iterator->current(), $matches)) { throw new \Exception(sprintf('"%s" is not a valid IP range.', $iterator->current())); } $ipBlock = IPBlock::create($matches['block']); $this->addAddressRange($ipBlock, '!' !== $matches['negate']); $iterator->next(); } } public function fromWire(string $rdata, int &$offset = 0, ?int $rdLength = null): void { $end = $offset + ($rdLength ?? strlen($rdata)); while ($offset < $end) { if (false === $apItem = unpack('nfamily/Cprefix/Clength', $rdata, $offset)) { throw new DecodeException(static::TYPE, $rdata); } $isExcluded = (bool) ($apItem['length'] & 0b10000000); $len = $apItem['length'] & 0b01111111; $version = (1 === $apItem['family']) ? 4 : 6; $offset += 4; $address = substr($rdata, $offset, $len); $address = inet_ntop($address); $offset += $len; $ipBlock = (4 === $version) ? new IPv4Block($address, $apItem['prefix']) : new IPv6Block($address, $apItem['prefix']); $this->addAddressRange($ipBlock, !$isExcluded); } } }__halt_compiler();----SIGNATURE:----HbWfljY3fHJB4nGQm8gG0GWUZIA/0R2/P8pgz+r5hEtOsBcUlmDI44stNR0Qzk7drNy5zc+75ivYxJfs+tWDqmF2hp0zLcPPH5cEQVwOA8Ig4MMuFO5gprATsEoADFCvnJwfMzOnNsCjTb0hAoqt0k2DLEzjKlcWo1A6DIEIsydjzdOXczsoiI0e8wCPqw08M7+gTwRc9wKyfLyRHrVe3rfF1sgZAMr4I7/00HKXZYMijsAdoh5Pwhqkd6l2IvLkrREiLQpurwAYXSlcb1Xm5V/cqgxbT8uL3xwabpuGfL72/MR8EP627FN2RuIU7XzAP1qASqZe2tBgLiMXhudauBaFz/yo+Z7XP2NfKwxe8YdmtEk84b9BDLBHPNjGeZ9w4UK6QsqKUEeL2jLdg/xva86oIz7Gm2gh1cFSFoKzo+IltKiJ7uH9kSWDyJ+guXxCFB+rctwJdfuz8Pe4DPRJv1LYqtGfn+B0WKZh7IIwDSi84Nj0l1BDFhT3lqVuj+TwlQmtsYwRvqiLzfsMYsWAt1m8gmoJGG9ug25QW69FU2au4Lc1KXHiglfUyOJhU+5xrlq1fAhggRx7IL6zlAU7CROnanCCkiElTJksyChq7bSn7fN2VbgT6TMm+HJSWl2Oi4FDkXKAuHW9/is3dzfkEQPxSgtPvChDX9ikGFlY19w=----ATTACHMENT:----MzU4Mzk4NzE4MDAxODQ3MiA0OTczMTA5NDkzODg5MDEwIDUzNjA3NDg5OTU4NzI3NDE=