summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorJano Slota <jano@alokal.eu>2014-06-30 15:58:26 +0200
committerczaks <marcin@6irc.net>2014-07-06 01:25:37 +0200
commitdca7570b32c6d17024684f99371b0659d785b02e (patch)
tree24ab3def10b50227e5d2ab17ecfe192a874489ac /inc
parent6a3dbe5c983e55adf098abe261d7ee100c16c2e6 (diff)
Update jQuery UI to 1.11.0, GeoIPv6 and IP library
Diffstat (limited to 'inc')
-rwxr-xr-xinc/lib/IP/Lifo/IP/CIDR.php30
-rwxr-xr-xinc/lib/IP/Lifo/IP/IP.php44
-rw-r--r--inc/lib/geoip/GeoIPv6.datbin1127489 -> 1231739 bytes
-rw-r--r--inc/lib/geoip/geoip.inc2239
4 files changed, 1752 insertions, 561 deletions
diff --git a/inc/lib/IP/Lifo/IP/CIDR.php b/inc/lib/IP/Lifo/IP/CIDR.php
index e8fe32ce..5ed92f93 100755
--- a/inc/lib/IP/Lifo/IP/CIDR.php
+++ b/inc/lib/IP/Lifo/IP/CIDR.php
@@ -254,7 +254,9 @@ class CIDR
* and the starting IP is not on a valid network boundrary (eg: Displaying
* an IP from an interface).
*
- * @return string IP in CIDR notation "ipaddr/prefix"
+ * <b>Note: The CIDR block returned is NOT always bit aligned.</b>
+ *
+ * @return string IP in CIDR notation "start_ip/prefix"
*/
public function getCidr()
{
@@ -262,6 +264,22 @@ class CIDR
}
/**
+ * Get the TRUE cidr notation for the subnet block.
+ *
+ * This is useful for when you want a string representation of the IP/prefix
+ * and the starting IP is not on a valid network boundrary (eg: Displaying
+ * an IP from an interface).
+ *
+ * <b>Note: The CIDR block returned is ALWAYS bit aligned.</b>
+ *
+ * @return string IP in CIDR notation "network/prefix"
+ */
+ public function getTrueCidr()
+ {
+ return $this->getNetwork() . '/' . $this->prefix;
+ }
+
+ /**
* Get the [low,high] range of the CIDR block
*
* Prefix sensitive.
@@ -382,8 +400,9 @@ class CIDR
{
// use fixed length HEX strings so we can easily do STRING comparisons
// instead of using slower bccomp() math.
- list($lo,$hi) = array_map(function($v){ return sprintf("%032s", IP::inet_ptoh($v)); }, CIDR::cidr_to_range($ip));
- list($min,$max) = array_map(function($v){ return sprintf("%032s", IP::inet_ptoh($v)); }, CIDR::cidr_to_range($cidr));
+ $map = function($v){ return sprintf("%032s", IP::inet_ptoh($v)); };
+ list($lo,$hi) = array_map($map, CIDR::cidr_to_range($ip));
+ list($min,$max) = array_map($map, CIDR::cidr_to_range($cidr));
/** visualization of logic used below
lo-hi = $ip to check
@@ -447,7 +466,8 @@ class CIDR
}
// force bit length to 32 or 128 depending on type of IP
- $bitlen = (false === filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) ? 128 : 32;
+ $version = IP::isIPv4($ip) ? 4 : 6;
+ $bitlen = $version == 4 ? 32 : 128;
if ($bits === null) {
// if no prefix is given use the length of the binary string which
@@ -469,7 +489,7 @@ class CIDR
// calculate "broadcast" (not technically a broadcast in IPv6)
$ip2 = BC::bcor($ip1, BC::bcnot($netmask));
- return array(IP::inet_dtop($ip1), IP::inet_dtop($ip2));
+ return array(IP::inet_dtop($ip1, $version), IP::inet_dtop($ip2, $version));
}
/**
diff --git a/inc/lib/IP/Lifo/IP/IP.php b/inc/lib/IP/Lifo/IP/IP.php
index 4d22aa76..1af587ff 100755
--- a/inc/lib/IP/Lifo/IP/IP.php
+++ b/inc/lib/IP/Lifo/IP/IP.php
@@ -26,6 +26,10 @@ abstract class IP
{
// shortcut for IPv4 addresses
if (strpos($ip, ':') === false && strpos($ip, '.') !== false) {
+ // remove any cidr block notation
+ if (($o = strpos($ip, '/')) !== false) {
+ $ip = substr($ip, 0, $o);
+ }
return sprintf('%u', ip2long($ip));
}
@@ -55,8 +59,11 @@ abstract class IP
/**
* Convert a decimal string into a human readable IP address.
+ *
+ * @param decimal $decimal Decimal number to convert into presentational IP string.
+ * @param integer $version Force IP version to 4 or 6. Leave null for automatic.
*/
- public static function inet_dtop($decimal, $expand = false)
+ public static function inet_dtop($decimal, $version = null)
{
$parts = array();
$parts[1] = bcdiv($decimal, '79228162514264337593543950336', 0); // >> 96
@@ -74,25 +81,27 @@ abstract class IP
$part = (int) $part;
}
- // if the first 96bits is all zeros then we can safely assume we
- // actually have an IPv4 address. Even though it's technically possible
- // you're not really ever going to see an IPv6 address in the range:
- // ::0 - ::ffff
- // It's feasible to see an IPv6 address of "::", in which case the
- // caller is going to have to account for that on their own.
- if (($parts[1] | $parts[2] | $parts[3]) == 0) {
+ if (!$version) {
+ // if the first 96bits is all zeros then we can safely assume we
+ // actually have an IPv4 address. Even though it's technically possible
+ // you're not really ever going to see an IPv6 address in the range:
+ // ::0 - ::ffff
+ // It's feasible to see an IPv6 address of "::", in which case the
+ // caller is going to have to account for that on their own (or
+ // pass $version to this function).
+ if (($parts[1] | $parts[2] | $parts[3]) == 0) {
+ $version = 4;
+ }
+ }
+
+ if ($version == 4) {
$ip = long2ip($parts[4]);
} else {
$packed = pack('N4', $parts[1], $parts[2], $parts[3], $parts[4]);
$ip = inet_ntop($packed);
}
- // Turn IPv6 to IPv4 if it's IPv4
- if (preg_match('/^::\d+\./', $ip)) {
- return substr($ip, 2);
- }
-
- return $expand ? self::inet_expand($ip) : $ip;
+ return $ip;
}
/**
@@ -107,8 +116,11 @@ abstract class IP
/**
* Convert a human readable (presentational) IP address into a BINARY string.
*/
- public static function inet_ptob($ip, $bits = 128)
+ public static function inet_ptob($ip, $bits = null)
{
+ if ($bits === null) {
+ $bits = self::isIPv4($ip) ? 32 : 128;
+ }
return BC::bcdecbin(self::inet_ptod($ip), $bits);
}
@@ -157,7 +169,7 @@ abstract class IP
* One use-case for this is IP 6to4 tunnels used in networking.
*
* @example
- * to_ipv4("10.10.10.10") == a0a:a0a
+ * to_ipv6("10.10.10.10") == a0a:a0a
*
* @param string $ip IPv4 address.
* @param boolean $mapped If true a Full IPv6 address is returned within the
diff --git a/inc/lib/geoip/GeoIPv6.dat b/inc/lib/geoip/GeoIPv6.dat
index 1c2658c5..425da351 100644
--- a/inc/lib/geoip/GeoIPv6.dat
+++ b/inc/lib/geoip/GeoIPv6.dat
Binary files differ
diff --git a/inc/lib/geoip/geoip.inc b/inc/lib/geoip/geoip.inc
index 16e8c392..d8f82d89 100644
--- a/inc/lib/geoip/geoip.inc
+++ b/inc/lib/geoip/geoip.inc
@@ -20,703 +20,1862 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-namespace geoip;
+define("GEOIP_COUNTRY_BEGIN", 16776960);
+define("GEOIP_STATE_BEGIN_REV0", 16700000);
+define("GEOIP_STATE_BEGIN_REV1", 16000000);
+define("GEOIP_STANDARD", 0);
+define("GEOIP_MEMORY_CACHE", 1);
+define("GEOIP_SHARED_MEMORY", 2);
+define("STRUCTURE_INFO_MAX_SIZE", 20);
+define("DATABASE_INFO_MAX_SIZE", 100);
+define("GEOIP_COUNTRY_EDITION", 1);
+define("GEOIP_PROXY_EDITION", 8);
+define("GEOIP_ASNUM_EDITION", 9);
+define("GEOIP_NETSPEED_EDITION", 10);
+define("GEOIP_REGION_EDITION_REV0", 7);
+define("GEOIP_REGION_EDITION_REV1", 3);
+define("GEOIP_CITY_EDITION_REV0", 6);
+define("GEOIP_CITY_EDITION_REV1", 2);
+define("GEOIP_ORG_EDITION", 5);
+define("GEOIP_ISP_EDITION", 4);
+define("SEGMENT_RECORD_LENGTH", 3);
+define("STANDARD_RECORD_LENGTH", 3);
+define("ORG_RECORD_LENGTH", 4);
+define("MAX_RECORD_LENGTH", 4);
+define("MAX_ORG_RECORD_LENGTH", 300);
+define("GEOIP_SHM_KEY", 0x4f415401);
+define("US_OFFSET", 1);
+define("CANADA_OFFSET", 677);
+define("WORLD_OFFSET", 1353);
+define("FIPS_RANGE", 360);
+define("GEOIP_UNKNOWN_SPEED", 0);
+define("GEOIP_DIALUP_SPEED", 1);
+define("GEOIP_CABLEDSL_SPEED", 2);
+define("GEOIP_CORPORATE_SPEED", 3);
+define("GEOIP_DOMAIN_EDITION", 11);
+define("GEOIP_COUNTRY_EDITION_V6", 12);
+define("GEOIP_LOCATIONA_EDITION", 13);
+define("GEOIP_ACCURACYRADIUS_EDITION", 14);
+define("GEOIP_CITYCOMBINED_EDITION", 15);
+define("GEOIP_CITY_EDITION_REV1_V6", 30);
+define("GEOIP_CITY_EDITION_REV0_V6", 31);
+define("GEOIP_NETSPEED_EDITION_REV1", 32);
+define("GEOIP_NETSPEED_EDITION_REV1_V6", 33);
+define("GEOIP_USERTYPE_EDITION", 28);
+define("GEOIP_USERTYPE_EDITION_V6", 29);
+define("GEOIP_ASNUM_EDITION_V6", 21);
+define("GEOIP_ISP_EDITION_V6", 22);
+define("GEOIP_ORG_EDITION_V6", 23);
+define("GEOIP_DOMAIN_EDITION_V6", 24);
-@define("GEOIP_COUNTRY_BEGIN", 16776960);
-@define("GEOIP_STATE_BEGIN_REV0", 16700000);
-@define("GEOIP_STATE_BEGIN_REV1", 16000000);
-@define("GEOIP_STANDARD", 0);
-@define("GEOIP_MEMORY_CACHE", 1);
-@define("GEOIP_SHARED_MEMORY", 2);
-@define("STRUCTURE_INFO_MAX_SIZE", 20);
-@define("DATABASE_INFO_MAX_SIZE", 100);
-@define("GEOIP_COUNTRY_EDITION", 1);
-@define("GEOIP_PROXY_EDITION", 8);
-@define("GEOIP_ASNUM_EDITION", 9);
-@define("GEOIP_NETSPEED_EDITION", 10);
-@define("GEOIP_REGION_EDITION_REV0", 7);
-@define("GEOIP_REGION_EDITION_REV1", 3);
-@define("GEOIP_CITY_EDITION_REV0", 6);
-@define("GEOIP_CITY_EDITION_REV1", 2);
-@define("GEOIP_ORG_EDITION", 5);
-@define("GEOIP_ISP_EDITION", 4);
-@define("SEGMENT_RECORD_LENGTH", 3);
-@define("STANDARD_RECORD_LENGTH", 3);
-@define("ORG_RECORD_LENGTH", 4);
-@define("MAX_RECORD_LENGTH", 4);
-@define("MAX_ORG_RECORD_LENGTH", 300);
-@define("GEOIP_SHM_KEY", 0x4f415401);
-@define("US_OFFSET", 1);
-@define("CANADA_OFFSET", 677);
-@define("WORLD_OFFSET", 1353);
-@define("FIPS_RANGE", 360);
-@define("GEOIP_UNKNOWN_SPEED", 0);
-@define("GEOIP_DIALUP_SPEED", 1);
-@define("GEOIP_CABLEDSL_SPEED", 2);
-@define("GEOIP_CORPORATE_SPEED", 3);
-@define("GEOIP_DOMAIN_EDITION", 11);
-@define("GEOIP_COUNTRY_EDITION_V6", 12);
-@define("GEOIP_LOCATIONA_EDITION", 13);
-@define("GEOIP_ACCURACYRADIUS_EDITION", 14);
-@define("GEOIP_CITYCOMBINED_EDITION", 15);
-@define("GEOIP_CITY_EDITION_REV1_V6", 30);
-@define("GEOIP_CITY_EDITION_REV0_V6",31);
-@define("GEOIP_NETSPEED_EDITION_REV1",32);
-@define("GEOIP_NETSPEED_EDITION_REV1_V6",33);
-@define("GEOIP_USERTYPE_EDITION",28);
-@define("GEOIP_USERTYPE_EDITION_V6",29);
-@define("GEOIP_ASNUM_EDITION_V6",21);
-@define("GEOIP_ISP_EDITION_V6",22);
-@define("GEOIP_ORG_EDITION_V6",23);
-@define("GEOIP_DOMAIN_EDITION_V6",24);
+define("CITYCOMBINED_FIXED_RECORD", 7);
-@define("CITYCOMBINED_FIXED_RECORD", 7 );
+class GeoIP
+{
+ public $flags;
+ public $filehandle;
+ public $memory_buffer;
+ public $databaseType;
+ public $databaseSegments;
+ public $record_length;
+ public $shmid;
+ public $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
+ "" => 0,
+ "AP" => 1,
+ "EU" => 2,
+ "AD" => 3,
+ "AE" => 4,
+ "AF" => 5,
+ "AG" => 6,
+ "AI" => 7,
+ "AL" => 8,
+ "AM" => 9,
+ "CW" => 10,
+ "AO" => 11,
+ "AQ" => 12,
+ "AR" => 13,
+ "AS" => 14,
+ "AT" => 15,
+ "AU" => 16,
+ "AW" => 17,
+ "AZ" => 18,
+ "BA" => 19,
+ "BB" => 20,
+ "BD" => 21,
+ "BE" => 22,
+ "BF" => 23,
+ "BG" => 24,
+ "BH" => 25,
+ "BI" => 26,
+ "BJ" => 27,
+ "BM" => 28,
+ "BN" => 29,
+ "BO" => 30,
+ "BR" => 31,
+ "BS" => 32,
+ "BT" => 33,
+ "BV" => 34,
+ "BW" => 35,
+ "BY" => 36,
+ "BZ" => 37,
+ "CA" => 38,
+ "CC" => 39,
+ "CD" => 40,
+ "CF" => 41,
+ "CG" => 42,
+ "CH" => 43,
+ "CI" => 44,
+ "CK" => 45,
+ "CL" => 46,
+ "CM" => 47,
+ "CN" => 48,
+ "CO" => 49,
+ "CR" => 50,
+ "CU" => 51,
+ "CV" => 52,
+ "CX" => 53,
+ "CY" => 54,
+ "CZ" => 55,
+ "DE" => 56,
+ "DJ" => 57,
+ "DK" => 58,
+ "DM" => 59,
+ "DO" => 60,
+ "DZ" => 61,
+ "EC" => 62,
+ "EE" => 63,
+ "EG" => 64,
+ "EH" => 65,
+ "ER" => 66,
+ "ES" => 67,
+ "ET" => 68,
+ "FI" => 69,
+ "FJ" => 70,
+ "FK" => 71,
+ "FM" => 72,
+ "FO" => 73,
+ "FR" => 74,
+ "SX" => 75,
+ "GA" => 76,
+ "GB" => 77,
+ "GD" => 78,
+ "GE" => 79,
+ "GF" => 80,
+ "GH" => 81,
+ "GI" => 82,
+ "GL" => 83,
+ "GM" => 84,
+ "GN" => 85,
+ "GP" => 86,
+ "GQ" => 87,
+ "GR" => 88,
+ "GS" => 89,
+ "GT" => 90,
+ "GU" => 91,
+ "GW" => 92,
+ "GY" => 93,
+ "HK" => 94,
+ "HM" => 95,
+ "HN" => 96,
+ "HR" => 97,
+ "HT" => 98,
+ "HU" => 99,
+ "ID" => 100,
+ "IE" => 101,
+ "IL" => 102,
+ "IN" => 103,
+ "IO" => 104,
+ "IQ" => 105,
+ "IR" => 106,
+ "IS" => 107,
+ "IT" => 108,
+ "JM" => 109,
+ "JO" => 110,
+ "JP" => 111,
+ "KE" => 112,
+ "KG" => 113,
+ "KH" => 114,
+ "KI" => 115,
+ "KM" => 116,
+ "KN" => 117,
+ "KP" => 118,
+ "KR" => 119,
+ "KW" => 120,
+ "KY" => 121,
+ "KZ" => 122,
+ "LA" => 123,
+ "LB" => 124,
+ "LC" => 125,
+ "LI" => 126,
+ "LK" => 127,
+ "LR" => 128,
+ "LS" => 129,
+ "LT" => 130,
+ "LU" => 131,
+ "LV" => 132,
+ "LY" => 133,
+ "MA" => 134,
+ "MC" => 135,
+ "MD" => 136,
+ "MG" => 137,
+ "MH" => 138,
+ "MK" => 139,
+ "ML" => 140,
+ "MM" => 141,
+ "MN" => 142,
+ "MO" => 143,
+ "MP" => 144,
+ "MQ" => 145,
+ "MR" => 146,
+ "MS" => 147,
+ "MT" => 148,
+ "MU" => 149,
+ "MV" => 150,
+ "MW" => 151,
+ "MX" => 152,
+ "MY" => 153,
+ "MZ" => 154,
+ "NA" => 155,
+ "NC" => 156,
+ "NE" => 157,
+ "NF" => 158,
+ "NG" => 159,
+ "NI" => 160,
+ "NL" => 161,
+ "NO" => 162,
+ "NP" => 163,
+ "NR" => 164,
+ "NU" => 165,
+ "NZ" => 166,
+ "OM" => 167,
+ "PA" => 168,
+ "PE" => 169,
+ "PF" => 170,
+ "PG" => 171,
+ "PH" => 172,
+ "PK" => 173,
+ "PL" => 174,
+ "PM" => 175,
+ "PN" => 176,
+ "PR" => 177,
+ "PS" => 178,
+ "PT" => 179,
+ "PW" => 180,
+ "PY" => 181,
+ "QA" => 182,
+ "RE" => 183,
+ "RO" => 184,
+ "RU" => 185,
+ "RW" => 186,
+ "SA" => 187,
+ "SB" => 188,
+ "SC" => 189,
+ "SD" => 190,
+ "SE" => 191,
+ "SG" => 192,
+ "SH" => 193,
+ "SI" => 194,
+ "SJ" => 195,
+ "SK" => 196,
+ "SL" => 197,
+ "SM" => 198,
+ "SN" => 199,
+ "SO" => 200,
+ "SR" => 201,
+ "ST" => 202,
+ "SV" => 203,
+ "SY" => 204,
+ "SZ" => 205,
+ "TC" => 206,
+ "TD" => 207,
+ "TF" => 208,
+ "TG" => 209,
+ "TH" => 210,
+ "TJ" => 211,
+ "TK" => 212,
+ "TM" => 213,
+ "TN" => 214,
+ "TO" => 215,
+ "TL" => 216,
+ "TR" => 217,
+ "TT" => 218,
+ "TV" => 219,
+ "TW" => 220,
+ "TZ" => 221,
+ "UA" => 222,
+ "UG" => 223,
+ "UM" => 224,
+ "US" => 225,
+ "UY" => 226,
+ "UZ" => 227,
+ "VA" => 228,
+ "VC" => 229,
+ "VE" => 230,
+ "VG" => 231,
+ "VI" => 232,
+ "VN" => 233,
+ "VU" => 234,
+ "WF" => 235,
+ "WS" => 236,
+ "YE" => 237,
+ "YT" => 238,
+ "RS" => 239,
+ "ZA" => 240,
+ "ZM" => 241,
+ "ME" => 242,
+ "ZW" => 243,
+ "A1" => 244,
+ "A2" => 245,
+ "O1" => 246,
+ "AX" => 247,
+ "GG" => 248,
+ "IM" => 249,
+ "JE" => 250,
+ "BL" => 251,
+ "MF" => 252,
+ "BQ" => 253,
+ "SS" => 254
+ );
-class GeoIP {
- var $flags;
- var $filehandle;
- var $memory_buffer;
- var $databaseType;
- var $databaseSegments;
- var $record_length;
- var $shmid;
- var $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
- "" => 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5,
- "AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "CW" => 10, "AO" => 11,
- "AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17,
- "AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23,
- "BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29,
- "BO" => 30, "BR" => 31, "BS" => 32, "BT" => 33, "BV" => 34, "BW" => 35,
- "BY" => 36, "BZ" => 37, "CA" => 38, "CC" => 39, "CD" => 40, "CF" => 41,
- "CG" => 42, "CH" => 43, "CI" => 44, "CK" => 45, "CL" => 46, "CM" => 47,
- "CN" => 48, "CO" => 49, "CR" => 50, "CU" => 51, "CV" => 52, "CX" => 53,
- "CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59,
- "DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65,
- "ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71,
- "FM" => 72, "FO" => 73, "FR" => 74, "SX" => 75, "GA" => 76, "GB" => 77,
- "GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83,
- "GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89,
- "GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95,
- "HN" => 96, "HR" => 97, "HT" => 98, "HU" => 99, "ID" => 100, "IE" => 101,
- "IL" => 102, "IN" => 103, "IO" => 104, "IQ" => 105, "IR" => 106, "IS" => 107,
- "IT" => 108, "JM" => 109, "JO" => 110, "JP" => 111, "KE" => 112, "KG" => 113,
- "KH" => 114, "KI" => 115, "KM" => 116, "KN" => 117, "KP" => 118, "KR" => 119,
- "KW" => 120, "KY" => 121, "KZ" => 122, "LA" => 123, "LB" => 124, "LC" => 125,
- "LI" => 126, "LK" => 127, "LR" => 128, "LS" => 129, "LT" => 130, "LU" => 131,
- "LV" => 132, "LY" => 133, "MA" => 134, "MC" => 135, "MD" => 136, "MG" => 137,
- "MH" => 138, "MK" => 139, "ML" => 140, "MM" => 141, "MN" => 142, "MO" => 143,
- "MP" => 144, "MQ" => 145, "MR" => 146, "MS" => 147, "MT" => 148, "MU" => 149,
- "MV" => 150, "MW" => 151, "MX" => 152, "MY" => 153, "MZ" => 154, "NA" => 155,
- "NC" => 156, "NE" => 157, "NF" => 158, "NG" => 159, "NI" => 160, "NL" => 161,
- "NO" => 162, "NP" => 163, "NR" => 164, "NU" => 165, "NZ" => 166, "OM" => 167,
- "PA" => 168, "PE" => 169, "PF" => 170, "PG" => 171, "PH" => 172, "PK" => 173,
- "PL" => 174, "PM" => 175, "PN" => 176, "PR" => 177, "PS" => 178, "PT" => 179,
- "PW" => 180, "PY" => 181, "QA" => 182, "RE" => 183, "RO" => 184, "RU" => 185,
- "RW" => 186, "SA" => 187, "SB" => 188, "SC" => 189, "SD" => 190, "SE" => 191,
- "SG" => 192, "SH" => 193, "SI" => 194, "SJ" => 195, "SK" => 196, "SL" => 197,
- "SM" => 198, "SN" => 199, "SO" => 200, "SR" => 201, "ST" => 202, "SV" => 203,
- "SY" => 204, "SZ" => 205, "TC" => 206, "TD" => 207, "TF" => 208, "TG" => 209,
- "TH" => 210, "TJ" => 211, "TK" => 212, "TM" => 213, "TN" => 214, "TO" => 215,
- "TL" => 216, "TR" => 217, "TT" => 218, "TV" => 219, "TW" => 220, "TZ" => 221,
- "UA" => 222, "UG" => 223, "UM" => 224, "US" => 225, "UY" => 226, "UZ" => 227,
- "VA" => 228, "VC" => 229, "VE" => 230, "VG" => 231, "VI" => 232, "VN" => 233,
- "VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "RS" => 239,
- "ZA" => 240, "ZM" => 241, "ME" => 242, "ZW" => 243, "A1" => 244, "A2" => 245,
- "O1" => 246, "AX" => 247, "GG" => 248, "IM" => 249, "JE" => 250, "BL" => 251,
- "MF" => 252, "BQ" => 253, "SS" => 254
- );
- var $GEOIP_COUNTRY_CODES = array(
- "","AP","EU","AD","AE","AF","AG","AI","AL","AM","CW",
- "AO","AQ","AR","AS","AT","AU","AW","AZ","BA","BB",
- "BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO",
- "BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD",
- "CF","CG","CH","CI","CK","CL","CM","CN","CO","CR",
- "CU","CV","CX","CY","CZ","DE","DJ","DK","DM","DO",
- "DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ",
- "FK","FM","FO","FR","SX","GA","GB","GD","GE","GF",
- "GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT",
- "GU","GW","GY","HK","HM","HN","HR","HT","HU","ID",
- "IE","IL","IN","IO","IQ","IR","IS","IT","JM","JO",
- "JP","KE","KG","KH","KI","KM","KN","KP","KR","KW",
- "KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT",
- "LU","LV","LY","MA","MC","MD","MG","MH","MK","ML",
- "MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV",
- "MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI",
- "NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF",
- "PG","PH","PK","PL","PM","PN","PR","PS","PT","PW",
- "PY","QA","RE","RO","RU","RW","SA","SB","SC","SD",
- "SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO",
- "SR","ST","SV","SY","SZ","TC","TD","TF","TG","TH",
- "TJ","TK","TM","TN","TO","TL","TR","TT","TV","TW",
- "TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE",
- "VG","VI","VN","VU","WF","WS","YE","YT","RS","ZA",
- "ZM","ME","ZW","A1","A2","O1","AX","GG","IM","JE",
- "BL","MF", "BQ", "SS", "O1" );
- var $GEOIP_COUNTRY_CODES3 = array(
- "","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","CUW",
- "AGO","ATA","ARG","ASM","AUT","AUS","ABW","AZE","BIH","BRB",
- "BGD","BEL","BFA","BGR","BHR","BDI","BEN","BMU","BRN","BOL",
- "BRA","BHS","BTN","BVT","BWA","BLR","BLZ","CAN","CCK","COD",
- "CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI",
- "CUB","CPV","CXR","CYP","CZE","DEU","DJI","DNK","DMA","DOM",
- "DZA","ECU","EST","EGY","ESH","ERI","ESP","ETH","FIN","FJI",
- "FLK","FSM","FRO","FRA","SXM","GAB","GBR","GRD","GEO","GUF",
- "GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","SGS","GTM",
- "GUM","GNB","GUY","HKG","HMD","HND","HRV","HTI","HUN","IDN",
- "IRL","ISR","IND","IOT","IRQ","IRN","ISL","ITA","JAM","JOR",
- "JPN","KEN","KGZ","KHM","KIR","COM","KNA","PRK","KOR","KWT",
- "CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU",
- "LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI",
- "MMR","MNG","MAC","MNP","MTQ","MRT","MSR","MLT","MUS","MDV",
- "MWI","MEX","MYS","MOZ","NAM","NCL","NER","NFK","NGA","NIC",
- "NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER","PYF",
- "PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW",
- "PRY","QAT","REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN",
- "SWE","SGP","SHN","SVN","SJM","SVK","SLE","SMR","SEN","SOM",
- "SUR","STP","SLV","SYR","SWZ","TCA","TCD","ATF","TGO","THA",
- "TJK","TKL","TKM","TUN","TON","TLS","TUR","TTO","TUV","TWN",
- "TZA","UKR","UGA","UMI","USA","URY","UZB","VAT","VCT","VEN",
- "VGB","VIR","VNM","VUT","WLF","WSM","YEM","MYT","SRB","ZAF",
- "ZMB","MNE","ZWE","A1","A2","O1","ALA","GGY","IMN","JEY",
- "BLM","MAF", "BES", "SSD", "O1"
- );
- var $GEOIP_COUNTRY_NAMES = array(
- "","Asia/Pacific Region","Europe","Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Curacao",
- "Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Azerbaijan","Bosnia and Herzegovina","Barbados",
- "Bangladesh","Belgium","Burkina Faso","Bulgaria","Bahrain","Burundi","Benin","Bermuda","Brunei Darussalam","Bolivia",
- "Brazil","Bahamas","Bhutan","Bouvet Island","Botswana","Belarus","Belize","Canada","Cocos (Keeling) Islands","Congo, The Democratic Republic of the",
- "Central African Republic","Congo","Switzerland","Cote D'Ivoire","Cook Islands","Chile","Cameroon","China","Colombia","Costa Rica",
- "Cuba","Cape Verde","Christmas Island","Cyprus","Czech Republic","Germany","Djibouti","Denmark","Dominica","Dominican Republic",
- "Algeria","Ecuador","Estonia","Egypt","Western Sahara","Eritrea","Spain","Ethiopia","Finland","Fiji",
- "Falkland Islands (Malvinas)","Micronesia, Federated States of","Faroe Islands","France","Sint Maarten (Dutch part)","Gabon","United Kingdom","Grenada","Georgia","French Guiana",
- "Ghana","Gibraltar","Greenland","Gambia","Guinea","Guadeloupe","Equatorial Guinea","Greece","South Georgia and the South Sandwich Islands","Guatemala",
- "Guam","Guinea-Bissau","Guyana","Hong Kong","Heard Island and McDonald Islands","Honduras","Croatia","Haiti","Hungary","Indonesia",
- "Ireland","Israel","India","British Indian Ocean Territory","Iraq","Iran, Islamic Republic of","Iceland","Italy","Jamaica","Jordan",
- "Japan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Comoros","Saint Kitts and Nevis","Korea, Democratic People's Republic of","Korea, Republic of","Kuwait",
- "Cayman Islands","Kazakhstan","Lao People's Democratic Republic","Lebanon","Saint Lucia","Liechtenstein","Sri Lanka","Liberia","Lesotho","Lithuania",
- "Luxembourg","Latvia","Libya","Morocco","Monaco","Moldova, Republic of","Madagascar","Marshall Islands","Macedonia","Mali",
- "Myanmar","Mongolia","Macau","Northern Mariana Islands","Martinique","Mauritania","Montserrat","Malta","Mauritius","Maldives",
- "Malawi","Mexico","Malaysia","Mozambique","Namibia","New Caledonia","Niger","Norfolk Island","Nigeria","Nicaragua",
- "Netherlands","Norway","Nepal","Nauru","Niue","New Zealand","Oman","Panama","Peru","French Polynesia",
- "Papua New Guinea","Philippines","Pakistan","Poland","Saint Pierre and Miquelon","Pitcairn Islands","Puerto Rico","Palestinian Territory","Portugal","Palau",
- "Paraguay","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saudi Arabia","Solomon Islands","Seychelles","Sudan",
- "Sweden","Singapore","Saint Helena","Slovenia","Svalbard and Jan Mayen","Slovakia","Sierra Leone","San Marino","Senegal","Somalia","Suriname",
- "Sao Tome and Principe","El Salvador","Syrian Arab Republic","Swaziland","Turks and Caicos Islands","Chad","French Southern Territories","Togo","Thailand",
- "Tajikistan","Tokelau","Turkmenistan","Tunisia","Tonga","Timor-Leste","Turkey","Trinidad and Tobago","Tuvalu","Taiwan",
- "Tanzania, United Republic of","Ukraine","Uganda","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Holy See (Vatican City State)","Saint Vincent and the Grenadines","Venezuela",
- "Virgin Islands, British","Virgin Islands, U.S.","Vietnam","Vanuatu","Wallis and Futuna","Samoa","Yemen","Mayotte","Serbia","South Africa",
- "Zambia","Montenegro","Zimbabwe","Anonymous Proxy","Satellite Provider","Other","Aland Islands","Guernsey","Isle of Man","Jersey",
- "Saint Barthelemy","Saint Martin", "Bonaire, Saint Eustatius and Saba",
- "South Sudan", "Other"
- );
+ public $GEOIP_COUNTRY_CODES = array(
+ "",
+ "AP",
+ "EU",
+ "AD",
+ "AE",
+ "AF",
+ "AG",
+ "AI",
+ "AL",
+ "AM",
+ "CW",
+ "AO",
+ "AQ",
+ "AR",
+ "AS",
+ "AT",
+ "AU",
+ "AW",
+ "AZ",
+ "BA",
+ "BB",
+ "BD",
+ "BE",
+ "BF",
+ "BG",
+ "BH",
+ "BI",
+ "BJ",
+ "BM",
+ "BN",
+ "BO",
+ "BR",
+ "BS",
+ "BT",
+ "BV",
+ "BW",
+ "BY",
+ "BZ",
+ "CA",
+ "CC",
+ "CD",
+ "CF",
+ "CG",
+ "CH",
+ "CI",
+ "CK",
+ "CL",
+ "CM",
+ "CN",
+ "CO",
+ "CR",
+ "CU",
+ "CV",
+ "CX",
+ "CY",
+ "CZ",
+ "DE",
+ "DJ",
+ "DK",
+ "DM",
+ "DO",
+ "DZ",
+ "EC",
+ "EE",
+ "EG",
+ "EH",
+ "ER",
+ "ES",
+ "ET",
+ "FI",
+ "FJ",
+ "FK",
+ "FM",
+ "FO",
+ "FR",
+ "SX",
+ "GA",
+ "GB",
+ "GD",
+ "GE",
+ "GF",
+ "GH",
+ "GI",
+ "GL",
+ "GM",
+ "GN",
+ "GP",
+ "GQ",
+ "GR",
+ "GS",
+ "GT",
+ "GU",
+ "GW",
+ "GY",
+ "HK",
+ "HM",
+ "HN",
+ "HR",
+ "HT",
+ "HU",
+ "ID",
+ "IE",
+ "IL",
+ "IN",
+ "IO",
+ "IQ",
+ "IR",
+ "IS",
+ "IT",
+ "JM",
+ "JO",
+ "JP",
+ "KE",
+ "KG",
+ "KH",
+ "KI",
+ "KM",
+ "KN",
+ "KP",
+ "KR",
+ "KW",
+ "KY",
+ "KZ",
+ "LA",
+ "LB",
+ "LC",
+ "LI",
+ "LK",
+ "LR",
+ "LS",
+ "LT",
+ "LU",
+ "LV",
+ "LY",
+ "MA",
+ "MC",
+ "MD",
+ "MG",
+ "MH",
+ "MK",
+ "ML",
+ "MM",
+ "MN",
+ "MO",
+ "MP",
+ "MQ",
+ "MR",
+ "MS",
+ "MT",
+ "MU",
+ "MV",
+ "MW",
+ "MX",
+ "MY",
+ "MZ",
+ "NA",
+ "NC",
+ "NE",
+ "NF",
+ "NG",
+ "NI",
+ "NL",
+ "NO",
+ "NP",
+ "NR",
+ "NU",
+ "NZ",
+ "OM",
+ "PA",
+ "PE",
+ "PF",
+ "PG",
+ "PH",
+ "PK",
+ "PL",
+ "PM",
+ "PN",
+ "PR",
+ "PS",
+ "PT",
+ "PW",
+ "PY",
+ "QA",
+ "RE",
+ "RO",
+ "RU",
+ "RW",
+ "SA",
+ "SB",
+ "SC",
+ "SD",
+ "SE",
+ "SG",
+ "SH",
+ "SI",
+ "SJ",
+ "SK",
+ "SL",
+ "SM",
+ "SN",
+ "SO",
+ "SR",
+ "ST",
+ "SV",
+ "SY",
+ "SZ",
+ "TC",
+ "TD",
+ "TF",
+ "TG",
+ "TH",
+ "TJ",
+ "TK",
+ "TM",
+ "TN",
+ "TO",
+ "TL",
+ "TR",
+ "TT",
+ "TV",
+ "TW",
+ "TZ",
+ "UA",
+ "UG",
+ "UM",
+ "US",
+ "UY",
+ "UZ",
+ "VA",
+ "VC",
+ "VE",
+ "VG",
+ "VI",
+ "VN",
+ "VU",
+ "WF",
+ "WS",
+ "YE",
+ "YT",
+ "RS",
+ "ZA",
+ "ZM",
+ "ME",
+ "ZW",
+ "A1",
+ "A2",
+ "O1",
+ "AX",
+ "GG",
+ "IM",
+ "JE",
+ "BL",
+ "MF",
+ "BQ",
+ "SS",
+ "O1"
+ );
- var $GEOIP_CONTINENT_CODES = array(
- "--", "AS","EU","EU","AS","AS","NA","NA","EU","AS","NA",
- "AF","AN","SA","OC","EU","OC","NA","AS","EU","NA",
- "AS","EU","AF","EU","AS","AF","AF","NA","AS","SA",
- "SA","NA","AS","AN","AF","EU","NA","NA","AS","AF",
- "AF","AF","EU","AF","OC","SA","AF","AS","SA","NA",
- "NA","AF","AS","AS","EU","EU","AF","EU","NA","NA",
- "AF","SA","EU","AF","AF","AF","EU","AF","EU","OC",
- "SA","OC","EU","EU","NA","AF","EU","NA","AS","SA",
- "AF","EU","NA","AF","AF","NA","AF","EU","AN","NA",
- "OC","AF","SA","AS","AN","NA","EU","NA","EU","AS",
- "EU","AS","AS","AS","AS","AS","EU","EU","NA","AS",
- "AS","AF","AS","AS","OC","AF","NA","AS","AS","AS",
- "NA","AS","AS","AS","NA","EU","AS","AF","AF","EU",
- "EU","EU","AF","AF","EU","EU","AF","OC","EU","AF",
- "AS","AS","AS","OC","NA","AF","NA","EU","AF","AS",
- "AF","NA","AS","AF","AF","OC","AF","OC","AF","NA",
- "EU","EU","AS","OC","OC","OC","AS","NA","SA","OC",
- "OC","AS","AS","EU","NA","OC","NA","AS","EU","OC",
- "SA","AS","AF","EU","EU","AF","AS","OC","AF","AF",
- "EU","AS","AF","EU","EU","EU","AF","EU","AF","AF",
- "SA","AF","NA","AS","AF","NA","AF","AN","AF","AS",
- "AS","OC","AS","AF","OC","AS","EU","NA","OC","AS",
- "AF","EU","AF","OC","NA","SA","AS","EU","NA","SA",
- "NA","NA","AS","OC","OC","OC","AS","AF","EU","AF",
- "AF","EU","AF","--","--","--","EU","EU","EU","EU",
- "NA","NA","NA", "AF", "--"
- );
+ public $GEOIP_COUNTRY_CODES3 = array(
+ "",
+ "AP",
+ "EU",
+ "AND",
+ "ARE",
+ "AFG",
+ "ATG",
+ "AIA",
+ "ALB",
+ "ARM",
+ "CUW",
+ "AGO",
+ "ATA",
+ "ARG",
+ "ASM",
+ "AUT",
+ "AUS",
+ "ABW",
+ "AZE",
+ "BIH",
+ "BRB",
+ "BGD",
+ "BEL",
+ "BFA",
+ "BGR",
+ "BHR",
+ "BDI",
+ "BEN",
+ "BMU",
+ "BRN",
+ "BOL",
+ "BRA",
+ "BHS",
+ "BTN",
+ "BVT",
+ "BWA",
+ "BLR",
+ "BLZ",
+ "CAN",
+ "CCK",
+ "COD",
+ "CAF",
+ "COG",
+ "CHE",
+ "CIV",
+ "COK",
+ "CHL",
+ "CMR",
+ "CHN",
+ "COL",
+ "CRI",
+ "CUB",
+ "CPV",
+ "CXR",
+ "CYP",
+ "CZE",
+ "DEU",
+ "DJI",
+ "DNK",
+ "DMA",
+ "DOM",
+ "DZA",
+ "ECU",
+ "EST",
+ "EGY",
+ "ESH",
+ "ERI",
+ "ESP",
+ "ETH",
+ "FIN",
+ "FJI",
+ "FLK",
+ "FSM",
+ "FRO",
+ "FRA",
+ "SXM",
+ "GAB",
+ "GBR",
+ "GRD",
+ "GEO",
+ "GUF",
+ "GHA",
+ "GIB",
+ "GRL",
+ "GMB",
+ "GIN",
+ "GLP",
+ "GNQ",
+ "GRC",
+ "SGS",
+ "GTM",
+ "GUM",
+ "GNB",
+ "GUY",
+ "HKG",
+ "HMD",
+ "HND",
+ "HRV",
+ "HTI",
+ "HUN",
+ "IDN",
+ "IRL",
+ "ISR",
+ "IND",
+ "IOT",
+ "IRQ",
+ "IRN",
+ "ISL",
+ "ITA",
+ "JAM",
+ "JOR",
+ "JPN",
+ "KEN",
+ "KGZ",
+ "KHM",
+ "KIR",
+ "COM",
+ "KNA",
+ "PRK",
+ "KOR",
+ "KWT",
+ "CYM",
+ "KAZ",
+ "LAO",
+ "LBN",
+ "LCA",
+ "LIE",
+ "LKA",
+ "LBR",
+ "LSO",
+ "LTU",
+ "LUX",
+ "LVA",
+ "LBY",
+ "MAR",
+ "MCO",
+ "MDA",
+ "MDG",
+ "MHL",
+ "MKD",
+ "MLI",
+ "MMR",
+ "MNG",
+ "MAC",
+ "MNP",
+ "MTQ",
+ "MRT",
+ "MSR",
+ "MLT",
+ "MUS",
+ "MDV",
+ "MWI",
+ "MEX",
+ "MYS",
+ "MOZ",
+ "NAM",
+ "NCL",
+ "NER",
+ "NFK",
+ "NGA",
+ "NIC",
+ "NLD",
+ "NOR",
+ "NPL",
+ "NRU",
+ "NIU",
+ "NZL",
+ "OMN",
+ "PAN",
+ "PER",
+ "PYF",
+ "PNG",
+ "PHL",
+ "PAK",
+ "POL",
+ "SPM",
+ "PCN",
+ "PRI",
+ "PSE",
+ "PRT",
+ "PLW",
+ "PRY",
+ "QAT",
+ "REU",
+ "ROU",
+ "RUS",
+ "RWA",
+ "SAU",
+ "SLB",
+ "SYC",
+ "SDN",
+ "SWE",
+ "SGP",
+ "SHN",
+ "SVN",
+ "SJM",
+ "SVK",
+ "SLE",
+ "SMR",
+ "SEN",
+ "SOM",
+ "SUR",
+ "STP",
+ "SLV",
+ "SYR",
+ "SWZ",
+ "TCA",
+ "TCD",
+ "ATF",
+ "TGO",
+ "THA",
+ "TJK",
+ "TKL",
+ "TKM",
+ "TUN",
+ "TON",
+ "TLS",
+ "TUR",
+ "TTO",
+ "TUV",
+ "TWN",
+ "TZA",
+ "UKR",
+ "UGA",
+ "UMI",
+ "USA",
+ "URY",
+ "UZB",
+ "VAT",
+ "VCT",
+ "VEN",
+ "VGB",
+ "VIR",
+ "VNM",
+ "VUT",
+ "WLF",
+ "WSM",
+ "YEM",
+ "MYT",
+ "SRB",
+ "ZAF",
+ "ZMB",
+ "MNE",
+ "ZWE",
+ "A1",
+ "A2",
+ "O1",
+ "ALA",
+ "GGY",
+ "IMN",
+ "JEY",
+ "BLM",
+ "MAF",
+ "BES",
+ "SSD",
+ "O1"
+ );
+ public $GEOIP_COUNTRY_NAMES = array(
+ "",
+ "Asia/Pacific Region",
+ "Europe",
+ "Andorra",
+ "United Arab Emirates",
+ "Afghanistan",
+ "Antigua and Barbuda",
+ "Anguilla",
+ "Albania",
+ "Armenia",
+ "Curacao",
+ "Angola",
+ "Antarctica",
+ "Argentina",
+ "American Samoa",
+ "Austria",
+ "Australia",
+ "Aruba",
+ "Azerbaijan",
+ "Bosnia and Herzegovina",
+ "Barbados",
+ "Bangladesh",
+ "Belgium",
+ "Burkina Faso",
+ "Bulgaria",
+ "Bahrain",
+ "Burundi",
+ "Benin",
+ "Bermuda",
+ "Brunei Darussalam",
+ "Bolivia",
+ "Brazil",
+ "Bahamas",
+ "Bhutan",
+ "Bouvet Island",
+ "Botswana",
+ "Belarus",
+ "Belize",
+ "Canada",
+ "Cocos (Keeling) Islands",
+ "Congo, The Democratic Republic of the",
+ "Central African Republic",
+ "Congo",
+ "Switzerland",
+ "Cote D'Ivoire",
+ "Cook Islands",
+ "Chile",
+ "Cameroon",
+ "China",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Cape Verde",
+ "Christmas Island",
+ "Cyprus",
+ "Czech Republic",
+ "Germany",
+ "Djibouti",
+ "Denmark",
+ "Dominica",
+ "Dominican Republic",
+ "Algeria",
+ "Ecuador",
+ "Estonia",
+ "Egypt",
+ "Western Sahara",
+ "Eritrea",
+ "Spain",
+ "Ethiopia",
+ "Finland",
+ "Fiji",
+ "Falkland Islands (Malvinas)",
+ "Micronesia, Federated States of",
+ "Faroe Islands",
+ "France",
+ "Sint Maarten (Dutch part)",
+ "Gabon",
+ "United Kingdom",
+ "Grenada",
+ "Georgia",
+ "French Guiana",
+ "Ghana",
+ "Gibraltar",
+ "Greenland",
+ "Gambia",
+ "Guinea",
+ "Guadeloupe",
+ "Equatorial Guinea",
+ "Greece",
+ "South Georgia and the South Sandwich Islands",
+ "Guatemala",
+ "Guam",
+ "Guinea-Bissau",
+ "Guyana",
+ "Hong Kong",
+ "Heard Island and McDonald Islands",
+ "Honduras",
+ "Croatia",
+ "Haiti",
+ "Hungary",
+ "Indonesia",
+ "Ireland",
+ "Israel",
+ "India",
+ "British Indian Ocean Territory",
+ "Iraq",
+ "Iran, Islamic Republic of",
+ "Iceland",
+ "Italy",
+ "Jamaica",
+ "Jordan",
+ "Japan",
+ "Kenya",
+ "Kyrgyzstan",
+ "Cambodia",
+ "Kiribati",
+ "Comoros",
+ "Saint Kitts and Nevis",
+ "Korea, Democratic People's Republic of",
+ "Korea, Republic of",
+ "Kuwait",
+ "Cayman Islands",
+ "Kazakhstan",
+ "Lao People's Democratic Republic",
+ "Lebanon",
+ "Saint Lucia",
+ "Liechtenstein",
+ "Sri Lanka",
+ "Liberia",
+ "Lesotho",
+ "Lithuania",
+ "Luxembourg",
+ "Latvia",
+ "Libya",
+ "Morocco",
+ "Monaco",
+ "Moldova, Republic of",
+ "Madagascar",
+ "Marshall Islands",
+ "Macedonia",
+ "Mali",
+ "Myanmar",
+ "Mongolia",
+ "Macau",
+ "Northern Mariana Islands",
+ "Martinique",
+ "Mauritania",
+ "Montserrat",
+ "Malta",
+ "Mauritius",
+ "Maldives",
+ "Malawi",
+ "Mexico",
+ "Malaysia",
+ "Mozambique",
+ "Namibia",
+ "New Caledonia",
+ "Niger",
+ "Norfolk Island",
+ "Nigeria",
+ "Nicaragua",
+ "Netherlands",
+ "Norway",
+ "Nepal",
+ "Nauru",
+ "Niue",
+ "New Zealand",
+ "Oman",
+ "Panama",
+ "Peru",
+ "French Polynesia",
+ "Papua New Guinea",
+ "Philippines",
+ "Pakistan",
+ "Poland",
+ "Saint Pierre and Miquelon",
+ "Pitcairn Islands",
+ "Puerto Rico",
+ "Palestinian Territory",
+ "Portugal",
+ "Palau",
+ "Paraguay",
+ "Qatar",
+ "Reunion",
+ "Romania",
+ "Russian Federation",
+ "Rwanda",
+ "Saudi Arabia",
+ "Solomon Islands",
+ "Seychelles",
+ "Sudan",
+ "Sweden",
+ "Singapore",
+ "Saint Helena",
+ "Slovenia",
+ "Svalbard and Jan Mayen",
+ "Slovakia",
+ "Sierra Leone",
+ "San Marino",
+ "Senegal",
+ "Somalia",
+ "Suriname",
+ "Sao Tome and Principe",
+ "El Salvador",
+ "Syrian Arab Republic",
+ "Swaziland",
+ "Turks and Caicos Islands",
+ "Chad",
+ "French Southern Territories",
+ "Togo",
+ "Thailand",
+ "Tajikistan",
+ "Tokelau",
+ "Turkmenistan",
+ "Tunisia",
+ "Tonga",
+ "Timor-Leste",
+ "Turkey",
+ "Trinidad and Tobago",
+ "Tuvalu",
+ "Taiwan",
+ "Tanzania, United Republic of",
+ "Ukraine",
+ "Uganda",
+ "United States Minor Outlying Islands",
+ "United States",
+ "Uruguay",
+ "Uzbekistan",
+ "Holy See (Vatican City State)",
+ "Saint Vincent and the Grenadines",
+ "Venezuela",
+ "Virgin Islands, British",
+ "Virgin Islands, U.S.",
+ "Vietnam",
+ "Vanuatu",
+ "Wallis and Futuna",
+ "Samoa",
+ "Yemen",
+ "Mayotte",
+ "Serbia",
+ "South Africa",
+ "Zambia",
+ "Montenegro",
+ "Zimbabwe",
+ "Anonymous Proxy",
+ "Satellite Provider",
+ "Other",
+ "Aland Islands",
+ "Guernsey",
+ "Isle of Man",
+ "Jersey",
+ "Saint Barthelemy",
+ "Saint Martin",
+ "Bonaire, Saint Eustatius and Saba",
+ "South Sudan",
+ "Other"
+ );
+
+ public $GEOIP_CONTINENT_CODES = array(
+ "--",
+ "AS",
+ "EU",
+ "EU",
+ "AS",
+ "AS",
+ "NA",
+ "NA",
+ "EU",
+ "AS",
+ "NA",
+ "AF",
+ "AN",
+ "SA",
+ "OC",
+ "EU",
+ "OC",
+ "NA",
+ "AS",
+ "EU",
+ "NA",
+ "AS",
+ "EU",
+ "AF",
+ "EU",
+ "AS",
+ "AF",
+ "AF",
+ "NA",
+ "AS",
+ "SA",
+ "SA",
+ "NA",
+ "AS",
+ "AN",
+ "AF",
+ "EU",
+ "NA",
+ "NA",
+ "AS",
+ "AF",
+ "AF",
+ "AF",
+ "EU",
+ "AF",
+ "OC",
+ "SA",
+ "AF",
+ "AS",
+ "SA",
+ "NA",
+ "NA",
+ "AF",
+ "AS",
+ "AS",
+ "EU",
+ "EU",
+ "AF",
+ "EU",
+ "NA",
+ "NA",
+ "AF",
+ "SA",
+ "EU",
+ "AF",
+ "AF",
+ "AF",
+ "EU",
+ "AF",
+ "EU",
+ "OC",
+ "SA",
+ "OC",
+ "EU",
+ "EU",
+ "NA",
+ "AF",
+ "EU",
+ "NA",
+ "AS",
+ "SA",
+ "AF",
+ "EU",
+ "NA",
+ "AF",
+ "AF",
+ "NA",
+ "AF",
+ "EU",
+ "AN",
+ "NA",
+ "OC",
+ "AF",
+ "SA",
+ "AS",
+ "AN",
+ "NA",
+ "EU",
+ "NA",
+ "EU",
+ "AS",
+ "EU",
+ "AS",
+ "AS",
+ "AS",
+ "AS",
+ "AS",
+ "EU",
+ "EU",
+ "NA",
+ "AS",
+ "AS",
+ "AF",
+ "AS",
+ "AS",
+ "OC",
+ "AF",
+ "NA",
+ "AS",
+ "AS",
+ "AS",
+ "NA",
+ "AS",
+ "AS",
+ "AS",
+ "NA",
+ "EU",
+ "AS",
+ "AF",
+ "AF",
+ "EU",
+ "EU",
+ "EU",
+ "AF",
+ "AF",
+ "EU",
+ "EU",
+ "AF",
+ "OC",
+ "EU",
+ "AF",
+ "AS",
+ "AS",
+ "AS",
+ "OC",
+ "NA",
+ "AF",
+ "NA",
+ "EU",
+ "AF",
+ "AS",
+ "AF",
+ "NA",
+ "AS",
+ "AF",
+ "AF",
+ "OC",
+ "AF",
+ "OC",
+ "AF",
+ "NA",
+ "EU",
+ "EU",
+ "AS",
+ "OC",
+ "OC",
+ "OC",
+ "AS",
+ "NA",
+ "SA",
+ "OC",
+ "OC",
+ "AS",
+ "AS",
+ "EU",
+ "NA",
+ "OC",
+ "NA",
+ "AS",
+ "EU",
+ "OC",
+ "SA",
+ "AS",
+ "AF",
+ "EU",
+ "EU",
+ "AF",
+ "AS",
+ "OC",
+ "AF",
+ "AF",
+ "EU",
+ "AS",
+ "AF",
+ "EU",
+ "EU",
+ "EU",
+ "AF",
+ "EU",
+ "AF",
+ "AF",
+ "SA",
+ "AF",
+ "NA",
+ "AS",
+ "AF",
+ "NA",
+ "AF",
+ "AN",
+ "AF",
+ "AS",
+ "AS",
+ "OC",
+ "AS",
+ "AF",
+ "OC",
+ "AS",
+ "EU",
+ "NA",
+ "OC",
+ "AS",
+ "AF",
+ "EU",
+ "AF",
+ "OC",
+ "NA",
+ "SA",
+ "AS",
+ "EU",
+ "NA",
+ "SA",
+ "NA",
+ "NA",
+ "AS",
+ "OC",
+ "OC",
+ "OC",
+ "AS",
+ "AF",
+ "EU",
+ "AF",
+ "AF",
+ "EU",
+ "AF",
+ "--",
+ "--",
+ "--",
+ "EU",
+ "EU",
+ "EU",
+ "EU",
+ "NA",
+ "NA",
+ "NA",
+ "AF",
+ "--"
+ );
}
-function geoip_load_shared_mem ($file) {
+function geoip_load_shared_mem($file)
+{
$fp = fopen($file, "rb");
if (!$fp) {
- print "error opening $file: $php_errormsg\n";
- exit;
+ print "error opening $file: $php_errormsg\n";
+ exit;
}
$s_array = fstat($fp);
$size = $s_array['size'];
- if ($shmid = @shmop_open (GEOIP_SHM_KEY, "w", 0, 0)) {
- shmop_delete ($shmid);
- shmop_close ($shmid);
+ if (($shmid = @shmop_open(GEOIP_SHM_KEY, "w", 0, 0))) {
+ shmop_delete($shmid);
+ shmop_close($shmid);
}
- $shmid = shmop_open (GEOIP_SHM_KEY, "c", 0644, $size);
- shmop_write ($shmid, fread($fp, $size), 0);
- shmop_close ($shmid);
+ $shmid = shmop_open(GEOIP_SHM_KEY, "c", 0644, $size);
+ shmop_write($shmid, fread($fp, $size), 0);
+ shmop_close($shmid);
}
-function _setup_segments($gi){
+function _setup_segments($gi)
+{
$gi->databaseType = GEOIP_COUNTRY_EDITION;
$gi->record_length = STANDARD_RECORD_LENGTH;
if ($gi->flags & GEOIP_SHARED_MEMORY) {
- $offset = @shmop_size ($gi->shmid) - 3;
- for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
- $delim = @shmop_read ($gi->shmid, $offset, 3);
- $offset += 3;
- if ($delim == (chr(255).chr(255).chr(255))) {
- $gi->databaseType = ord(@shmop_read ($gi->shmid, $offset, 1));
- if ( $gi->databaseType >= 106 ){
- $gi->databaseType -= 105;
- }
- $offset++;
+ $offset = @shmop_size($gi->shmid) - 3;
+ for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
+ $delim = @shmop_read($gi->shmid, $offset, 3);
+ $offset += 3;
+ if ($delim == (chr(255) . chr(255) . chr(255))) {
+ $gi->databaseType = ord(@shmop_read($gi->shmid, $offset, 1));
+ if ($gi->databaseType >= 106) {
+ $gi->databaseType -= 105;
+ }
+ $offset++;
- if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
- $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
- } else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
- $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
- } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)||
- ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
- || ($gi->databaseType == GEOIP_ORG_EDITION)
- || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
- || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
- || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
- || ($gi->databaseType == GEOIP_ISP_EDITION)
- || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
- || ($gi->databaseType == GEOIP_USERTYPE_EDITION)
- || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
- || ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
- || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
- || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
- || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
- || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
- || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
- || ($gi->databaseType == GEOIP_ASNUM_EDITION)
- || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)){
- $gi->databaseSegments = 0;
- $buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
- for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
- $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
- }
- if (($gi->databaseType == GEOIP_ORG_EDITION)
- || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
- || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
- || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
- || ($gi->databaseType == GEOIP_ISP_EDITION)
- || ($gi->databaseType == GEOIP_ISP_EDITION_V6)) {
- $gi->record_length = ORG_RECORD_LENGTH;
- }
- }
- break;
- } else {
- $offset -= 4;
- }
- }
- if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
- ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6)||
- ($gi->databaseType == GEOIP_PROXY_EDITION)||
- ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
- $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
- }
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0) {
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
+ } elseif ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
+ } elseif (($gi->databaseType == GEOIP_CITY_EDITION_REV0)
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
+ || ($gi->databaseType == GEOIP_ORG_EDITION)
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION)
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
+ || ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
+ || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION)
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)
+ ) {
+ $gi->databaseSegments = 0;
+ $buf = @shmop_read($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
+ for ($j = 0; $j < SEGMENT_RECORD_LENGTH; $j++) {
+ $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
+ }
+ if (($gi->databaseType == GEOIP_ORG_EDITION)
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
+ ) {
+ $gi->record_length = ORG_RECORD_LENGTH;
+ }
+ }
+ break;
+ } else {
+ $offset -= 4;
+ }
+ }
+ if (($gi->databaseType == GEOIP_COUNTRY_EDITION) ||
+ ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6) ||
+ ($gi->databaseType == GEOIP_PROXY_EDITION) ||
+ ($gi->databaseType == GEOIP_NETSPEED_EDITION)
+ ) {
+ $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
+ }
} else {
- $filepos = ftell($gi->filehandle);
- fseek($gi->filehandle, -3, SEEK_END);
- for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
- $delim = fread($gi->filehandle,3);
- if ($delim == (chr(255).chr(255).chr(255))){
- $gi->databaseType = ord(fread($gi->filehandle,1));
- if ( $gi->databaseType >= 106 ){
- $gi->databaseType -= 105;
- }
- if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
- $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
- }
- else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
- $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
- } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)
- || ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
- || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
- || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
- || ($gi->databaseType == GEOIP_ORG_EDITION)
- || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
- || ($gi->databaseType == GEOIP_ISP_EDITION)
- || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
- || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
- || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
- || ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
- || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
- || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
- || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
- || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
- || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
- || ($gi->databaseType == GEOIP_USERTYPE_EDITION)
- || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
- || ($gi->databaseType == GEOIP_ASNUM_EDITION)
- || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)){
- $gi->databaseSegments = 0;
- $buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);
- for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
- $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
- }
- if ( ( $gi->databaseType == GEOIP_ORG_EDITION )
- || ( $gi->databaseType == GEOIP_DOMAIN_EDITION )
- || ( $gi->databaseType == GEOIP_ISP_EDITION )
- || ( $gi->databaseType == GEOIP_ORG_EDITION_V6 )
- || ( $gi->databaseType == GEOIP_DOMAIN_EDITION_V6 )
- || ( $gi->databaseType == GEOIP_ISP_EDITION_V6 )) {
- $gi->record_length = ORG_RECORD_LENGTH;
- }
- }
- break;
- } else {
- fseek($gi->filehandle, -4, SEEK_CUR);
- }
- }
- if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
- ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6)||
- ($gi->databaseType == GEOIP_PROXY_EDITION)||
- ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
- $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
- }
- fseek($gi->filehandle,$filepos,SEEK_SET);
+ $filepos = ftell($gi->filehandle);
+ fseek($gi->filehandle, -3, SEEK_END);
+ for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
+ $delim = fread($gi->filehandle, 3);
+ if ($delim == (chr(255) . chr(255) . chr(255))) {
+ $gi->databaseType = ord(fread($gi->filehandle, 1));
+ if ($gi->databaseType >= 106) {
+ $gi->databaseType -= 105;
+ }
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0) {
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
+ } elseif ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
+ } elseif (($gi->databaseType == GEOIP_CITY_EDITION_REV0)
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
+ || ($gi->databaseType == GEOIP_ORG_EDITION)
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
+ || ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
+ || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION)
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION)
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)
+ ) {
+ $gi->databaseSegments = 0;
+ $buf = fread($gi->filehandle, SEGMENT_RECORD_LENGTH);
+ for ($j = 0; $j < SEGMENT_RECORD_LENGTH; $j++) {
+ $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
+ }
+ if (($gi->databaseType == GEOIP_ORG_EDITION)
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
+ ) {
+ $gi->record_length = ORG_RECORD_LENGTH;
+ }
+ }
+ break;
+ } else {
+ fseek($gi->filehandle, -4, SEEK_CUR);
+ }
+ }
+ if (($gi->databaseType == GEOIP_COUNTRY_EDITION) ||
+ ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6) ||
+ ($gi->databaseType == GEOIP_PROXY_EDITION) ||
+ ($gi->databaseType == GEOIP_NETSPEED_EDITION)
+ ) {
+ $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
+ }
+ fseek($gi->filehandle, $filepos, SEEK_SET);
}
return $gi;
}
-function geoip_open($filename, $flags) {
+function geoip_open($filename, $flags)
+{
$gi = new GeoIP;
$gi->flags = $flags;
if ($gi->flags & GEOIP_SHARED_MEMORY) {
- $gi->shmid = @shmop_open (GEOIP_SHM_KEY, "a", 0, 0);
+ $gi->shmid = @shmop_open(GEOIP_SHM_KEY, "a", 0, 0);
} else {
- $gi->filehandle = fopen($filename,"rb") or die( "Can not open $filename\n" );
- if ($gi->flags & GEOIP_MEMORY_CACHE) {
- $s_array = fstat($gi->filehandle);
- $gi->memory_buffer = fread($gi->filehandle, $s_array['size']);
- }
+ $gi->filehandle = fopen($filename, "rb") or die("Can not open $filename\n");
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
+ $s_array = fstat($gi->filehandle);
+ $gi->memory_buffer = fread($gi->filehandle, $s_array['size']);
+ }
}
$gi = _setup_segments($gi);
return $gi;
}
-function geoip_close($gi) {
+function geoip_close($gi)
+{
if ($gi->flags & GEOIP_SHARED_MEMORY) {
- return true;
+ return true;
}
return fclose($gi->filehandle);
}
-function geoip_country_id_by_name_v6($gi, $name) {
+function geoip_country_id_by_name_v6($gi, $name)
+{
$rec = dns_get_record($name, DNS_AAAA);
- if ( !$rec ) {
- return false;
+ if (!$rec) {
+ return false;
}
$addr = $rec[0]["ipv6"];
if (!$addr || $addr == $name) {
- return false;
+ return false;
}
return geoip_country_id_by_addr_v6($gi, $addr);
}
-function geoip_country_id_by_name($gi, $name) {
+function geoip_country_id_by_name($gi, $name)
+{
$addr = gethostbyname($name);
if (!$addr || $addr == $name) {
- return false;
+ return false;
}
return geoip_country_id_by_addr($gi, $addr);
}
-function geoip_country_code_by_name_v6($gi, $name) {
- $country_id = geoip_country_id_by_name_v6($gi,$name);
+function geoip_country_code_by_name_v6($gi, $name)
+{
+ $country_id = geoip_country_id_by_name_v6($gi, $name);
if ($country_id !== false) {
- return $gi->GEOIP_COUNTRY_CODES[$country_id];
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
}
return false;
}
-function geoip_country_code_by_name($gi, $name) {
- $country_id = geoip_country_id_by_name($gi,$name);
+function geoip_country_code_by_name($gi, $name)
+{
+ $country_id = geoip_country_id_by_name($gi, $name);
if ($country_id !== false) {
- return $gi->GEOIP_COUNTRY_CODES[$country_id];
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
}
return false;
}
-function geoip_country_name_by_name_v6($gi, $name) {
- $country_id = geoip_country_id_by_name_v6($gi,$name);
+function geoip_country_name_by_name_v6($gi, $name)
+{
+ $country_id = geoip_country_id_by_name_v6($gi, $name);
if ($country_id !== false) {
- return $gi->GEOIP_COUNTRY_NAMES[$country_id];
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
}
return false;
}
-function geoip_country_name_by_name($gi, $name) {
- $country_id = geoip_country_id_by_name($gi,$name);
+function geoip_country_name_by_name($gi, $name)
+{
+ $country_id = geoip_country_id_by_name($gi, $name);
if ($country_id !== false) {
- return $gi->GEOIP_COUNTRY_NAMES[$country_id];
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
}
return false;
}
-function geoip_country_id_by_addr_v6($gi, $addr) {
+function geoip_country_id_by_addr_v6($gi, $addr)
+{
$ipnum = inet_pton($addr);
return _geoip_seek_country_v6($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
}
-function geoip_country_id_by_addr($gi, $addr) {
+function geoip_country_id_by_addr($gi, $addr)
+{
$ipnum = ip2long($addr);
return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
}
-function geoip_country_code_by_addr_v6($gi, $addr) {
- $country_id = geoip_country_id_by_addr_v6($gi,$addr);
+function geoip_country_code_by_addr_v6($gi, $addr)
+{
+ $country_id = geoip_country_id_by_addr_v6($gi, $addr);
if ($country_id !== false) {
- return $gi->GEOIP_COUNTRY_CODES[$country_id];
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
}
return false;
}
-function geoip_country_code_by_addr($gi, $addr) {
+function geoip_country_code_by_addr($gi, $addr)
+{
if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
- $record = geoip_record_by_addr($gi,$addr);
- if ( $record !== false ) {
- return $record->country_code;
- }
+ $record = geoip_record_by_addr($gi, $addr);
+ if ($record !== false) {
+ return $record->country_code;
+ }
} else {
- $country_id = geoip_country_id_by_addr($gi,$addr);
- if ($country_id !== false) {
- return $gi->GEOIP_COUNTRY_CODES[$country_id];
- }
+ $country_id = geoip_country_id_by_addr($gi, $addr);
+ if ($country_id !== false) {
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
+ }
}
return false;
}
-function geoip_country_name_by_addr_v6($gi, $addr) {
- $country_id = geoip_country_id_by_addr_v6($gi,$addr);
+function geoip_country_name_by_addr_v6($gi, $addr)
+{
+ $country_id = geoip_country_id_by_addr_v6($gi, $addr);
if ($country_id !== false) {
- return $gi->GEOIP_COUNTRY_NAMES[$country_id];
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
}
return false;
}
-function geoip_country_name_by_addr($gi, $addr) {
+function geoip_country_name_by_addr($gi, $addr)
+{
if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
- $record = geoip_record_by_addr($gi,$addr);
- return $record->country_name;
+ $record = geoip_record_by_addr($gi, $addr);
+ return $record->country_name;
} else {
- $country_id = geoip_country_id_by_addr($gi,$addr);
- if ($country_id !== false) {
- return $gi->GEOIP_COUNTRY_NAMES[$country_id];
- }
+ $country_id = geoip_country_id_by_addr($gi, $addr);
+ if ($country_id !== false) {
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
+ }
}
return false;
}
-function _geoip_seek_country_v6($gi, $ipnum) {
-
-# arrays from unpack start with offset 1
-# yet another php mystery. array_merge work around
-# this broken behaviour
- $v6vec = array_merge(unpack( "C16", $ipnum));
+function _geoip_seek_country_v6($gi, $ipnum)
+{
+ # arrays from unpack start with offset 1
+ # yet another php mystery. array_merge work around
+ # this broken behaviour
+ $v6vec = array_merge(unpack("C16", $ipnum));
$offset = 0;
for ($depth = 127; $depth >= 0; --$depth) {
- if ($gi->flags & GEOIP_MEMORY_CACHE) {
- // workaround php's broken substr, strpos, etc handling with
- // mbstring.func_overload and mbstring.internal_encoding
- $enc = mb_internal_encoding();
- mb_internal_encoding('ISO-8859-1');
-
- $buf = substr($gi->memory_buffer,
- 2 * $gi->record_length * $offset,
- 2 * $gi->record_length);
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
+ $buf = _safe_substr(
+ $gi->memory_buffer,
+ 2 * $gi->record_length * $offset,
+ 2 * $gi->record_length
+ );
+ } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
+ $buf = @shmop_read(
+ $gi->shmid,
+ 2 * $gi->record_length * $offset,
+ 2 * $gi->record_length
+ );
+ } else {
+ fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
+ or die("fseek failed");
+ $buf = fread($gi->filehandle, 2 * $gi->record_length);
+ }
+ $x = array(0, 0);
+ for ($i = 0; $i < 2; ++$i) {
+ for ($j = 0; $j < $gi->record_length; ++$j) {
+ $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
+ }
+ }
- mb_internal_encoding($enc);
- } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
- $buf = @shmop_read ($gi->shmid,
- 2 * $gi->record_length * $offset,
- 2 * $gi->record_length );
- } else {
- fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
- or die("fseek failed");
- $buf = fread($gi->filehandle, 2 * $gi->record_length);
- }
- $x = array(0,0);
- for ($i = 0; $i < 2; ++$i) {
- for ($j = 0; $j < $gi->record_length; ++$j) {
- $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
- }
- }
-
- $bnum = 127 - $depth;
- $idx = $bnum >> 3;
- $b_mask = 1 << ( $bnum & 7 ^ 7 );
- if (($v6vec[$idx] & $b_mask) > 0) {
- if ($x[1] >= $gi->databaseSegments) {
- return $x[1];
- }
- $offset = $x[1];
- } else {
- if ($x[0] >= $gi->databaseSegments) {
- return $x[0];
- }
- $offset = $x[0];
- }
+ $bnum = 127 - $depth;
+ $idx = $bnum >> 3;
+ $b_mask = 1 << ($bnum & 7 ^ 7);
+ if (($v6vec[$idx] & $b_mask) > 0) {
+ if ($x[1] >= $gi->databaseSegments) {
+ return $x[1];
+ }
+ $offset = $x[1];
+ } else {
+ if ($x[0] >= $gi->databaseSegments) {
+ return $x[0];
+ }
+ $offset = $x[0];
+ }
}
trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
return false;
}
-function _geoip_seek_country($gi, $ipnum) {
+function _geoip_seek_country($gi, $ipnum)
+{
$offset = 0;
for ($depth = 31; $depth >= 0; --$depth) {
- if ($gi->flags & GEOIP_MEMORY_CACHE) {
- // workaround php's broken substr, strpos, etc handling with
- // mbstring.func_overload and mbstring.internal_encoding
- $enc = mb_internal_encoding();
- mb_internal_encoding('ISO-8859-1');
-
- $buf = substr($gi->memory_buffer,
- 2 * $gi->record_length * $offset,
- 2 * $gi->record_length);
-
- mb_internal_encoding($enc);
- } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
- $buf = @shmop_read ($gi->shmid,
- 2 * $gi->record_length * $offset,
- 2 * $gi->record_length );
- } else {
- fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
- or die("fseek failed");
- $buf = fread($gi->filehandle, 2 * $gi->record_length);
- }
- $x = array(0,0);
- for ($i = 0; $i < 2; ++$i) {
- for ($j = 0; $j < $gi->record_length; ++$j) {
- $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
- }
- }
- if ($ipnum & (1 << $depth)) {
- if ($x[1] >= $gi->databaseSegments) {
- return $x[1];
- }
- $offset = $x[1];
- } else {
- if ($x[0] >= $gi->databaseSegments) {
- return $x[0];
- }
- $offset = $x[0];
- }
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
+ $buf = _safe_substr(
+ $gi->memory_buffer,
+ 2 * $gi->record_length * $offset,
+ 2 * $gi->record_length
+ );
+ } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
+ $buf = @shmop_read(
+ $gi->shmid,
+ 2 * $gi->record_length * $offset,
+ 2 * $gi->record_length
+ );
+ } else {
+ fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
+ or die("fseek failed");
+ $buf = fread($gi->filehandle, 2 * $gi->record_length);
+ }
+ $x = array(0, 0);
+ for ($i = 0; $i < 2; ++$i) {
+ for ($j = 0; $j < $gi->record_length; ++$j) {
+ $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
+ }
+ }
+ if ($ipnum & (1 << $depth)) {
+ if ($x[1] >= $gi->databaseSegments) {
+ return $x[1];
+ }
+ $offset = $x[1];
+ } else {
+ if ($x[0] >= $gi->databaseSegments) {
+ return $x[0];
+ }
+ $offset = $x[0];
+ }
}
trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
return false;
}
-function _common_get_org($gi, $seek_org){
+function _common_get_org($gi, $seek_org)
+{
$record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;
if ($gi->flags & GEOIP_SHARED_MEMORY) {
- $org_buf = @shmop_read ($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);
+ $org_buf = @shmop_read($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);
} else {
- fseek($gi->filehandle, $record_pointer, SEEK_SET);
- $org_buf = fread($gi->filehandle,MAX_ORG_RECORD_LENGTH);
+ fseek($gi->filehandle, $record_pointer, SEEK_SET);
+ $org_buf = fread($gi->filehandle, MAX_ORG_RECORD_LENGTH);
}
- // workaround php's broken substr, strpos, etc handling with
- // mbstring.func_overload and mbstring.internal_encoding
- $enc = mb_internal_encoding();
- mb_internal_encoding('ISO-8859-1');
- $org_buf = substr($org_buf, 0, strpos($org_buf, "\0"));
- mb_internal_encoding($enc);
+ $org_buf = _safe_substr($org_buf, 0, strpos($org_buf, "\0"));
return $org_buf;
}
-function _get_org_v6($gi,$ipnum){
- $seek_org = _geoip_seek_country_v6($gi,$ipnum);
+function _get_org_v6($gi, $ipnum)
+{
+ $seek_org = _geoip_seek_country_v6($gi, $ipnum);
if ($seek_org == $gi->databaseSegments) {
- return NULL;
+ return null;
}
return _common_get_org($gi, $seek_org);
}
-function _get_org($gi,$ipnum){
- $seek_org = _geoip_seek_country($gi,$ipnum);
+function _get_org($gi, $ipnum)
+{
+ $seek_org = _geoip_seek_country($gi, $ipnum);
if ($seek_org == $gi->databaseSegments) {
- return NULL;
+ return null;
}
return _common_get_org($gi, $seek_org);
}
-
-function geoip_name_by_addr_v6 ($gi,$addr) {
- if ($addr == NULL) {
- return 0;
+function geoip_name_by_addr_v6($gi, $addr)
+{
+ if ($addr == null) {
+ return 0;
}
$ipnum = inet_pton($addr);
return _get_org_v6($gi, $ipnum);
}
-function geoip_name_by_addr ($gi,$addr) {
- if ($addr == NULL) {
- return 0;
+function geoip_name_by_addr($gi, $addr)
+{
+ if ($addr == null) {
+ return 0;
}
$ipnum = ip2long($addr);
return _get_org($gi, $ipnum);
}
-function geoip_org_by_addr ($gi,$addr) {
+function geoip_org_by_addr($gi, $addr)
+{
return geoip_name_by_addr($gi, $addr);
}
-function _get_region($gi,$ipnum){
- if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
- $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0;
- if ($seek_region >= 1000){
- $country_code = "US";
- $region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65);
- } else {
- $country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];
- $region = "";
- }
- return array ($country_code,$region);
- } else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
- $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV1;
- //print $seek_region;
- if ($seek_region < US_OFFSET){
- $country_code = "";
- $region = "";
- } else if ($seek_region < CANADA_OFFSET) {
- $country_code = "US";
- $region = chr(($seek_region - US_OFFSET)/26 + 65) . chr(($seek_region - US_OFFSET)%26 + 65);
- } else if ($seek_region < WORLD_OFFSET) {
- $country_code = "CA";
- $region = chr(($seek_region - CANADA_OFFSET)/26 + 65) . chr(($seek_region - CANADA_OFFSET)%26 + 65);
- } else {
- $country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];
- $region = "";
- }
- return array ($country_code,$region);
+function _get_region($gi, $ipnum)
+{
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0) {
+ $seek_region = _geoip_seek_country($gi, $ipnum) - GEOIP_STATE_BEGIN_REV0;
+ if ($seek_region >= 1000) {
+ $country_code = "US";
+ $region = chr(($seek_region - 1000) / 26 + 65) . chr(($seek_region - 1000) % 26 + 65);
+ } else {
+ $country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];
+ $region = "";
+ }
+ return array($country_code, $region);
+ } elseif ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
+ $seek_region = _geoip_seek_country($gi, $ipnum) - GEOIP_STATE_BEGIN_REV1;
+ if ($seek_region < US_OFFSET) {
+ $country_code = "";
+ $region = "";
+ } elseif ($seek_region < CANADA_OFFSET) {
+ $country_code = "US";
+ $region = chr(($seek_region - US_OFFSET) / 26 + 65) . chr(($seek_region - US_OFFSET) % 26 + 65);
+ } elseif ($seek_region < WORLD_OFFSET) {
+ $country_code = "CA";
+ $region = chr(($seek_region - CANADA_OFFSET) / 26 + 65) . chr(($seek_region - CANADA_OFFSET) % 26 + 65);
+ } else {
+ $country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];
+ $region = "";
+ }
+ return array($country_code, $region);
}
}
-function geoip_region_by_addr ($gi,$addr) {
- if ($addr == NULL) {
- return 0;
+function geoip_region_by_addr($gi, $addr)
+{
+ if ($addr == null) {
+ return 0;
}
$ipnum = ip2long($addr);
return _get_region($gi, $ipnum);
}
-function getdnsattributes ($l,$ip){
- $r = new Net_DNS_Resolver();
- $r->nameservers = array("ws1.maxmind.com");
- $p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN");
- $str = is_object($p->answer[0])?$p->answer[0]->string():'';
- $str = substr( $str, 1, -1 );
- return $str;
-}
+function _safe_substr($string, $start, $length)
+{
+ // workaround php's broken substr, strpos, etc handling with
+ // mbstring.func_overload and mbstring.internal_encoding
+ $mbExists = extension_loaded('mbstring');
+
+ if ($mbExists) {
+ $enc = mb_internal_encoding();
+ mb_internal_encoding('ISO-8859-1');
+ }
-?>
+ $buf = substr($string, $start, $length);
+
+ if ($mbExists) {
+ mb_internal_encoding($enc);
+ }
+
+ return $buf;
+}