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:----HHe2m+djDjF+UVbDoZ5p2AxfBCRVWXYbSyy52hzvMc7ewdln40I+5Nrf4xvmbobskPD8/+/SGzultimb1mJhnSlRqE2dFYTRlK3bxvozWW0R0p07GaBNZhVK8CFZ88m2HqQXKV06DQOUhKSI7hSQ12ECeJUK70eowSsCltDt6lEhcztw0xF2yag/WmWC0ag55XzpDOu/6HEmlmOZOIpso7qGZtzbM+XKQd9nndbWcQKIVfDCMXkkDoYuzXQlbuksEwOaD2T4ktT1clVCUM/PJhEzakhgMpwU1q3yd4Q7RDeeUNX5OajfUMNVEG8WyWvMtjBYPVkyZVC+4146hoKqvF4HqbdtRqsfeIiIVQmWL/fdqlTujpHmXqA521mXjFYiX/zSb1cHGEaZPrjByzFc6hrKU41QFoQspU0Nm1Xyp9+6AW/AoE/H+ider/MqiWcNwkyH0neFni7eNQtC8kWMH/tqa20Y4LetgKuG/cF0UYHKdO+ermhzMWHyS5iEAQRsneW0Tu5+Rkeac28ub7ck+B1URys4yBfz+p+H/a5nJ0LqOUZX+OuQmqsdQqvjfEWEPuWklVeE/14n7bUljnWjGeZDnzu0cp7Jxk1nF6sLk/V67xwSscek8nHzHQgCarIVrbjcu2TLOUgT1Z+KC3c3W42hY3Z0WknPW8r+wE+LSwA=----ATTACHMENT:----NzAzMjAxODg1MTIxOTMwNiA1NjUzNzU2OTU5NDIwMTEyIDE2OTI1NDgxMzgzMzU2NjE=