/**
  * 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;
 }
예제 #2
0
 /**
  * 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;
 }