/** * Search IP Addresses * * @param $IPaddress the address to search * * @return (array) each value of the array (corresponding to one IPAddress) is an array of the * items from the master item to the IPAddress **/ static function getItemsByIPAddress($IPaddress) { global $DB; // We must resolv binary address : // 1°) we don't know if the IP address is valid // 2°) we don't know its version // 3°) binary request is more efficient than textual one (polymorphism of IPv6 addresses) $address = new self(); if (!$address->setAddressFromString($IPaddress)) { return array(); } $query = "SELECT `gip`.`id`\n FROM `glpi_ipaddresses` as gip\n WHERE `gip`.`version` = '" . $address->version . "'\n"; $startIndex = $address->version == 4 ? 3 : 1; $binaryIP = $address->getBinary(); for ($i = $startIndex; $i < 4; ++$i) { $query .= "AND `gip`.`binary_{$i}` = '" . $binaryIP[$i] . "'"; } $addressesWithItems = array(); foreach ($DB->request($query) as $result) { if ($address->getFromDB($result['id'])) { $addressesWithItems[] = array_merge(array_reverse($address->recursivelyGetItems()), array(clone $address)); } } return $addressesWithItems; }