Changes in / [f3c679e:a493a28]


Ignore:
Files:
7 added
7 edited

Legend:

Unmodified
Added
Removed
  • LICENSE.txt

    rf3c679e ra493a28  
    103103   http://creativecommons.org/licenses/by-sa/3.0/
    104104   This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
     105
     106   GeoIP API 1.3.1:
     107   See licenses/LICENSE-LGPLv2.1.txt
    105108
    106109
  • build.properties

    rf3c679e ra493a28  
    114114#bundle.routerInfos.count=200
    115115#bundle.routerInfos.i2pConfigDir=/PATH/TO/.i2p
     116
     117### Debian/Ubuntu packages ###
     118# Don't include geoip files, we will use geoip-database package
     119#with-geoip-database=true
  • build.xml

    rf3c679e ra493a28  
    700700            <group title="Core SDK (i2p.jar)" packages="net.i2p:net.i2p.*:net.i2p.client:net.i2p.client.*:net.i2p.internal:net.i2p.internal.*:freenet.support.CPUInformation:org.bouncycastle.oldcrypto:org.bouncycastle.oldcrypto.*:gnu.crypto.*:gnu.getopt:gnu.gettext:com.nettgryppa.security:net.metanotion:net.metanotion.*:org.apache.http.conn.ssl:org.apache.http.conn.util:org.apache.http.util" />
    701701            <group title="Streaming Library" packages="net.i2p.client.streaming:net.i2p.client.streaming.impl" />
    702             <group title="Router" packages="net.i2p.router:net.i2p.router.*:net.i2p.data.i2np:net.i2p.data.router:org.cybergarage:org.cybergarage.*:org.freenetproject:org.xlattice.crypto.filters" />
     702            <group title="Router" packages="net.i2p.router:net.i2p.router.*:net.i2p.data.i2np:net.i2p.data.router:org.cybergarage:org.cybergarage.*:org.freenetproject:org.xlattice.crypto.filters:com.maxmind.geoip" />
    703703            <group title="Router Console" packages="net.i2p.router.web:net.i2p.router.update:net.i2p.router.news" />
    704704            <!-- apps and bridges starting here, alphabetical please -->
     
    14821482    </target>
    14831483
    1484     <!-- GeoIP files and flag icons -->
    1485     <target name="prepgeoupdate">
    1486         <copy file="installer/resources/geoip.txt" todir="pkg-temp/geoip/" />
    1487         <copy file="installer/resources/geoipv6.dat.gz" todir="pkg-temp/geoip/" />
     1484    <!-- GeoIP files -->
     1485    <target name="prepgeoupdate" depends="prepgeoupdate-unlesspkg" >
    14881486        <copy file="installer/resources/countries.txt" todir="pkg-temp/geoip/" />
    14891487        <copy file="installer/resources/continents.txt" todir="pkg-temp/geoip/" />
     
    14911489        <copy file="installer/resources/public-suffix-list.txt" todir="pkg-temp/geoip/" />
    14921490       -->
     1491    </target>
     1492
     1493    <!-- GeoIP files, set withGeoIPDatabase=true in override.properties to prevent -->
     1494    <!-- As of 0.9.26, the files are not included in Debian/Ubuntu builds. -->
     1495    <target name="prepgeoupdate-unlesspkg" unless="${with-geoip-database}" >
     1496        <copy file="installer/resources/geoip.txt" todir="pkg-temp/geoip/" />
     1497        <copy file="installer/resources/geoipv6.dat.gz" todir="pkg-temp/geoip/" />
    14931498    </target>
    14941499
     
    19921997                <exclude name="debian-alt/**"/>
    19931998                <exclude name="**/*.sh"/>
     1999                <exclude name="installer/resources/geoip.txt"/>
     2000                <exclude name="installer/resources/geoipv6.dat.gz"/>
    19942001            </tarfileset>
    19952002            <tarfileset dir="../i2p-${Extended.Version}" prefix="/i2p-${Extended.Version}" filemode="755">
  • debian/control

    rf3c679e ra493a28  
    7171Priority: optional
    7272Depends: ${misc:Depends}, ${java:Depends}, ${shlibs:Depends},
    73  openjdk-8-jre-headless | openjdk-7-jre-headless | default-jre-headless | java8-runtime-headless | java7-runtime-headless, libecj-java
     73 openjdk-8-jre-headless | openjdk-7-jre-headless | default-jre-headless | java8-runtime-headless | java7-runtime-headless,
     74 libecj-java,
     75 geoip-database
    7476Replaces: i2p ( << 0.8.6-5)
    7577Breaks: i2p (<< 0.8.6-5)
  • debian/repack.sh

    rf3c679e ra493a28  
    3030                        --delete '*/Slackware/*' \
    3131                        --delete '*/debian-alt/*' \
     32                        --delete '*/installer/resources/geoip.txt' \
     33                        --delete '*/installer/resources/geoipv6.dat.gz' \
    3234                        --delete '*/debian/*' > "$tdir/${fname}"
    3335
  • debian/rules

    rf3c679e ra493a28  
    7777        @/bin/echo -e "javac.compilerargs=-bootclasspath $(JAVA_HOME)/jre/lib/rt.jar:$(JAVA_HOME)/jre/lib/jce.jar" >> $(CURDIR)/override.properties
    7878        @/bin/echo -e "javac.compilerargs7=-bootclasspath $(JAVA_HOME)/jre/lib/rt.jar:$(JAVA_HOME)/jre/lib/jce.jar" >> $(CURDIR)/override.properties
     79        @/bin/echo -e "with-geoip-database=true" >> $(CURDIR)/override.properties
    7980        @/bin/echo -e "build.built-by=debian" >> $(CURDIR)/override.properties
    8081        TZ=UTC JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 ant preppkg-unix javadoc
  • router/java/src/net/i2p/router/transport/GeoIP.java

    rf3c679e ra493a28  
    1717import java.util.concurrent.atomic.AtomicBoolean;
    1818
     19import com.maxmind.geoip.InvalidDatabaseException;
     20import com.maxmind.geoip.LookupService;
     21
    1922import net.i2p.I2PAppContext;
    2023import net.i2p.data.DataHelper;
     
    2528import net.i2p.util.ConcurrentHashSet;
    2629import net.i2p.util.Log;
     30import net.i2p.util.SystemVersion;
    2731
    2832/**
     
    5761    private int _lookupRunCount;
    5862   
     63    static final String PROP_GEOIP_ENABLED = "routerconsole.geoip.enable";
     64    public static final String PROP_GEOIP_DIR = "geoip.dir";
     65    public static final String GEOIP_DIR_DEFAULT = "geoip";
     66    static final String GEOIP_FILE_DEFAULT = "geoip.txt";
     67    static final String COUNTRY_FILE_DEFAULT = "countries.txt";
     68    public static final String PROP_IP_COUNTRY = "i2np.lastCountry";
     69    public static final String PROP_DEBIAN_GEOIP = "geoip.dat";
     70    public static final String PROP_DEBIAN_GEOIPV6 = "geoip.v6.dat";
     71    private static final String DEBIAN_GEOIP_FILE = "/usr/share/GeoIP/GeoIP.dat";
     72    private static final String DEBIAN_GEOIPV6_FILE = "/usr/share/GeoIP/GeoIPv6.dat";
     73    private static final boolean ENABLE_DEBIAN = !SystemVersion.isWindows();
     74    /** maxmind API */
     75    private static final String UNKNOWN_COUNTRY_CODE = "--";
     76
    5977    /**
    6078     *  @param context RouterContext in production, I2PAppContext for testing only
     
    7290        readCountryFile();
    7391    }
    74    
    75     static final String PROP_GEOIP_ENABLED = "routerconsole.geoip.enable";
    76     public static final String PROP_GEOIP_DIR = "geoip.dir";
    77     public static final String GEOIP_DIR_DEFAULT = "geoip";
    78     static final String GEOIP_FILE_DEFAULT = "geoip.txt";
    79     static final String COUNTRY_FILE_DEFAULT = "countries.txt";
    80     public static final String PROP_IP_COUNTRY = "i2np.lastCountry";
    8192
    8293    /**
     
    146157                if (search.length > 0) {
    147158                    Arrays.sort(search);
    148                     String[] countries = readGeoIPFile(search);
    149                     for (int i = 0; i < countries.length; i++) {
    150                         if (countries[i] != null)
    151                             _IPToCountry.put(search[i], countries[i]);
    152                         else
    153                             _notFound.add(search[i]);
     159                    File f = new File(_context.getProperty(PROP_DEBIAN_GEOIP, DEBIAN_GEOIP_FILE));
     160                    if (ENABLE_DEBIAN && f.exists()) {
     161                        // Maxmind database
     162                        LookupService ls = null;
     163                        try {
     164                            ls = new LookupService(f, LookupService.GEOIP_STANDARD);
     165                            for (int i = 0; i < search.length; i++) {
     166                                long ip = search[i].longValue();
     167                                // returns upper case or "--"
     168                                String uc = ls.getCountry(ip).getCode();
     169                                if (!uc.equals(UNKNOWN_COUNTRY_CODE)) {
     170                                    String cached = _codeCache.get(uc.toLowerCase(Locale.US));
     171                                    _IPToCountry.put(search[i], cached);
     172                                } else {
     173                                    _notFound.add(search[i]);
     174                                }
     175                            }
     176                        } catch (IOException ioe) {
     177                            _log.error("GeoIP failure", ioe);
     178                        } catch (InvalidDatabaseException ide) {
     179                            _log.error("GeoIP failure", ide);
     180                        } finally {
     181                            if (ls != null) ls.close();
     182                        }
     183                    } else {
     184                        // Tor-style database
     185                        String[] countries = readGeoIPFile(search);
     186                        for (int i = 0; i < countries.length; i++) {
     187                            if (countries[i] != null)
     188                                _IPToCountry.put(search[i], countries[i]);
     189                            else
     190                                _notFound.add(search[i]);
     191                        }
    154192                    }
    155193                }
     
    159197                if (search.length > 0) {
    160198                    Arrays.sort(search);
    161                     String[] countries = GeoIPv6.readGeoIPFile(_context, search, _codeCache);
    162                     for (int i = 0; i < countries.length; i++) {
    163                         if (countries[i] != null)
    164                             _IPToCountry.put(search[i], countries[i]);
    165                         else
    166                             _notFound.add(search[i]);
     199                    File f = new File(_context.getProperty(PROP_DEBIAN_GEOIPV6, DEBIAN_GEOIPV6_FILE));
     200                    if (ENABLE_DEBIAN && f.exists()) {
     201                        // Maxmind database
     202                        LookupService ls = null;
     203                        try {
     204                            ls = new LookupService(f, LookupService.GEOIP_STANDARD);
     205                            for (int i = 0; i < search.length; i++) {
     206                                long ip = search[i].longValue();
     207                                String ipv6 = toV6(ip);
     208                                // returns upper case or "--"
     209                                String uc = ls.getCountryV6(ipv6).getCode();
     210                                if (!uc.equals(UNKNOWN_COUNTRY_CODE)) {
     211                                    String cached = _codeCache.get(uc.toLowerCase(Locale.US));
     212                                    _IPToCountry.put(search[i], cached);
     213                                } else {
     214                                    _notFound.add(search[i]);
     215                                }
     216                            }
     217                        } catch (IOException ioe) {
     218                            _log.error("GeoIP failure", ioe);
     219                        } catch (InvalidDatabaseException ide) {
     220                            _log.error("GeoIP failure", ide);
     221                        } finally {
     222                            if (ls != null) ls.close();
     223                        }
     224                    } else {
     225                        // Tor-style database
     226                        String[] countries = GeoIPv6.readGeoIPFile(_context, search, _codeCache);
     227                        for (int i = 0; i < countries.length; i++) {
     228                            if (countries[i] != null)
     229                                _IPToCountry.put(search[i], countries[i]);
     230                            else
     231                                _notFound.add(search[i]);
     232                        }
    167233                    }
    168234                }
     
    406472
    407473    /**
     474     * @return e.g. aabb:ccdd:eeff:1122::
     475     * @since 0.9.26 for maxmind
     476     */
     477    private static String toV6(long ip) {
     478        StringBuilder buf = new StringBuilder(21);
     479        for (int i = 0; i < 4; i++) {
     480            buf.append(Long.toHexString((ip >> ((3-i)*16)) & 0xffff));
     481            buf.append(':');
     482        }
     483        buf.append(':');
     484        return buf.toString();
     485    }
     486
     487    /**
    408488     * Get the country for a country code
    409489     * @param code two-letter lower case code
Note: See TracChangeset for help on using the changeset viewer.