[-] Core : maxmind geoip API was outdated #PSCFV-5941

This commit is contained in:
Damien Metzger
2012-12-14 15:29:35 +01:00
parent 2b06e54e78
commit 3fd4fd6f70
3 changed files with 768 additions and 564 deletions
+388 -205
View File
@@ -20,84 +20,106 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
/* PrestaShop /*
Test if functions and defines are already defined * Hack PrestaShop because some users may use mod_geoip with this lib and it will cause a crash
END
*/ */
if (!defined('GEOIP_COUNTRY_BEGIN')) if (!defined("GEOIP_COUNTRY_BEGIN"))
define("GEOIP_COUNTRY_BEGIN", 16776960); define("GEOIP_COUNTRY_BEGIN", 16776960);
if (!defined('GEOIP_STATE_BEGIN_REV0')) if (!defined("GEOIP_STATE_BEGIN_REV0"))
define("GEOIP_STATE_BEGIN_REV0", 16700000); define("GEOIP_STATE_BEGIN_REV0", 16700000);
if (!defined('GEOIP_STATE_BEGIN_REV1')) if (!defined("GEOIP_STATE_BEGIN_REV1"))
define("GEOIP_STATE_BEGIN_REV1", 16000000); define("GEOIP_STATE_BEGIN_REV1", 16000000);
if (!defined('GEOIP_STANDARD')) if (!defined("GEOIP_STANDARD"))
define("GEOIP_STANDARD", 0); define("GEOIP_STANDARD", 0);
if (!defined('GEOIP_MEMORY_CACHE')) if (!defined("GEOIP_MEMORY_CACHE"))
define("GEOIP_MEMORY_CACHE", 1); define("GEOIP_MEMORY_CACHE", 1);
if (!defined('GEOIP_SHARED_MEMORY')) if (!defined("GEOIP_SHARED_MEMORY"))
define("GEOIP_SHARED_MEMORY", 2); define("GEOIP_SHARED_MEMORY", 2);
if (!defined('STRUCTURE_INFO_MAX_SIZE')) if (!defined("STRUCTURE_INFO_MAX_SIZE"))
define("STRUCTURE_INFO_MAX_SIZE", 20); define("STRUCTURE_INFO_MAX_SIZE", 20);
if (!defined('DATABASE_INFO_MAX_SIZE')) if (!defined("DATABASE_INFO_MAX_SIZE"))
define("DATABASE_INFO_MAX_SIZE", 100); define("DATABASE_INFO_MAX_SIZE", 100);
if (!defined('GEOIP_COUNTRY_EDITION')) if (!defined("GEOIP_COUNTRY_EDITION"))
define("GEOIP_COUNTRY_EDITION", 106); define("GEOIP_COUNTRY_EDITION", 106);
if (!defined('GEOIP_PROXY_EDITION')) if (!defined("GEOIP_PROXY_EDITION"))
define("GEOIP_PROXY_EDITION", 8); define("GEOIP_PROXY_EDITION", 8);
if (!defined('GEOIP_ASNUM_EDITION')) if (!defined("GEOIP_ASNUM_EDITION"))
define("GEOIP_ASNUM_EDITION", 9); define("GEOIP_ASNUM_EDITION", 9);
if (!defined('GEOIP_NETSPEED_EDITION')) if (!defined("GEOIP_NETSPEED_EDITION"))
define("GEOIP_NETSPEED_EDITION", 10); define("GEOIP_NETSPEED_EDITION", 10);
if (!defined('GEOIP_REGION_EDITION_REV0')) if (!defined("GEOIP_REGION_EDITION_REV0"))
define("GEOIP_REGION_EDITION_REV0", 112); define("GEOIP_REGION_EDITION_REV0", 112);
if (!defined('GEOIP_REGION_EDITION_REV1')) if (!defined("GEOIP_REGION_EDITION_REV1"))
define("GEOIP_REGION_EDITION_REV1", 3); define("GEOIP_REGION_EDITION_REV1", 3);
if (!defined('GEOIP_CITY_EDITION_REV0')) if (!defined("GEOIP_CITY_EDITION_REV0"))
define("GEOIP_CITY_EDITION_REV0", 111); define("GEOIP_CITY_EDITION_REV0", 111);
if (!defined('GEOIP_CITY_EDITION_REV1')) if (!defined("GEOIP_CITY_EDITION_REV1"))
define("GEOIP_CITY_EDITION_REV1", 2); define("GEOIP_CITY_EDITION_REV1", 2);
if (!defined('GEOIP_ORG_EDITION')) if (!defined("GEOIP_ORG_EDITION"))
define("GEOIP_ORG_EDITION", 110); define("GEOIP_ORG_EDITION", 110);
if (!defined('GEOIP_ISP_EDITION')) if (!defined("GEOIP_ISP_EDITION"))
define("GEOIP_ISP_EDITION", 4); define("GEOIP_ISP_EDITION", 4);
if (!defined('SEGMENT_RECORD_LENGTH')) if (!defined("SEGMENT_RECORD_LENGTH"))
define("SEGMENT_RECORD_LENGTH", 3); define("SEGMENT_RECORD_LENGTH", 3);
if (!defined('STANDARD_RECORD_LENGTH')) if (!defined("STANDARD_RECORD_LENGTH"))
define("STANDARD_RECORD_LENGTH", 3); define("STANDARD_RECORD_LENGTH", 3);
if (!defined('ORG_RECORD_LENGTH')) if (!defined("ORG_RECORD_LENGTH"))
define("ORG_RECORD_LENGTH", 4); define("ORG_RECORD_LENGTH", 4);
if (!defined('MAX_RECORD_LENGTH')) if (!defined("MAX_RECORD_LENGTH"))
define("MAX_RECORD_LENGTH", 4); define("MAX_RECORD_LENGTH", 4);
if (!defined('MAX_ORG_RECORD_LENGTH')) if (!defined("MAX_ORG_RECORD_LENGTH"))
define("MAX_ORG_RECORD_LENGTH", 300); define("MAX_ORG_RECORD_LENGTH", 300);
if (!defined('GEOIP_SHM_KEY')) if (!defined("GEOIP_SHM_KEY"))
define("GEOIP_SHM_KEY", 0x4f415401); define("GEOIP_SHM_KEY", 0x4f415401);
if (!defined('US_OFFSET')) if (!defined("US_OFFSET"))
define("US_OFFSET", 1); define("US_OFFSET", 1);
if (!defined('CANADA_OFFSET')) if (!defined("CANADA_OFFSET"))
define("CANADA_OFFSET", 677); define("CANADA_OFFSET", 677);
if (!defined('WORLD_OFFSET')) if (!defined("WORLD_OFFSET"))
define("WORLD_OFFSET", 1353); define("WORLD_OFFSET", 1353);
if (!defined('FIPS_RANGE')) if (!defined("FIPS_RANGE"))
define("FIPS_RANGE", 360); define("FIPS_RANGE", 360);
if (!defined('GEOIP_UNKNOWN_SPEED')) if (!defined("GEOIP_UNKNOWN_SPEED"))
define("GEOIP_UNKNOWN_SPEED", 0); define("GEOIP_UNKNOWN_SPEED", 0);
if (!defined('GEOIP_DIALUP_SPEED')) if (!defined("GEOIP_DIALUP_SPEED"))
define("GEOIP_DIALUP_SPEED", 1); define("GEOIP_DIALUP_SPEED", 1);
if (!defined('GEOIP_CABLEDSL_SPEED')) if (!defined("GEOIP_CABLEDSL_SPEED"))
define("GEOIP_CABLEDSL_SPEED", 2); define("GEOIP_CABLEDSL_SPEED", 2);
if (!defined('GEOIP_CORPORATE_SPEED')) if (!defined("GEOIP_CORPORATE_SPEED"))
define("GEOIP_CORPORATE_SPEED", 3); define("GEOIP_CORPORATE_SPEED", 3);
if (!defined('GEOIP_DOMAIN_EDITION')) if (!defined("GEOIP_DOMAIN_EDITION"))
define("GEOIP_DOMAIN_EDITION", 11); define("GEOIP_DOMAIN_EDITION", 11);
if (!defined('GEOIP_LOCATIONA_EDITION')) if (!defined("GEOIP_COUNTRY_EDITION_V6"))
define("GEOIP_COUNTRY_EDITION_V6", 12);
if (!defined("GEOIP_LOCATIONA_EDITION"))
define("GEOIP_LOCATIONA_EDITION", 13); define("GEOIP_LOCATIONA_EDITION", 13);
if (!defined('GEOIP_ACCURACYRADIUS_EDITION')) if (!defined("GEOIP_ACCURACYRADIUS_EDITION"))
define("GEOIP_ACCURACYRADIUS_EDITION", 14); define("GEOIP_ACCURACYRADIUS_EDITION", 14);
if (!defined('GEOIP_CITYCOMBINED_EDITION')) if (!defined("GEOIP_CITYCOMBINED_EDITION"))
define("GEOIP_CITYCOMBINED_EDITION", 15); define("GEOIP_CITYCOMBINED_EDITION", 15);
if (!defined('CITYCOMBINED_FIXED_RECORD')) if (!defined("GEOIP_CITY_EDITION_REV1_V6"))
define("GEOIP_CITY_EDITION_REV1_V6", 30);
if (!defined("GEOIP_CITY_EDITION_REV0_V6"))
define("GEOIP_CITY_EDITION_REV0_V6",31);
if (!defined("GEOIP_NETSPEED_EDITION_REV1"))
define("GEOIP_NETSPEED_EDITION_REV1",32);
if (!defined("GEOIP_NETSPEED_EDITION_REV1_V6"))
define("GEOIP_NETSPEED_EDITION_REV1_V6",33);
if (!defined("GEOIP_USERTYPE_EDITION"))
define("GEOIP_USERTYPE_EDITION",28);
if (!defined("GEOIP_USERTYPE_EDITION_V6"))
define("GEOIP_USERTYPE_EDITION_V6",29);
if (!defined("GEOIP_ASNUM_EDITION_V6"))
define("GEOIP_ASNUM_EDITION_V6",21);
if (!defined("GEOIP_ISP_EDITION_V6"))
define("GEOIP_ISP_EDITION_V6",22);
if (!defined("GEOIP_ORG_EDITION_V6"))
define("GEOIP_ORG_EDITION_V6",23);
if (!defined("GEOIP_DOMAIN_EDITION_V6"))
define("GEOIP_DOMAIN_EDITION_V6",24);
if (!defined("CITYCOMBINED_FIXED_RECORD"))
define("CITYCOMBINED_FIXED_RECORD", 7 ); define("CITYCOMBINED_FIXED_RECORD", 7 );
class GeoIP { class GeoIP {
@@ -110,7 +132,7 @@ class GeoIP {
var $shmid; var $shmid;
var $GEOIP_COUNTRY_CODE_TO_NUMBER = array( var $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
"" => 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5, "" => 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5,
"AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "AN" => 10, "AO" => 11, "AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "CW" => 10, "AO" => 11,
"AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17, "AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17,
"AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23, "AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23,
"BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29, "BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29,
@@ -121,7 +143,7 @@ class GeoIP {
"CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59, "CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59,
"DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65, "DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65,
"ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71, "ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71,
"FM" => 72, "FO" => 73, "FR" => 74, "FX" => 75, "GA" => 76, "GB" => 77, "FM" => 72, "FO" => 73, "FR" => 74, "SX" => 75, "GA" => 76, "GB" => 77,
"GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83, "GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83,
"GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89, "GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89,
"GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95, "GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95,
@@ -151,138 +173,124 @@ class GeoIP {
"VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "RS" => 239, "VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "RS" => 239,
"ZA" => 240, "ZM" => 241, "ME" => 242, "ZW" => 243, "A1" => 244, "A2" => 245, "ZA" => 240, "ZM" => 241, "ME" => 242, "ZW" => 243, "A1" => 244, "A2" => 245,
"O1" => 246, "AX" => 247, "GG" => 248, "IM" => 249, "JE" => 250, "BL" => 251, "O1" => 246, "AX" => 247, "GG" => 248, "IM" => 249, "JE" => 250, "BL" => 251,
"MF" => 252 "MF" => 252, "BQ" => 253,
); );
var $GEOIP_COUNTRY_CODES = array( var $GEOIP_COUNTRY_CODES = array(
"", "AP", "EU", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ", "","AP","EU","AD","AE","AF","AG","AI","AL","AM","CW",
"AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "AO","AQ","AR","AS","AT","AU","AW","AZ","BA","BB",
"BI", "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA", "BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO",
"CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD",
"CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "CF","CG","CH","CI","CK","CL","CM","CN","CO","CR",
"EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "FX", "GA", "GB", "CU","CV","CX","CY","CZ","DE","DJ","DK","DM","DO",
"GD", "GE", "GF", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ",
"GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IN", "FK","FM","FO","FR","SX","GA","GB","GD","GE","GF",
"IO", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT",
"KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "GU","GW","GY","HK","HM","HN","HR","HT","HU","ID",
"LT", "LU", "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK", "ML", "MM", "MN", "IE","IL","IN","IO","IQ","IR","IS","IT","JM","JO",
"MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "JP","KE","KG","KH","KI","KM","KN","KP","KR","KW",
"NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT",
"PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY", "LU","LV","LY","MA","MC","MD","MG","MH","MK","ML",
"QA", "RE", "RO", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV",
"SJ", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI",
"TF", "TG", "TH", "TJ", "TK", "TM", "TN", "TO", "TL", "TR", "TT", "TV", "TW", "NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF",
"TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "PG","PH","PK","PL","PM","PN","PR","PS","PT","PW",
"VU", "WF", "WS", "YE", "YT", "RS", "ZA", "ZM", "ME", "ZW", "A1", "A2", "O1", "PY","QA","RE","RO","RU","RW","SA","SB","SC","SD",
"AX", "GG", "IM", "JE", "BL", "MF" "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");
var $GEOIP_COUNTRY_CODES3 = array( var $GEOIP_COUNTRY_CODES3 = array(
"","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","ANT","AGO","ATA","ARG", "","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","CUW",
"ASM","AUT","AUS","ABW","AZE","BIH","BRB","BGD","BEL","BFA","BGR","BHR","BDI", "AGO","ATA","ARG","ASM","AUT","AUS","ABW","AZE","BIH","BRB",
"BEN","BMU","BRN","BOL","BRA","BHS","BTN","BVT","BWA","BLR","BLZ","CAN","CCK", "BGD","BEL","BFA","BGR","BHR","BDI","BEN","BMU","BRN","BOL",
"COD","CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI","CUB","CPV", "BRA","BHS","BTN","BVT","BWA","BLR","BLZ","CAN","CCK","COD",
"CXR","CYP","CZE","DEU","DJI","DNK","DMA","DOM","DZA","ECU","EST","EGY","ESH", "CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI",
"ERI","ESP","ETH","FIN","FJI","FLK","FSM","FRO","FRA","FX","GAB","GBR","GRD", "CUB","CPV","CXR","CYP","CZE","DEU","DJI","DNK","DMA","DOM",
"GEO","GUF","GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","SGS","GTM","GUM", "DZA","ECU","EST","EGY","ESH","ERI","ESP","ETH","FIN","FJI",
"GNB","GUY","HKG","HMD","HND","HRV","HTI","HUN","IDN","IRL","ISR","IND","IOT", "FLK","FSM","FRO","FRA","SXM","GAB","GBR","GRD","GEO","GUF",
"IRQ","IRN","ISL","ITA","JAM","JOR","JPN","KEN","KGZ","KHM","KIR","COM","KNA", "GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","SGS","GTM",
"PRK","KOR","KWT","CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU", "GUM","GNB","GUY","HKG","HMD","HND","HRV","HTI","HUN","IDN",
"LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI","MMR","MNG","MAC", "IRL","ISR","IND","IOT","IRQ","IRN","ISL","ITA","JAM","JOR",
"MNP","MTQ","MRT","MSR","MLT","MUS","MDV","MWI","MEX","MYS","MOZ","NAM","NCL", "JPN","KEN","KGZ","KHM","KIR","COM","KNA","PRK","KOR","KWT",
"NER","NFK","NGA","NIC","NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER", "CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU",
"PYF","PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW","PRY","QAT", "LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI",
"REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN","SWE","SGP","SHN","SVN","SJM", "MMR","MNG","MAC","MNP","MTQ","MRT","MSR","MLT","MUS","MDV",
"SVK","SLE","SMR","SEN","SOM","SUR","STP","SLV","SYR","SWZ","TCA","TCD","ATF", "MWI","MEX","MYS","MOZ","NAM","NCL","NER","NFK","NGA","NIC",
"TGO","THA","TJK","TKL","TLS","TKM","TUN","TON","TUR","TTO","TUV","TWN","TZA", "NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER","PYF",
"UKR","UGA","UMI","USA","URY","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT", "PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW",
"WLF","WSM","YEM","MYT","SRB","ZAF","ZMB","MNE","ZWE","A1","A2","O1", "PRY","QAT","REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN",
"ALA","GGY","IMN","JEY","BLM","MAF" "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"
); );
var $GEOIP_COUNTRY_NAMES = array( var $GEOIP_COUNTRY_NAMES = array(
"", "Asia/Pacific Region", "Europe", "Andorra", "United Arab Emirates", "","Asia/Pacific Region","Europe","Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Curacao",
"Afghanistan", "Antigua and Barbuda", "Anguilla", "Albania", "Armenia", "Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Azerbaijan","Bosnia and Herzegovina","Barbados",
"Netherlands Antilles", "Angola", "Antarctica", "Argentina", "American Samoa", "Bangladesh","Belgium","Burkina Faso","Bulgaria","Bahrain","Burundi","Benin","Bermuda","Brunei Darussalam","Bolivia",
"Austria", "Australia", "Aruba", "Azerbaijan", "Bosnia and Herzegovina", "Brazil","Bahamas","Bhutan","Bouvet Island","Botswana","Belarus","Belize","Canada","Cocos (Keeling) Islands","Congo, The Democratic Republic of the",
"Barbados", "Bangladesh", "Belgium", "Burkina Faso", "Bulgaria", "Bahrain", "Central African Republic","Congo","Switzerland","Cote D'Ivoire","Cook Islands","Chile","Cameroon","China","Colombia","Costa Rica",
"Burundi", "Benin", "Bermuda", "Brunei Darussalam", "Bolivia", "Brazil", "Cuba","Cape Verde","Christmas Island","Cyprus","Czech Republic","Germany","Djibouti","Denmark","Dominica","Dominican Republic",
"Bahamas", "Bhutan", "Bouvet Island", "Botswana", "Belarus", "Belize", "Algeria","Ecuador","Estonia","Egypt","Western Sahara","Eritrea","Spain","Ethiopia","Finland","Fiji",
"Canada", "Cocos (Keeling) Islands", "Congo, The Democratic Republic of the", "Falkland Islands (Malvinas)","Micronesia, Federated States of","Faroe Islands","France","Sint Maarten (Dutch part)","Gabon","United Kingdom","Grenada","Georgia","French Guiana",
"Central African Republic", "Congo", "Switzerland", "Cote D'Ivoire", "Cook Islands", "Ghana","Gibraltar","Greenland","Gambia","Guinea","Guadeloupe","Equatorial Guinea","Greece","South Georgia and the South Sandwich Islands","Guatemala",
"Chile", "Cameroon", "China", "Colombia", "Costa Rica", "Cuba", "Cape Verde", "Guam","Guinea-Bissau","Guyana","Hong Kong","Heard Island and McDonald Islands","Honduras","Croatia","Haiti","Hungary","Indonesia",
"Christmas Island", "Cyprus", "Czech Republic", "Germany", "Djibouti", "Ireland","Israel","India","British Indian Ocean Territory","Iraq","Iran, Islamic Republic of","Iceland","Italy","Jamaica","Jordan",
"Denmark", "Dominica", "Dominican Republic", "Algeria", "Ecuador", "Estonia", "Japan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Comoros","Saint Kitts and Nevis","Korea, Democratic People's Republic of","Korea, Republic of","Kuwait",
"Egypt", "Western Sahara", "Eritrea", "Spain", "Ethiopia", "Finland", "Fiji", "Cayman Islands","Kazakhstan","Lao People's Democratic Republic","Lebanon","Saint Lucia","Liechtenstein","Sri Lanka","Liberia","Lesotho","Lithuania",
"Falkland Islands (Malvinas)", "Micronesia, Federated States of", "Faroe Islands", "Luxembourg","Latvia","Libya","Morocco","Monaco","Moldova, Republic of","Madagascar","Marshall Islands","Macedonia","Mali",
"France", "France, Metropolitan", "Gabon", "United Kingdom", "Myanmar","Mongolia","Macau","Northern Mariana Islands","Martinique","Mauritania","Montserrat","Malta","Mauritius","Maldives",
"Grenada", "Georgia", "French Guiana", "Ghana", "Gibraltar", "Greenland", "Malawi","Mexico","Malaysia","Mozambique","Namibia","New Caledonia","Niger","Norfolk Island","Nigeria","Nicaragua",
"Gambia", "Guinea", "Guadeloupe", "Equatorial Guinea", "Greece", "South Georgia and the South Sandwich Islands", "Netherlands","Norway","Nepal","Nauru","Niue","New Zealand","Oman","Panama","Peru","French Polynesia",
"Guatemala", "Guam", "Guinea-Bissau", "Papua New Guinea","Philippines","Pakistan","Poland","Saint Pierre and Miquelon","Pitcairn Islands","Puerto Rico","Palestinian Territory","Portugal","Palau",
"Guyana", "Hong Kong", "Heard Island and McDonald Islands", "Honduras", "Paraguay","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saudi Arabia","Solomon Islands","Seychelles","Sudan",
"Croatia", "Haiti", "Hungary", "Indonesia", "Ireland", "Israel", "India", "Sweden","Singapore","Saint Helena","Slovenia","Svalbard and Jan Mayen","Slovakia","Sierra Leone","San Marino","Senegal","Somalia","Suriname",
"British Indian Ocean Territory", "Iraq", "Iran, Islamic Republic of", "Sao Tome and Principe","El Salvador","Syrian Arab Republic","Swaziland","Turks and Caicos Islands","Chad","French Southern Territories","Togo","Thailand",
"Iceland", "Italy", "Jamaica", "Jordan", "Japan", "Kenya", "Kyrgyzstan", "Tajikistan","Tokelau","Turkmenistan","Tunisia","Tonga","Timor-Leste","Turkey","Trinidad and Tobago","Tuvalu","Taiwan",
"Cambodia", "Kiribati", "Comoros", "Saint Kitts and Nevis", "Korea, Democratic People's Republic of", "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",
"Korea, Republic of", "Kuwait", "Cayman Islands", "Virgin Islands, British","Virgin Islands, U.S.","Vietnam","Vanuatu","Wallis and Futuna","Samoa","Yemen","Mayotte","Serbia","South Africa",
"Kazakhstan", "Lao People's Democratic Republic", "Lebanon", "Saint Lucia", "Zambia","Montenegro","Zimbabwe","Anonymous Proxy","Satellite Provider","Other","Aland Islands","Guernsey","Isle of Man","Jersey",
"Liechtenstein", "Sri Lanka", "Liberia", "Lesotho", "Lithuania", "Luxembourg", "Saint Barthelemy","Saint Martin", "Bonaire, Saint Eustatius and Saba"
"Latvia", "Libyan Arab Jamahiriya", "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"
); );
var $GEOIP_CONTINENT_CODES = array( var $GEOIP_CONTINENT_CODES = array(
"--", "AS", "EU", "EU", "AS", "AS", "NA", "NA", "EU", "AS", "--", "AS","EU","EU","AS","AS","NA","NA","EU","AS","NA",
"NA", "AF", "AN", "SA", "OC", "EU", "OC", "NA", "AS", "EU", "AF","AN","SA","OC","EU","OC","NA","AS","EU","NA",
"NA", "AS", "EU", "AF", "EU", "AS", "AF", "AF", "NA", "AS", "AS","EU","AF","EU","AS","AF","AF","NA","AS","SA",
"SA", "SA", "NA", "AS", "AN", "AF", "EU", "NA", "NA", "AS", "SA","NA","AS","AN","AF","EU","NA","NA","AS","AF",
"AF", "AF", "AF", "EU", "AF", "OC", "SA", "AF", "AS", "SA", "AF","AF","EU","AF","OC","SA","AF","AS","SA","NA",
"NA", "NA", "AF", "AS", "AS", "EU", "EU", "AF", "EU", "NA", "NA","AF","AS","AS","EU","EU","AF","EU","NA","NA",
"NA", "AF", "SA", "EU", "AF", "AF", "AF", "EU", "AF", "EU", "AF","SA","EU","AF","AF","AF","EU","AF","EU","OC",
"OC", "SA", "OC", "EU", "EU", "EU", "AF", "EU", "NA", "AS", "SA","OC","EU","EU","NA","AF","EU","NA","AS","SA",
"SA", "AF", "EU", "NA", "AF", "AF", "NA", "AF", "EU", "AN", "AF","EU","NA","AF","AF","NA","AF","EU","AN","NA",
"NA", "OC", "AF", "SA", "AS", "AN", "NA", "EU", "NA", "EU", "OC","AF","SA","AS","AN","NA","EU","NA","EU","AS",
"AS", "EU", "AS", "AS", "AS", "AS", "AS", "EU", "EU", "NA", "EU","AS","AS","AS","AS","AS","EU","EU","NA","AS",
"AS", "AS", "AF", "AS", "AS", "OC", "AF", "NA", "AS", "AS", "AS","AF","AS","AS","OC","AF","NA","AS","AS","AS",
"AS", "NA", "AS", "AS", "AS", "NA", "EU", "AS", "AF", "AF", "NA","AS","AS","AS","NA","EU","AS","AF","AF","EU",
"EU", "EU", "EU", "AF", "AF", "EU", "EU", "AF", "OC", "EU", "EU","EU","AF","AF","EU","EU","AF","OC","EU","AF",
"AF", "AS", "AS", "AS", "OC", "NA", "AF", "NA", "EU", "AF", "AS","AS","AS","OC","NA","AF","NA","EU","AF","AS",
"AS", "AF", "NA", "AS", "AF", "AF", "OC", "AF", "OC", "AF", "AF","NA","AS","AF","AF","OC","AF","OC","AF","NA",
"NA", "EU", "EU", "AS", "OC", "OC", "OC", "AS", "NA", "SA", "EU","EU","AS","OC","OC","OC","AS","NA","SA","OC",
"OC", "OC", "AS", "AS", "EU", "NA", "OC", "NA", "AS", "EU", "OC","AS","AS","EU","NA","OC","NA","AS","EU","OC",
"OC", "SA", "AS", "AF", "EU", "EU", "AF", "AS", "OC", "AF", "SA","AS","AF","EU","EU","AF","AS","OC","AF","AF",
"AF", "EU", "AS", "AF", "EU", "EU", "EU", "AF", "EU", "AF", "EU","AS","AF","EU","EU","EU","AF","EU","AF","AF",
"AF", "SA", "AF", "NA", "AS", "AF", "NA", "AF", "AN", "AF", "SA","AF","NA","AS","AF","NA","AF","AN","AF","AS",
"AS", "AS", "OC", "AS", "AF", "OC", "AS", "EU", "NA", "OC", "AS","OC","AS","AF","OC","AS","EU","NA","OC","AS",
"AS", "AF", "EU", "AF", "OC", "NA", "SA", "AS", "EU", "NA", "AF","EU","AF","OC","NA","SA","AS","EU","NA","SA",
"SA", "NA", "NA", "AS", "OC", "OC", "OC", "AS", "AF", "EU", "NA","NA","AS","OC","OC","OC","AS","AF","EU","AF",
"AF", "AF", "EU", "AF", "--", "--", "--", "EU", "EU", "EU", "AF","EU","AF","--","--","--","EU","EU","EU","EU",
"EU", "NA", "NA" "NA","NA","NA"
); );
} }
if (!function_exists('geoip_load_shared_mem'))
{ if (!function_exists('geoip_load_shared_mem ')){
function geoip_load_shared_mem ($file) { function geoip_load_shared_mem ($file) {
$fp = fopen($file, "rb"); $fp = fopen($file, "rb");
@@ -301,8 +309,8 @@ if (!function_exists('geoip_load_shared_mem'))
shmop_close ($shmid); shmop_close ($shmid);
} }
} }
if (!function_exists('_setup_segments'))
{ if (!function_exists('_setup_segments')){
function _setup_segments($gi){ function _setup_segments($gi){
$gi->databaseType = GEOIP_COUNTRY_EDITION; $gi->databaseType = GEOIP_COUNTRY_EDITION;
$gi->record_length = STANDARD_RECORD_LENGTH; $gi->record_length = STANDARD_RECORD_LENGTH;
@@ -322,19 +330,32 @@ if (!function_exists('_setup_segments'))
} else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)|| } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)||
($gi->databaseType == GEOIP_CITY_EDITION_REV1) ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
|| ($gi->databaseType == GEOIP_ORG_EDITION) || ($gi->databaseType == GEOIP_ORG_EDITION)
|| ($gi->databaseType == GEOIP_ORG_EDITION_V6)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION) || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
|| ($gi->databaseType == GEOIP_ISP_EDITION) || ($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_LOCATIONA_EDITION)
|| ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION) || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
|| ($gi->databaseType == GEOIP_ASNUM_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; $gi->databaseSegments = 0;
$buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH); $buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){ for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
$gi->databaseSegments += (ord($buf[$j]) << ($j * 8)); $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
} }
if (($gi->databaseType == GEOIP_ORG_EDITION) if (($gi->databaseType == GEOIP_ORG_EDITION)
|| ($gi->databaseType == GEOIP_ORG_EDITION_V6)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION) || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
|| ($gi->databaseType == GEOIP_ISP_EDITION)) { || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
|| ($gi->databaseType == GEOIP_ISP_EDITION)
|| ($gi->databaseType == GEOIP_ISP_EDITION_V6)) {
$gi->record_length = ORG_RECORD_LENGTH; $gi->record_length = ORG_RECORD_LENGTH;
} }
} }
@@ -344,6 +365,7 @@ if (!function_exists('_setup_segments'))
} }
} }
if (($gi->databaseType == GEOIP_COUNTRY_EDITION)|| if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
($gi->databaseType == GEOIP_COUNTRY_EDITION_V6)||
($gi->databaseType == GEOIP_PROXY_EDITION)|| ($gi->databaseType == GEOIP_PROXY_EDITION)||
($gi->databaseType == GEOIP_NETSPEED_EDITION)){ ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
$gi->databaseSegments = GEOIP_COUNTRY_BEGIN; $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
@@ -362,12 +384,24 @@ if (!function_exists('_setup_segments'))
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV1; $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
} else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0) } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)
|| ($gi->databaseType == GEOIP_CITY_EDITION_REV1) || ($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_ORG_EDITION)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION) || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
|| ($gi->databaseType == GEOIP_ISP_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_LOCATIONA_EDITION)
|| ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION) || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
|| ($gi->databaseType == GEOIP_ASNUM_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; $gi->databaseSegments = 0;
$buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH); $buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);
for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){ for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
@@ -375,7 +409,10 @@ if (!function_exists('_setup_segments'))
} }
if ( ( $gi->databaseType == GEOIP_ORG_EDITION ) if ( ( $gi->databaseType == GEOIP_ORG_EDITION )
|| ( $gi->databaseType == GEOIP_DOMAIN_EDITION ) || ( $gi->databaseType == GEOIP_DOMAIN_EDITION )
|| ( $gi->databaseType == GEOIP_ISP_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; $gi->record_length = ORG_RECORD_LENGTH;
} }
} }
@@ -385,6 +422,7 @@ if (!function_exists('_setup_segments'))
} }
} }
if (($gi->databaseType == GEOIP_COUNTRY_EDITION)|| if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
($gi->databaseType == GEOIP_COUNTRY_EDITION_V6)||
($gi->databaseType == GEOIP_PROXY_EDITION)|| ($gi->databaseType == GEOIP_PROXY_EDITION)||
($gi->databaseType == GEOIP_NETSPEED_EDITION)){ ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
$gi->databaseSegments = GEOIP_COUNTRY_BEGIN; $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
@@ -395,8 +433,7 @@ if (!function_exists('_setup_segments'))
} }
} }
if (!function_exists('geoip_open')) if (!function_exists('geoip_open')){
{
function geoip_open($filename, $flags) { function geoip_open($filename, $flags) {
$gi = new GeoIP; $gi = new GeoIP;
$gi->flags = $flags; $gi->flags = $flags;
@@ -414,8 +451,8 @@ if (!function_exists('geoip_open'))
return $gi; return $gi;
} }
} }
if (!function_exists('geoip_close'))
{ if (!function_exists('geoip_close')){
function geoip_close($gi) { function geoip_close($gi) {
if ($gi->flags & GEOIP_SHARED_MEMORY) { if ($gi->flags & GEOIP_SHARED_MEMORY) {
return true; return true;
@@ -424,8 +461,22 @@ if (!function_exists('geoip_close'))
return fclose($gi->filehandle); return fclose($gi->filehandle);
} }
} }
if (!function_exists('geoip_country_id_by_name'))
{ if (!function_exists('geoip_country_id_by_name_v6')){
function geoip_country_id_by_name_v6($gi, $name) {
$rec = dns_get_record($name, DNS_AAAA);
if ( !$rec ) {
return false;
}
$addr = $rec[0]["ipv6"];
if (!$addr || $addr == $name) {
return false;
}
return geoip_country_id_by_addr_v6($gi, $addr);
}
}
if (!function_exists('geoip_country_id_by_name')){
function geoip_country_id_by_name($gi, $name) { function geoip_country_id_by_name($gi, $name) {
$addr = gethostbyname($name); $addr = gethostbyname($name);
if (!$addr || $addr == $name) { if (!$addr || $addr == $name) {
@@ -434,8 +485,18 @@ if (!function_exists('geoip_country_id_by_name'))
return geoip_country_id_by_addr($gi, $addr); return geoip_country_id_by_addr($gi, $addr);
} }
} }
if (!function_exists('geoip_country_code_by_name'))
{ if (!function_exists('geoip_country_code_by_name_v6')){
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 false;
}
}
if (!function_exists('geoip_country_code_by_name')){
function geoip_country_code_by_name($gi, $name) { function geoip_country_code_by_name($gi, $name) {
$country_id = geoip_country_id_by_name($gi,$name); $country_id = geoip_country_id_by_name($gi,$name);
if ($country_id !== false) { if ($country_id !== false) {
@@ -445,8 +506,17 @@ if (!function_exists('geoip_country_code_by_name'))
} }
} }
if (!function_exists('geoip_country_name_by_name')) if (!function_exists('geoip_country_name_by_name_v6')){
{ 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 false;
}
}
if (!function_exists('geoip_country_name_by_name')){
function geoip_country_name_by_name($gi, $name) { function geoip_country_name_by_name($gi, $name) {
$country_id = geoip_country_id_by_name($gi,$name); $country_id = geoip_country_id_by_name($gi,$name);
if ($country_id !== false) { if ($country_id !== false) {
@@ -455,16 +525,32 @@ if (!function_exists('geoip_country_name_by_name'))
return false; return false;
} }
} }
if (!function_exists('geoip_country_id_by_addr'))
{ if (!function_exists('geoip_country_id_by_addr_v6')){
function geoip_country_id_by_addr_v6($gi, $addr) {
$ipnum = inet_pton($addr);
return _geoip_seek_country_v6($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
}
}
if (!function_exists('geoip_country_id_by_addr')){
function geoip_country_id_by_addr($gi, $addr) { function geoip_country_id_by_addr($gi, $addr) {
$ipnum = ip2long($addr); $ipnum = ip2long($addr);
return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN; return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
} }
} }
if (!function_exists('geoip_country_code_by_addr')) if (!function_exists('geoip_country_code_by_addr_v6')){
{ 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 false;
}
}
if (!function_exists('geoip_country_code_by_addr')){
function geoip_country_code_by_addr($gi, $addr) { function geoip_country_code_by_addr($gi, $addr) {
if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) { if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
$record = geoip_record_by_addr($gi,$addr); $record = geoip_record_by_addr($gi,$addr);
@@ -480,8 +566,18 @@ if (!function_exists('geoip_country_code_by_addr'))
return false; return false;
} }
} }
if (!function_exists('geoip_country_name_by_addr'))
{ if (!function_exists('geoip_country_name_by_addr_v6')){
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 false;
}
}
if (!function_exists('geoip_country_name_by_addr')){
function geoip_country_name_by_addr($gi, $addr) { function geoip_country_name_by_addr($gi, $addr) {
if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) { if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
$record = geoip_record_by_addr($gi,$addr); $record = geoip_record_by_addr($gi,$addr);
@@ -495,8 +591,65 @@ if (!function_exists('geoip_country_name_by_addr'))
return false; return false;
} }
} }
if (!function_exists('_geoip_seek_country'))
{ if (!function_exists('_geoip_seek_country_v6')){
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);
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];
}
}
trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
return false;
}
}
if (!function_exists('_geoip_seek_country')){
function _geoip_seek_country($gi, $ipnum) { function _geoip_seek_country($gi, $ipnum) {
$offset = 0; $offset = 0;
for ($depth = 31; $depth >= 0; --$depth) { for ($depth = 31; $depth >= 0; --$depth) {
@@ -542,13 +695,9 @@ if (!function_exists('_geoip_seek_country'))
return false; return false;
} }
} }
if (!function_exists('_get_org'))
{ if (!function_exists('_common_get_org')){
function _get_org($gi,$ipnum){ function _common_get_org($gi, $seek_org){
$seek_org = _geoip_seek_country($gi,$ipnum);
if ($seek_org == $gi->databaseSegments) {
return NULL;
}
$record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments; $record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;
if ($gi->flags & GEOIP_SHARED_MEMORY) { 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);
@@ -566,9 +715,40 @@ if (!function_exists('_get_org'))
} }
} }
if (!function_exists('geoip_org_by_addr')) if (!function_exists('_get_org_v6')){
{ function _get_org_v6($gi,$ipnum){
function geoip_org_by_addr ($gi,$addr) { $seek_org = _geoip_seek_country_v6($gi,$ipnum);
if ($seek_org == $gi->databaseSegments) {
return NULL;
}
return _common_get_org($gi, $seek_org);
}
}
if (!function_exists('_get_org')){
function _get_org($gi,$ipnum){
$seek_org = _geoip_seek_country($gi,$ipnum);
if ($seek_org == $gi->databaseSegments) {
return NULL;
}
return _common_get_org($gi, $seek_org);
}
}
if (!function_exists('geoip_name_by_addr_v6 ')){
function geoip_name_by_addr_v6 ($gi,$addr) {
if ($addr == NULL) {
return 0;
}
$ipnum = inet_pton($addr);
return _get_org_v6($gi, $ipnum);
}
}
if (!function_exists('geoip_name_by_addr ')){
function geoip_name_by_addr ($gi,$addr) {
if ($addr == NULL) { if ($addr == NULL) {
return 0; return 0;
} }
@@ -577,8 +757,13 @@ if (!function_exists('geoip_org_by_addr'))
} }
} }
if (!function_exists('_get_region')) if (!function_exists('geoip_org_by_addr ')){
{ function geoip_org_by_addr ($gi,$addr) {
return geoip_name_by_addr($gi, $addr);
}
}
if (!function_exists('_get_region')){
function _get_region($gi,$ipnum){ function _get_region($gi,$ipnum){
if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
$seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0; $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0;
@@ -611,8 +796,7 @@ if (!function_exists('_get_region'))
} }
} }
if (!function_exists('geoip_region_by_addr')) if (!function_exists('geoip_region_by_addr ')){
{
function geoip_region_by_addr ($gi,$addr) { function geoip_region_by_addr ($gi,$addr) {
if ($addr == NULL) { if ($addr == NULL) {
return 0; return 0;
@@ -622,16 +806,15 @@ if (!function_exists('geoip_region_by_addr'))
} }
} }
if (!function_exists('getdnsattributes')) if (!function_exists('getdnsattributes ')){
{
function getdnsattributes ($l,$ip){ function getdnsattributes ($l,$ip){
$r = new Net_DNS_Resolver(); $r = new Net_DNS_Resolver();
$r->nameservers = array("ws1.maxmind.com"); $r->nameservers = array("ws1.maxmind.com");
$p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN"); $p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN");
$str = is_object($p->answer[0])?$p->answer[0]->string():''; $str = is_object($p->answer[0])?$p->answer[0]->string():'';
ereg("\"(.*)\"",$str,$regs); $str = substr( $str, 1, -1 );
$str = $regs[1];
return $str; return $str;
} }
} }
?> ?>
+24 -4
View File
@@ -67,9 +67,9 @@ class geoipdnsrecord {
function getrecordwithdnsservice($str){ function getrecordwithdnsservice($str){
$record = new geoipdnsrecord; $record = new geoipdnsrecord;
$keyvalue = split(";",$str); $keyvalue = explode(";",$str);
foreach ($keyvalue as $keyvalue2){ foreach ($keyvalue as $keyvalue2){
list($key,$value) = split("=",$keyvalue2); list($key,$value) = explode("=",$keyvalue2);
if ($key == "co"){ if ($key == "co"){
$record->country_code = $value; $record->country_code = $value;
} }
@@ -115,12 +115,16 @@ function getrecordwithdnsservice($str){
return $record; return $record;
} }
function _get_record($gi,$ipnum){
$seek_country = _geoip_seek_country($gi,$ipnum); function _get_record_v6($gi,$ipnum){
$seek_country = _geoip_seek_country_v6($gi,$ipnum);
if ($seek_country == $gi->databaseSegments) { if ($seek_country == $gi->databaseSegments) {
return NULL; return NULL;
} }
return _common_get_record($gi, $seek_country);
}
function _common_get_record($gi, $seek_country){
// workaround php's broken substr, strpos, etc handling with // workaround php's broken substr, strpos, etc handling with
// mbstring.func_overload and mbstring.internal_encoding // mbstring.func_overload and mbstring.internal_encoding
$enc = mb_internal_encoding(); $enc = mb_internal_encoding();
@@ -206,6 +210,22 @@ function _get_record($gi,$ipnum){
return $record; return $record;
} }
function GeoIP_record_by_addr_v6 ($gi,$addr){
if ($addr == NULL){
return 0;
}
$ipnum = inet_pton($addr);
return _get_record_v6($gi, $ipnum);
}
function _get_record($gi,$ipnum){
$seek_country = _geoip_seek_country($gi,$ipnum);
if ($seek_country == $gi->databaseSegments) {
return NULL;
}
return _common_get_record($gi, $seek_country);
}
function GeoIP_record_by_addr ($gi,$addr){ function GeoIP_record_by_addr ($gi,$addr){
if ($addr == NULL){ if ($addr == NULL){
return 0; return 0;
+28 -27
View File
@@ -1,5 +1,5 @@
<?php <?php
# Copyright 2010 Maxmind LLC All Rights Reserved # Copyright 2012 Maxmind LLC All Rights Reserved
$GEOIP_REGION_NAME = array( $GEOIP_REGION_NAME = array(
"AD" => array( "AD" => array(
"02" => "Canillo", "02" => "Canillo",
@@ -254,7 +254,9 @@ $GEOIP_REGION_NAME = array(
"09" => "West-Vlaanderen", "09" => "West-Vlaanderen",
"10" => "Brabant Wallon", "10" => "Brabant Wallon",
"11" => "Brussels Hoofdstedelijk Gewest", "11" => "Brussels Hoofdstedelijk Gewest",
"12" => "Vlaams-Brabant"), "12" => "Vlaams-Brabant",
"13" => "Flanders",
"14" => "Wallonia"),
"BF" => array( "BF" => array(
"15" => "Bam", "15" => "Bam",
"19" => "Boulkiemde", "19" => "Boulkiemde",
@@ -675,9 +677,6 @@ $GEOIP_REGION_NAME = array(
"02" => "Antioquia", "02" => "Antioquia",
"03" => "Arauca", "03" => "Arauca",
"04" => "Atlantico", "04" => "Atlantico",
"05" => "Bolivar Department",
"06" => "Boyaca Department",
"07" => "Caldas Department",
"08" => "Caqueta", "08" => "Caqueta",
"09" => "Cauca", "09" => "Cauca",
"10" => "Cesar", "10" => "Cesar",
@@ -687,7 +686,6 @@ $GEOIP_REGION_NAME = array(
"15" => "Guainia", "15" => "Guainia",
"16" => "Huila", "16" => "Huila",
"17" => "La Guajira", "17" => "La Guajira",
"18" => "Magdalena Department",
"19" => "Meta", "19" => "Meta",
"20" => "Narino", "20" => "Narino",
"21" => "Norte de Santander", "21" => "Norte de Santander",
@@ -1621,26 +1619,19 @@ $GEOIP_REGION_NAME = array(
"03" => "Bengkulu", "03" => "Bengkulu",
"04" => "Jakarta Raya", "04" => "Jakarta Raya",
"05" => "Jambi", "05" => "Jambi",
"06" => "Jawa Barat",
"07" => "Jawa Tengah", "07" => "Jawa Tengah",
"08" => "Jawa Timur", "08" => "Jawa Timur",
"09" => "Papua",
"10" => "Yogyakarta", "10" => "Yogyakarta",
"11" => "Kalimantan Barat", "11" => "Kalimantan Barat",
"12" => "Kalimantan Selatan", "12" => "Kalimantan Selatan",
"13" => "Kalimantan Tengah", "13" => "Kalimantan Tengah",
"14" => "Kalimantan Timur", "14" => "Kalimantan Timur",
"15" => "Lampung", "15" => "Lampung",
"16" => "Maluku",
"17" => "Nusa Tenggara Barat", "17" => "Nusa Tenggara Barat",
"18" => "Nusa Tenggara Timur", "18" => "Nusa Tenggara Timur",
"19" => "Riau",
"20" => "Sulawesi Selatan",
"21" => "Sulawesi Tengah", "21" => "Sulawesi Tengah",
"22" => "Sulawesi Tenggara", "22" => "Sulawesi Tenggara",
"23" => "Sulawesi Utara",
"24" => "Sumatera Barat", "24" => "Sumatera Barat",
"25" => "Sumatera Selatan",
"26" => "Sumatera Utara", "26" => "Sumatera Utara",
"28" => "Maluku", "28" => "Maluku",
"29" => "Maluku Utara", "29" => "Maluku Utara",
@@ -1850,14 +1841,17 @@ $GEOIP_REGION_NAME = array(
"17" => "Kingston"), "17" => "Kingston"),
"JO" => array( "JO" => array(
"02" => "Al Balqa'", "02" => "Al Balqa'",
"07" => "Ma",
"09" => "Al Karak", "09" => "Al Karak",
"10" => "Al Mafraq",
"11" => "Amman Governorate",
"12" => "At Tafilah", "12" => "At Tafilah",
"13" => "Az Zarqa", "15" => "Al Mafraq",
"14" => "Irbid", "16" => "Amman",
"16" => "Amman"), "17" => "Az Zaraqa",
"18" => "Irbid",
"19" => "Ma'an",
"20" => "Ajlun",
"21" => "Al Aqabah",
"22" => "Jarash",
"23" => "Madaba"),
"JP" => array( "JP" => array(
"01" => "Aichi", "01" => "Aichi",
"02" => "Akita", "02" => "Akita",
@@ -2272,6 +2266,7 @@ $GEOIP_REGION_NAME = array(
"79" => "Leova", "79" => "Leova",
"80" => "Nisporeni", "80" => "Nisporeni",
"81" => "Ocnita", "81" => "Ocnita",
"82" => "Orhei",
"83" => "Rezina", "83" => "Rezina",
"84" => "Riscani", "84" => "Riscani",
"85" => "Singerei", "85" => "Singerei",
@@ -2721,7 +2716,6 @@ $GEOIP_REGION_NAME = array(
"05" => "Limburg", "05" => "Limburg",
"06" => "Noord-Brabant", "06" => "Noord-Brabant",
"07" => "Noord-Holland", "07" => "Noord-Holland",
"08" => "Overijssel",
"09" => "Utrecht", "09" => "Utrecht",
"10" => "Zeeland", "10" => "Zeeland",
"11" => "Zuid-Holland", "11" => "Zuid-Holland",
@@ -3217,7 +3211,8 @@ $GEOIP_REGION_NAME = array(
"89" => "Yevrey", "89" => "Yevrey",
"90" => "Permskiy Kray", "90" => "Permskiy Kray",
"91" => "Krasnoyarskiy Kray", "91" => "Krasnoyarskiy Kray",
"CI" => "Chechnya Republic"), "92" => "Kamchatskiy Kray",
"93" => "Zabaykal'skiy Kray"),
"RW" => array( "RW" => array(
"01" => "Butare", "01" => "Butare",
"06" => "Gitarama", "06" => "Gitarama",
@@ -3230,12 +3225,11 @@ $GEOIP_REGION_NAME = array(
"15" => "Sud"), "15" => "Sud"),
"SA" => array( "SA" => array(
"02" => "Al Bahah", "02" => "Al Bahah",
"03" => "Al Jawf",
"05" => "Al Madinah", "05" => "Al Madinah",
"06" => "Ash Sharqiyah", "06" => "Ash Sharqiyah",
"08" => "Al Qasim", "08" => "Al Qasim",
"09" => "Al Qurayyat",
"10" => "Ar Riyad", "10" => "Ar Riyad",
"11" => "Asir Province",
"13" => "Ha'il", "13" => "Ha'il",
"14" => "Makkah", "14" => "Makkah",
"15" => "Al Hudud ash Shamaliyah", "15" => "Al Hudud ash Shamaliyah",
@@ -4142,19 +4136,26 @@ $GEOIP_REGION_NAME = array(
"03" => "Al Mahrah", "03" => "Al Mahrah",
"04" => "Hadramawt", "04" => "Hadramawt",
"05" => "Shabwah", "05" => "Shabwah",
"06" => "Al Ghaydah", "06" => "Lahij",
"07" => "Al Bayda'",
"08" => "Al Hudaydah", "08" => "Al Hudaydah",
"09" => "Al Jawf",
"10" => "Al Mahwit", "10" => "Al Mahwit",
"11" => "Dhamar", "11" => "Dhamar",
"12" => "Hajjah",
"13" => "Ibb",
"14" => "Ma'rib", "14" => "Ma'rib",
"15" => "Sa", "15" => "Sa'dah",
"16" => "San", "16" => "San'a'",
"17" => "Taizz",
"18" => "Ad Dali",
"19" => "Amran",
"20" => "Al Bayda'", "20" => "Al Bayda'",
"21" => "Al Jawf", "21" => "Al Jawf",
"22" => "Hajjah", "22" => "Hajjah",
"23" => "Ibb", "23" => "Ibb",
"24" => "Lahij", "24" => "Lahij",
"25" => "Ta"), "25" => "Taizz"),
"ZA" => array( "ZA" => array(
"01" => "North-Western Province", "01" => "North-Western Province",
"02" => "KwaZulu-Natal", "02" => "KwaZulu-Natal",