Exemple #1
0
 public function isValid($value, $context = array())
 {
     if (!isset($context['network'])) {
         $this->_error(self::NOT_IP_ADDRESS);
         return false;
     }
     $network = $context['network'];
     $maskPrefix = explode("/", $value);
     if (count($maskPrefix) == 2) {
         $value = $maskPrefix[1];
     }
     $network_bytearray = App_Util_Ip::dtr_pton($network);
     if (is_numeric($value)) {
         if ($value <= 128 && $value > 0) {
             if (!filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
                 $this->_error(self::INCOMPATIBLE_IP);
                 return false;
             }
             $mask_bytearray = App_Util_Ip::dtr_pton(App_Util_Ip::long2ipv6($value));
             if (($network_bytearray & $mask_bytearray) != $network_bytearray) {
                 $this->_error(self::INCOMPATIBLE_NETWORK);
                 return false;
             }
             return true;
         } else {
             $this->_error(self::INVALID_IPV6_PREFFIX);
             return false;
         }
     }
     if (parent::isValid($value)) {
         if (!filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
             $this->_error(self::INCOMPATIBLE_IP);
             return false;
         }
         $mask_bytearray = App_Util_Ip::dtr_pton($value);
         if (($network_bytearray & $mask_bytearray) != $network_bytearray) {
             $this->_error(self::INCOMPATIBLE_NETWORK);
             return false;
         }
         return true;
     }
     return false;
 }
 public function isValid($value)
 {
     $this->_setValue($value);
     try {
         if ($this->_version == App_Util_Ip::v4) {
             $host = ip2long($value);
         } else {
             $host = App_Util_Ip::dtr_pton($value);
         }
     } catch (Exception $e) {
         $this->_error(self::INVALID_VALUE);
         return false;
     }
     $check1 = $host & $this->_netmask;
     $check2 = $this->_subnet & $this->_netmask;
     if ($check1 == $check2) {
         return true;
     }
     $this->_error(self::NOT_ON_SUBNET);
     return false;
 }
 public function testDtrPtonv6()
 {
     $ip = "fe80:1:2:3:a:bad:1dea:dad";
     $this->assertEquals(current(unpack("A16", inet_pton($ip))), App_Util_Ip::dtr_pton($ip));
 }