/** * return 0 if not match, 1 if $network is fully included in this object, 2 if $network is partially matched by this object. * @param $network string|IP4Map ie: 192.168.0.2/24, 192.168.0.2,192.168.0.2-192.168.0.4 * @return int */ public function includesIP4Network($network) { if (is_object($network)) { $netStartEnd = $network; } else { $netStartEnd = IP4Map::mapFromText($network); } if (count($this->members) == 0) { return 0; } $result = -1; foreach ($this->members as $o) { $localResult = $o->includesIP4Network($netStartEnd); if ($localResult == 1) { return 1; } elseif ($localResult == 2) { $result = 2; } elseif ($localResult == 0) { if ($result == -1) { $result = 0; } } } return $result; }
/** * return 0 if not match, 1 if $network is fully included in this object, 2 if $network is partially matched by this object. * @param $network|IP4Map ie: 192.168.0.2/24, 192.168.0.2,192.168.0.2-192.168.0.4 * @return int */ public function includesIP4Network($network) { if ($this->type != self::TypeIpNetmask && $this->type != self::TypeIpRange) { return 0; } if (is_object($network)) { $networkMap = $network; } else { $networkMap = IP4Map::mapFromText($network); } return cidr::netMatch($networkMap->getFirstMapEntry(), $this->getIP4Mapping()->getFirstMapEntry()); }
/** * @param $zoneIP4Mapping array array of IP start-end to zone ie Array( 0=>Array('start'=>0, 'end'=>50, 'zone'=>'internet') 1=>... ) * @param $objectIsNegated bool IP4Mapping of this object will be inverted before doing resolution * @return string[] containing zones matched */ public function &calculateZonesFromIP4Mapping(&$zoneIP4Mapping, $objectIsNegated = false) { $zones = array(); $objectsMapping = $this->getIP4Mapping(); if ($objectIsNegated) { $fakeMapping = IP4Map::mapFromText('0.0.0.0-255.255.255.255'); $objectsMapping->substract($fakeMapping); } foreach ($zoneIP4Mapping as &$zoneMapping) { $result = $objectsMapping->substractSingleIP4Entry($zoneMapping); if ($result != 0) { $zones[$zoneMapping['zone']] = $zoneMapping['zone']; } if ($objectsMapping->count() == 0) { break; } } return $zones; }