/**
  * @return IP4Map
  */
 public function getIP4Mapping()
 {
     $result = array('unresolved' => array());
     $mapObject = new IP4Map();
     foreach ($this->members as $member) {
         if ($member->isTmpAddr()) {
             $result['unresolved'][] = $member;
             continue;
         } elseif ($member->isAddress()) {
             $localMap = $member->getIP4Mapping();
             $mapObject->addMap($localMap, true);
         } elseif ($member->isGroup()) {
             $localMap = $member->getIP4Mapping();
             $mapObject->addMap($localMap, true);
         } else {
             derr('unsupported type of objects ' . $member->toString());
         }
     }
     $mapObject->sortAndRecalculate();
     return $mapObject;
 }
Пример #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;
 }