| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814 |
- <?php
- /**
- * Geo IP class
- *
- * This class is a fork of GeoIP class from MaxMind LLC.
- *
- * @package WooCommerce/Classes
- * @version 2.4.0
- * @deprecated 3.4.0
- */
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- /**
- * WC_Geo_IP Class.
- *
- * @deprecated 3.4.0
- */
- class WC_Geo_IP {
- const GEOIP_COUNTRY_BEGIN = 16776960;
- const GEOIP_STATE_BEGIN_REV0 = 16700000;
- const GEOIP_STATE_BEGIN_REV1 = 16000000;
- const GEOIP_MEMORY_CACHE = 1;
- const GEOIP_SHARED_MEMORY = 2;
- const STRUCTURE_INFO_MAX_SIZE = 20;
- const GEOIP_COUNTRY_EDITION = 1;
- const GEOIP_PROXY_EDITION = 8;
- const GEOIP_ASNUM_EDITION = 9;
- const GEOIP_NETSPEED_EDITION = 10;
- const GEOIP_REGION_EDITION_REV0 = 7;
- const GEOIP_REGION_EDITION_REV1 = 3;
- const GEOIP_CITY_EDITION_REV0 = 6;
- const GEOIP_CITY_EDITION_REV1 = 2;
- const GEOIP_ORG_EDITION = 5;
- const GEOIP_ISP_EDITION = 4;
- const SEGMENT_RECORD_LENGTH = 3;
- const STANDARD_RECORD_LENGTH = 3;
- const ORG_RECORD_LENGTH = 4;
- const GEOIP_SHM_KEY = 0x4f415401;
- const GEOIP_DOMAIN_EDITION = 11;
- const GEOIP_COUNTRY_EDITION_V6 = 12;
- const GEOIP_LOCATIONA_EDITION = 13;
- const GEOIP_ACCURACYRADIUS_EDITION = 14;
- const GEOIP_CITY_EDITION_REV1_V6 = 30;
- const GEOIP_CITY_EDITION_REV0_V6 = 31;
- const GEOIP_NETSPEED_EDITION_REV1 = 32;
- const GEOIP_NETSPEED_EDITION_REV1_V6 = 33;
- const GEOIP_USERTYPE_EDITION = 28;
- const GEOIP_USERTYPE_EDITION_V6 = 29;
- const GEOIP_ASNUM_EDITION_V6 = 21;
- const GEOIP_ISP_EDITION_V6 = 22;
- const GEOIP_ORG_EDITION_V6 = 23;
- const GEOIP_DOMAIN_EDITION_V6 = 24;
- /**
- * Flags.
- *
- * @var int
- */
- public $flags;
- /**
- * File handler.
- *
- * @var resource
- */
- public $filehandle;
- /**
- * Memory buffer.
- *
- * @var string
- */
- public $memory_buffer;
- /**
- * Database type.
- *
- * @var int
- */
- public $databaseType;
- /**
- * Database segments.
- *
- * @var int
- */
- public $databaseSegments;
- /**
- * Record length.
- *
- * @var int
- */
- public $record_length;
- /**
- * Shmid.
- *
- * @var string
- */
- public $shmid;
- /**
- * Two letters country codes.
- *
- * @var array
- */
- 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',
- );
- /**
- * 3 letters country codes.
- *
- * @var array
- */
- 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',
- );
- /**
- * Contry names.
- *
- * @var array
- */
- 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',
- );
- /**
- * 2 letters continent codes.
- *
- * @var array
- */
- 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',
- '--',
- );
- /** @var WC_Logger Logger instance */
- public static $log = false;
- /**
- * Logging method.
- *
- * @param string $message Log message.
- * @param string $level Optional. Default 'info'.
- * emergency|alert|critical|error|warning|notice|info|debug
- */
- public static function log( $message, $level = 'info' ) {
- if ( empty( self::$log ) ) {
- self::$log = wc_get_logger();
- }
- self::$log->log( $level, $message, array( 'source' => 'geoip' ) );
- }
- /**
- * Open geoip file.
- *
- * @param string $filename
- * @param int $flags
- */
- public function geoip_open( $filename, $flags ) {
- $this->flags = $flags;
- if ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $this->shmid = @shmop_open( self::GEOIP_SHM_KEY, 'a', 0, 0 );
- } else {
- if ( $this->filehandle = fopen( $filename, 'rb' ) ) {
- if ( $this->flags & self::GEOIP_MEMORY_CACHE ) {
- $s_array = fstat( $this->filehandle );
- $this->memory_buffer = fread( $this->filehandle, $s_array['size'] );
- }
- } else {
- $this->log( 'GeoIP API: Can not open ' . $filename, 'error' );
- }
- }
- $this->_setup_segments();
- }
- /**
- * Setup segments.
- *
- * @return WC_Geo_IP instance
- */
- private function _setup_segments() {
- $this->databaseType = self::GEOIP_COUNTRY_EDITION;
- $this->record_length = self::STANDARD_RECORD_LENGTH;
- if ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $offset = @shmop_size( $this->shmid ) - 3;
- for ( $i = 0; $i < self::STRUCTURE_INFO_MAX_SIZE; $i++ ) {
- $delim = @shmop_read( $this->shmid, $offset, 3 );
- $offset += 3;
- if ( ( chr( 255 ) . chr( 255 ) . chr( 255 ) ) == $delim ) {
- $this->databaseType = ord( @shmop_read( $this->shmid, $offset, 1 ) );
- if ( $this->databaseType >= 106 ) {
- $this->databaseType -= 105;
- }
- $offset++;
- if ( self::GEOIP_REGION_EDITION_REV0 == $this->databaseType ) {
- $this->databaseSegments = self::GEOIP_STATE_BEGIN_REV0;
- } elseif ( self::GEOIP_REGION_EDITION_REV1 == $this->databaseType ) {
- $this->databaseSegments = self::GEOIP_STATE_BEGIN_REV1;
- } elseif ( ( self::GEOIP_CITY_EDITION_REV0 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV1 == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_USERTYPE_EDITION == $this->databaseType )
- || ( self::GEOIP_USERTYPE_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_LOCATIONA_EDITION == $this->databaseType )
- || ( self::GEOIP_ACCURACYRADIUS_EDITION == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV0_V6 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV1_V6 == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION_REV1 == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION_REV1_V6 == $this->databaseType )
- || ( self::GEOIP_ASNUM_EDITION == $this->databaseType )
- || ( self::GEOIP_ASNUM_EDITION_V6 == $this->databaseType )
- ) {
- $this->databaseSegments = 0;
- $buf = @shmop_read( $this->shmid, $offset, self::SEGMENT_RECORD_LENGTH );
- for ( $j = 0; $j < self::SEGMENT_RECORD_LENGTH; $j++ ) {
- $this->databaseSegments += ( ord( $buf[ $j ] ) << ( $j * 8 ) );
- }
- if ( ( self::GEOIP_ORG_EDITION == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION_V6 == $this->databaseType )
- ) {
- $this->record_length = self::ORG_RECORD_LENGTH;
- }
- }
- break;
- } else {
- $offset -= 4;
- }
- }
- if ( ( self::GEOIP_COUNTRY_EDITION == $this->databaseType )
- || ( self::GEOIP_COUNTRY_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_PROXY_EDITION == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION == $this->databaseType )
- ) {
- $this->databaseSegments = self::GEOIP_COUNTRY_BEGIN;
- }
- } else {
- $filepos = ftell( $this->filehandle );
- fseek( $this->filehandle, -3, SEEK_END );
- for ( $i = 0; $i < self::STRUCTURE_INFO_MAX_SIZE; $i++ ) {
- $delim = fread( $this->filehandle, 3 );
- if ( ( chr( 255 ) . chr( 255 ) . chr( 255 ) ) == $delim ) {
- $this->databaseType = ord( fread( $this->filehandle, 1 ) );
- if ( $this->databaseType >= 106 ) {
- $this->databaseType -= 105;
- }
- if ( self::GEOIP_REGION_EDITION_REV0 == $this->databaseType ) {
- $this->databaseSegments = self::GEOIP_STATE_BEGIN_REV0;
- } elseif ( self::GEOIP_REGION_EDITION_REV1 == $this->databaseType ) {
- $this->databaseSegments = self::GEOIP_STATE_BEGIN_REV1;
- } elseif ( ( self::GEOIP_CITY_EDITION_REV0 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV1 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV0_V6 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV1_V6 == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_LOCATIONA_EDITION == $this->databaseType )
- || ( self::GEOIP_ACCURACYRADIUS_EDITION == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION_REV1 == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION_REV1_V6 == $this->databaseType )
- || ( self::GEOIP_USERTYPE_EDITION == $this->databaseType )
- || ( self::GEOIP_USERTYPE_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ASNUM_EDITION == $this->databaseType )
- || ( self::GEOIP_ASNUM_EDITION_V6 == $this->databaseType )
- ) {
- $this->databaseSegments = 0;
- $buf = fread( $this->filehandle, self::SEGMENT_RECORD_LENGTH );
- for ( $j = 0; $j < self::SEGMENT_RECORD_LENGTH; $j++ ) {
- $this->databaseSegments += ( ord( $buf[ $j ] ) << ( $j * 8 ) );
- }
- if ( ( self::GEOIP_ORG_EDITION == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION_V6 == $this->databaseType )
- ) {
- $this->record_length = self::ORG_RECORD_LENGTH;
- }
- }
- break;
- } else {
- fseek( $this->filehandle, -4, SEEK_CUR );
- }
- }
- if ( ( self::GEOIP_COUNTRY_EDITION == $this->databaseType )
- || ( self::GEOIP_COUNTRY_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_PROXY_EDITION == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION == $this->databaseType )
- ) {
- $this->databaseSegments = self::GEOIP_COUNTRY_BEGIN;
- }
- fseek( $this->filehandle, $filepos, SEEK_SET );
- }
- return $this;
- }
- /**
- * Close geoip file.
- *
- * @return bool
- */
- public function geoip_close() {
- if ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- return true;
- }
- return fclose( $this->filehandle );
- }
- /**
- * Common get record.
- *
- * @param string $seek_country
- * @return WC_Geo_IP_Record instance
- */
- private function _common_get_record( $seek_country ) {
- // 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' );
- }
- $record_pointer = $seek_country + ( 2 * $this->record_length - 1 ) * $this->databaseSegments;
- if ( $this->flags & self::GEOIP_MEMORY_CACHE ) {
- $record_buf = substr( $this->memory_buffer, $record_pointer, FULL_RECORD_LENGTH );
- } elseif ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $record_buf = @shmop_read( $this->shmid, $record_pointer, FULL_RECORD_LENGTH );
- } else {
- fseek( $this->filehandle, $record_pointer, SEEK_SET );
- $record_buf = fread( $this->filehandle, FULL_RECORD_LENGTH );
- }
- $record = new WC_Geo_IP_Record();
- $record_buf_pos = 0;
- $char = ord( substr( $record_buf, $record_buf_pos, 1 ) );
- $record->country_code = $this->GEOIP_COUNTRY_CODES[ $char ];
- $record->country_code3 = $this->GEOIP_COUNTRY_CODES3[ $char ];
- $record->country_name = $this->GEOIP_COUNTRY_NAMES[ $char ];
- $record->continent_code = $this->GEOIP_CONTINENT_CODES[ $char ];
- $str_length = 0;
- $record_buf_pos++;
- // Get region
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- while ( 0 != $char ) {
- $str_length++;
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- }
- if ( $str_length > 0 ) {
- $record->region = substr( $record_buf, $record_buf_pos, $str_length );
- }
- $record_buf_pos += $str_length + 1;
- $str_length = 0;
- // Get city
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- while ( 0 != $char ) {
- $str_length++;
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- }
- if ( $str_length > 0 ) {
- $record->city = substr( $record_buf, $record_buf_pos, $str_length );
- }
- $record_buf_pos += $str_length + 1;
- $str_length = 0;
- // Get postal code
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- while ( 0 != $char ) {
- $str_length++;
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- }
- if ( $str_length > 0 ) {
- $record->postal_code = substr( $record_buf, $record_buf_pos, $str_length );
- }
- $record_buf_pos += $str_length + 1;
- // Get latitude and longitude
- $latitude = 0;
- $longitude = 0;
- for ( $j = 0; $j < 3; ++$j ) {
- $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
- $latitude += ( $char << ( $j * 8 ) );
- }
- $record->latitude = ( $latitude / 10000 ) - 180;
- for ( $j = 0; $j < 3; ++$j ) {
- $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
- $longitude += ( $char << ( $j * 8 ) );
- }
- $record->longitude = ( $longitude / 10000 ) - 180;
- if ( self::GEOIP_CITY_EDITION_REV1 == $this->databaseType ) {
- $metroarea_combo = 0;
- if ( 'US' === $record->country_code ) {
- for ( $j = 0; $j < 3; ++$j ) {
- $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
- $metroarea_combo += ( $char << ( $j * 8 ) );
- }
- $record->metro_code = $record->dma_code = floor( $metroarea_combo / 1000 );
- $record->area_code = $metroarea_combo % 1000;
- }
- }
- if ( $mbExists ) {
- mb_internal_encoding( $enc );
- }
- return $record;
- }
- /**
- * Get record.
- *
- * @param int $ipnum
- * @return WC_Geo_IP_Record instance
- */
- private function _get_record( $ipnum ) {
- $seek_country = $this->_geoip_seek_country( $ipnum );
- if ( $seek_country == $this->databaseSegments ) {
- return null;
- }
- return $this->_common_get_record( $seek_country );
- }
- /**
- * Seek country IPv6.
- *
- * @param int $ipnum
- * @return string
- */
- public function _geoip_seek_country_v6( $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 ( $this->flags & self::GEOIP_MEMORY_CACHE ) {
- $buf = $this->_safe_substr(
- $this->memory_buffer,
- 2 * $this->record_length * $offset,
- 2 * $this->record_length
- );
- } elseif ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $buf = @shmop_read(
- $this->shmid,
- 2 * $this->record_length * $offset,
- 2 * $this->record_length
- );
- } else {
- if ( 0 != fseek( $this->filehandle, 2 * $this->record_length * $offset, SEEK_SET ) ) {
- break;
- }
- $buf = fread( $this->filehandle, 2 * $this->record_length );
- }
- $x = array( 0, 0 );
- for ( $i = 0; $i < 2; ++$i ) {
- for ( $j = 0; $j < $this->record_length; ++$j ) {
- $x[ $i ] += ord( $buf[ $this->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] >= $this->databaseSegments ) {
- return $x[1];
- }
- $offset = $x[1];
- } else {
- if ( $x[0] >= $this->databaseSegments ) {
- return $x[0];
- }
- $offset = $x[0];
- }
- }
- $this->log( 'GeoIP API: Error traversing database - perhaps it is corrupt?', 'error' );
- return false;
- }
- /**
- * Seek country.
- *
- * @param int $ipnum
- * @return string
- */
- private function _geoip_seek_country( $ipnum ) {
- $offset = 0;
- for ( $depth = 31; $depth >= 0; --$depth ) {
- if ( $this->flags & self::GEOIP_MEMORY_CACHE ) {
- $buf = $this->_safe_substr(
- $this->memory_buffer,
- 2 * $this->record_length * $offset,
- 2 * $this->record_length
- );
- } elseif ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $buf = @shmop_read(
- $this->shmid,
- 2 * $this->record_length * $offset,
- 2 * $this->record_length
- );
- } else {
- if ( 0 != fseek( $this->filehandle, 2 * $this->record_length * $offset, SEEK_SET ) ) {
- break;
- }
- $buf = fread( $this->filehandle, 2 * $this->record_length );
- }
- $x = array( 0, 0 );
- for ( $i = 0; $i < 2; ++$i ) {
- for ( $j = 0; $j < $this->record_length; ++$j ) {
- $x[ $i ] += ord( $buf[ $this->record_length * $i + $j ] ) << ( $j * 8 );
- }
- }
- if ( $ipnum & ( 1 << $depth ) ) {
- if ( $x[1] >= $this->databaseSegments ) {
- return $x[1];
- }
- $offset = $x[1];
- } else {
- if ( $x[0] >= $this->databaseSegments ) {
- return $x[0];
- }
- $offset = $x[0];
- }
- }
- $this->log( 'GeoIP API: Error traversing database - perhaps it is corrupt?', 'error' );
- return false;
- }
- /**
- * Record by addr.
- *
- * @param string $addr
- *
- * @return WC_Geo_IP_Record
- */
- public function geoip_record_by_addr( $addr ) {
- if ( null == $addr ) {
- return 0;
- }
- $ipnum = ip2long( $addr );
- return $this->_get_record( $ipnum );
- }
- /**
- * Country ID by addr IPv6.
- *
- * @param string $addr
- * @return int|bool
- */
- public function geoip_country_id_by_addr_v6( $addr ) {
- if ( ! defined( 'AF_INET6' ) ) {
- $this->log( 'GEOIP (geoip_country_id_by_addr_v6): PHP was compiled with --disable-ipv6 option' );
- return false;
- }
- $ipnum = inet_pton( $addr );
- return $this->_geoip_seek_country_v6( $ipnum ) - self::GEOIP_COUNTRY_BEGIN;
- }
- /**
- * Country ID by addr.
- *
- * @param string $addr
- * @return int
- */
- public function geoip_country_id_by_addr( $addr ) {
- $ipnum = ip2long( $addr );
- return $this->_geoip_seek_country( $ipnum ) - self::GEOIP_COUNTRY_BEGIN;
- }
- /**
- * Country code by addr IPv6.
- *
- * @param string $addr
- * @return string
- */
- public function geoip_country_code_by_addr_v6( $addr ) {
- $country_id = $this->geoip_country_id_by_addr_v6( $addr );
- if ( false !== $country_id && isset( $this->GEOIP_COUNTRY_CODES[ $country_id ] ) ) {
- return $this->GEOIP_COUNTRY_CODES[ $country_id ];
- }
- return false;
- }
- /**
- * Country code by addr.
- *
- * @param string $addr
- * @return string
- */
- public function geoip_country_code_by_addr( $addr ) {
- if ( self::GEOIP_CITY_EDITION_REV1 == $this->databaseType ) {
- $record = $this->geoip_record_by_addr( $addr );
- if ( false !== $record ) {
- return $record->country_code;
- }
- } else {
- $country_id = $this->geoip_country_id_by_addr( $addr );
- if ( false !== $country_id && isset( $this->GEOIP_COUNTRY_CODES[ $country_id ] ) ) {
- return $this->GEOIP_COUNTRY_CODES[ $country_id ];
- }
- }
- return false;
- }
- /**
- * Encode string.
- *
- * @param string $string
- * @param int $start
- * @param int $length
- * @return string
- */
- private function _safe_substr( $string, $start, $length ) {
- // workaround php's broken substr, strpos, etc handling with
- // mbstring.func_overload and mbstring.internal_encoding
- $mb_exists = extension_loaded( 'mbstring' );
- if ( $mb_exists ) {
- $enc = mb_internal_encoding();
- mb_internal_encoding( 'ISO-8859-1' );
- }
- $buf = substr( $string, $start, $length );
- if ( $mb_exists ) {
- mb_internal_encoding( $enc );
- }
- return $buf;
- }
- }
- /**
- * Geo IP Record class.
- */
- class WC_Geo_IP_Record {
- /**
- * Country code.
- *
- * @var string
- */
- public $country_code;
- /**
- * 3 letters country code.
- *
- * @var string
- */
- public $country_code3;
- /**
- * Country name.
- *
- * @var string
- */
- public $country_name;
- /**
- * Region.
- *
- * @var string
- */
- public $region;
- /**
- * City.
- *
- * @var string
- */
- public $city;
- /**
- * Postal code.
- *
- * @var string
- */
- public $postal_code;
- /**
- * Latitude
- *
- * @var int
- */
- public $latitude;
- /**
- * Longitude.
- *
- * @var int
- */
- public $longitude;
- /**
- * Area code.
- *
- * @var int
- */
- public $area_code;
- /**
- * DMA Code.
- *
- * Metro and DMA code are the same.
- * Use metro code instead.
- *
- * @var float
- */
- public $dma_code;
- /**
- * Metro code.
- *
- * @var float
- */
- public $metro_code;
- /**
- * Continent code.
- *
- * @var string
- */
- public $continent_code;
- }
|