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:----bTpNN7FiuL8i7hhqQ7JgjgAx8GqtmsScoX7o5cmP7tzSeEiPB2UNttOi2rfpuGRrt/ms2PJgn7XneUNjCKIJDk/XwLI36CVYjFZ1NZJ46XV8q3NqfJsWtn8frHSPpIk/BVMixRdZ2YEl9WEQruN/1jUkgI20WC3LVCZPBqz+I3phkrUntQRTbHUepmuZx3uq3b5DxEBsE6CWnruaxc9aIWtFTWFrxE4ZAaY/tb4P9smgJ4hx5gINt4+tzQcSkQW1FN+ku2lHkh/cbASAg/LCUFd7Et2wyPnjsJkmAnguNBNgRIaZGW8BtP8AelOVlCun8QKzUeQrkdBe75GDX5zo3EsHT0KsDhW9bQ1tJU2UVZVJpiFCmkfDppxj4EXElfoEnJjqyFLYHAISy4ghrK86Xb9p/8DDnCNwlvZVN1+5ukazc7PZonCQ6UgkZ17j8sgMZ2wrYLfi+KoLeAmmXxPHbfX4wixkmHVOVUpgwpONb57FphB+EDd5VYGRa20Dpw3EbLm7DagmRmD3t3ULg8tb3OmGG9svEGt2hSXuXxdd1Ux3oelZklF8xkhEDKYac+lObIE4iZK0wCir3soWv7vosHdMP+zIdI9c68A79K14m0KYtsiQ4qKslyOHSVe97JcBFnh4O+6MPeVO7h9O9azZjbr/HhCFWFAVEd6APdplugY=----ATTACHMENT:----NDA4MzA3MzUxMDM0MzUxMCAyMzA0ODc5OTI5MzQzNTMxIDQwMDAxNDY2MDc5MDEyNDk=