/** * Parse a source hostname and generate a host info * @param $hostName * * @return Varien_Object */ protected function _getHostInfo($hostName) { $hostInfo = new Varien_Object(); $matches = array(); if (strpos($hostName, '/') !== false) { $hostInfo->setAddressType(self::ADDRESS_TYPE_UNIX_SOCKET)->setUnixSocket($hostName); } elseif (preg_match('/^\\[(([0-9a-f]{1,4})?(:([0-9a-f]{1,4})?){1,}:([0-9a-f]{1,4}))(%[0-9a-z]+)?\\](:([0-9]+))?$/i', $hostName, $matches)) { $hostName = isset($matches[1]) ? $matches[1] : null; !is_null($hostName) && isset($matches[6]) && ($hostName .= $matches[6]); $hostInfo->setAddressType(self::ADDRESS_TYPE_IPV6_ADDRESS)->setHostName($hostName)->setPort(isset($matches[8]) ? $matches[8] : null); } elseif (preg_match('/^(([0-9a-f]{1,4})?(:([0-9a-f]{1,4})?){1,}:([0-9a-f]{1,4}))(%[0-9a-z]+)?$/i', $hostName, $matches)) { $hostName = isset($matches[1]) ? $matches[1] : null; !is_null($hostName) && isset($matches[6]) && ($hostName .= $matches[6]); $hostInfo->setAddressType(self::ADDRESS_TYPE_IPV6_ADDRESS)->setHostName($hostName); } elseif (strpos($hostName, ':') !== false) { list($hostAddress, $hostPort) = explode(':', $hostName); $hostInfo->setAddressType(filter_var($hostAddress, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? self::ADDRESS_TYPE_IPV4_ADDRESS : self::ADDRESS_TYPE_HOSTNAME)->setHostName($hostAddress)->setPort($hostPort); } else { $hostInfo->setAddressType(filter_var($hostName, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? self::ADDRESS_TYPE_IPV4_ADDRESS : self::ADDRESS_TYPE_HOSTNAME)->setHostName($hostName); } return $hostInfo; }