This repository has been archived by the owner on Nov 7, 2023. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implemented GeoIP support, made several improvements. Not finished.
- Loading branch information
1 parent
4262a0e
commit f6283c7
Showing
30 changed files
with
16,189 additions
and
162 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
/** | ||
* Country.java | ||
* | ||
* Copyright (C) 2003 MaxMind LLC. All Rights Reserved. | ||
* | ||
* This library is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU Lesser General Public | ||
* License as published by the Free Software Foundation; either | ||
* version 2 of the License, or (at your option) any later version. | ||
* | ||
* This library is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public | ||
* License along with this library; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
*/ | ||
|
||
package com.maxmind.geoip; | ||
|
||
/** | ||
* Represents a country. | ||
* | ||
* @author Matt Tucker | ||
*/ | ||
public class Country { | ||
|
||
private String code; | ||
private String name; | ||
|
||
/** | ||
* Creates a new Country. | ||
* | ||
* @param code the country code. | ||
* @param name the country name. | ||
*/ | ||
public Country(String code, String name) { | ||
this.code = code; | ||
this.name = name; | ||
} | ||
|
||
/** | ||
* Returns the ISO two-letter country code of this country. | ||
* | ||
* @return the country code. | ||
*/ | ||
public String getCode() { | ||
return code; | ||
} | ||
|
||
/** | ||
* Returns the name of this country. | ||
* | ||
* @return the country name. | ||
*/ | ||
public String getName() { | ||
return name; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
/** | ||
* DatabaseInfo.java | ||
* | ||
* Copyright (C) 2003 MaxMind LLC. All Rights Reserved. | ||
* | ||
* This library is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU Lesser General Public | ||
* License as published by the Free Software Foundation; either | ||
* version 2 of the License, or (at your option) any later version. | ||
* | ||
* This library is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public | ||
* License along with this library; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
*/ | ||
|
||
package com.maxmind.geoip; | ||
|
||
import java.util.Date; | ||
import java.text.SimpleDateFormat; | ||
import java.text.ParseException; | ||
|
||
/** | ||
* Encapsulates metadata about the GeoIP database. The database has a date, is a premium or | ||
* standard version, and is one of the following types: | ||
* | ||
* <ul> | ||
* <li>Country edition -- this is the most common version of the database. It includes | ||
* the name of the country and it's ISO country code given an IP address. | ||
* <li>Region edition -- includes the country information as well as | ||
* what U.S. state or Canadian province the IP address is from if the IP address | ||
* is from the U.S. or Canada. | ||
* <li>City edition -- includes country, region, city, postal code, latitude, and | ||
* longitude information. | ||
* <li>Org edition -- includes netblock owner. | ||
* <li>ISP edition -- ISP information. | ||
* </ul> | ||
* | ||
* @see com.maxmind.geoip.LookupService#getDatabaseInfo() | ||
* @author Matt Tucker | ||
*/ | ||
public class DatabaseInfo { | ||
|
||
public final static int COUNTRY_EDITION = 1; | ||
public final static int REGION_EDITION_REV0 = 7; | ||
public final static int REGION_EDITION_REV1 = 3; | ||
public final static int CITY_EDITION_REV0 = 6; | ||
public final static int CITY_EDITION_REV1 = 2; | ||
public final static int ORG_EDITION = 5; | ||
public final static int ISP_EDITION = 4; | ||
public final static int PROXY_EDITION = 8; | ||
public final static int ASNUM_EDITION = 9; | ||
public final static int NETSPEED_EDITION = 10; | ||
public final static int DOMAIN_EDITION = 11; | ||
public final static int COUNTRY_EDITION_V6 = 12; | ||
public final static int ASNUM_EDITION_V6 = 21; | ||
public final static int ISP_EDITION_V6 = 22; | ||
public final static int ORG_EDITION_V6 = 23; | ||
public final static int DOMAIN_EDITION_V6 = 24; | ||
public final static int CITY_EDITION_REV1_V6 = 30; | ||
public final static int CITY_EDITION_REV0_V6 = 31; | ||
public final static int NETSPEED_EDITION_REV1 = 32; | ||
public final static int NETSPEED_EDITION_REV1_V6 = 33; | ||
|
||
|
||
private static SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); | ||
|
||
private String info; | ||
|
||
/** | ||
* Creates a new DatabaseInfo object given the database info String. | ||
* @param info | ||
*/ | ||
public DatabaseInfo(String info) { | ||
this.info = info; | ||
} | ||
|
||
public int getType() { | ||
if (info == null || info.equals("")) { | ||
return COUNTRY_EDITION; | ||
} | ||
else { | ||
// Get the type code from the database info string and then | ||
// subtract 105 from the value to preserve compatability with | ||
// databases from April 2003 and earlier. | ||
return Integer.parseInt(info.substring(4, 7)) - 105; | ||
} | ||
} | ||
|
||
/** | ||
* Returns true if the database is the premium version. | ||
* | ||
* @return true if the premium version of the database. | ||
*/ | ||
public boolean isPremium() { | ||
return info.indexOf("FREE") < 0; | ||
} | ||
|
||
/** | ||
* Returns the date of the database. | ||
* | ||
* @return the date of the database. | ||
*/ | ||
public Date getDate() { | ||
for (int i=0; i<info.length()-9; i++) { | ||
if (Character.isWhitespace(info.charAt(i))) { | ||
String dateString = info.substring(i+1, i+9); | ||
try { | ||
synchronized (formatter) { | ||
return formatter.parse(dateString); | ||
} | ||
} | ||
catch (ParseException pe) { } | ||
break; | ||
} | ||
} | ||
return null; | ||
} | ||
|
||
public String toString() { | ||
return info; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/** | ||
* Location.java | ||
* | ||
* Copyright (C) 2004 MaxMind LLC. All Rights Reserved. | ||
* | ||
* This library is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Lesser Public | ||
* License as published by the Free Software Foundation; either | ||
* version 2 of the License, or (at your option) any later version. | ||
* | ||
* This library is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public | ||
* License along with this library; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
*/ | ||
|
||
package com.maxmind.geoip; | ||
|
||
public class Location { | ||
public String countryCode; | ||
public String countryName; | ||
public String region; | ||
public String city; | ||
public String postalCode; | ||
public float latitude; | ||
public float longitude; | ||
public int dma_code; | ||
public int area_code; | ||
public int metro_code; | ||
|
||
private final static double EARTH_DIAMETER = 2 * 6378.2; | ||
private final static double PI = 3.14159265; | ||
private final static double RAD_CONVERT = PI / 180; | ||
|
||
public double distance (Location loc) { | ||
double delta_lat, delta_lon; | ||
double temp; | ||
|
||
float lat1 = latitude; | ||
float lon1 = longitude; | ||
float lat2 = loc.latitude; | ||
float lon2 = loc.longitude; | ||
|
||
// convert degrees to radians | ||
lat1 *= RAD_CONVERT; | ||
lat2 *= RAD_CONVERT; | ||
|
||
// find the deltas | ||
delta_lat = lat2 - lat1; | ||
delta_lon = (lon2 - lon1) * RAD_CONVERT; | ||
|
||
// Find the great circle distance | ||
temp = Math.pow(Math.sin(delta_lat/2),2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(delta_lon/2),2); | ||
return EARTH_DIAMETER * Math.atan2(Math.sqrt(temp),Math.sqrt(1-temp)); | ||
} | ||
} |
Oops, something went wrong.