Changeset 66c2664 for router


Ignore:
Timestamp:
Nov 17, 2016 1:45:36 PM (4 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
7a1a1d5
Parents:
68e5fd6
Message:

Blocklist: Add support for IPv6 in blocklist.txt
fixup main() test, minor cleanups

File:
1 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/Blocklist.java

    r68e5fd6 r66c2664  
    249249    *   44-byte Base64 router hash
    250250    *
     251    * Acceptable formats (IPV6 only):
     252    *   comment:IPv6 (must replace : with ; e.g. abcd;1234;0;12;;ff)
     253    *   IPv6 (must replace : with ; e.g. abcd;1234;0;12;;ff)
     254    *
    251255    * No whitespace allowed after the last ':'.
    252256    *
     
    291295                }
    292296                byte[] ip1 = e.ip1;
    293                 byte[] ip2 = e.ip2;
    294 
    295                 store(ip1, ip2, count++);
    296                 ipcount += 1 + toInt(ip2) - toInt(ip1); // includes dups, oh well
     297                if (ip1.length == 4) {
     298                    byte[] ip2 = e.ip2;
     299                    store(ip1, ip2, count++);
     300                    ipcount += 1 + toInt(ip2) - toInt(ip1); // includes dups, oh well
     301                } else {
     302                    // IPv6
     303                    add(ip1);
     304                }
    297305            }
    298306        } catch (IOException ioe) {
     
    394402        int mask = -1;
    395403        String comment = null;
    396         int index = buf.indexOf("#");
     404        int index = buf.indexOf('#');
    397405        if (index == 0)
    398406            return null;  // comment
    399         index = buf.lastIndexOf(":");
     407        index = buf.lastIndexOf(':');
    400408        if (index >= 0) {
    401409            comment = buf.substring(0, index);
    402410            start1 = index + 1;
    403411        }
    404         if (end1 - start1 == 44 && buf.substring(start1).indexOf(".") < 0) {
     412        if (end1 - start1 == 44 && buf.substring(start1).indexOf('.') < 0) {
    405413            byte b[] = Base64.decode(buf.substring(start1));
    406414            if (b != null)
    407415                return new Entry(comment, Hash.create(b), null, null);
    408416        }
    409         index = buf.indexOf("-", start1);
     417        index = buf.indexOf('-', start1);
    410418        if (index >= 0) {
    411419            end1 = index;
    412420            start2 = index + 1;
    413421        } else {
    414             index = buf.indexOf("/", start1);
     422            index = buf.indexOf('/', start1);
    415423            if (index >= 0) {
    416424                end1 = index;
     
    421429            return null;  // blank
    422430        try {
    423             InetAddress pi = InetAddress.getByName(buf.substring(start1, end1));
     431            String sip = buf.substring(start1, end1);
     432            // IPv6
     433            sip = sip.replace(';', ':');
     434            InetAddress pi = InetAddress.getByName(sip);
    424435            if (pi == null) return null;
    425436            ip1 = pi.getAddress();
    426             if (ip1.length != 4)
    427                 throw new UnknownHostException();
     437            //if (ip1.length != 4)
     438            //    throw new UnknownHostException();
    428439            if (start2 >= 0) {
    429440                pi = InetAddress.getByName(buf.substring(start2));
     
    463474            }
    464475        } catch (UnknownHostException uhe) {
    465             if (shouldLog && _log.shouldLog(Log.ERROR))
    466                 _log.error("Format error in the blocklist file: " + buf);
     476            if (shouldLog)
     477                _log.logAlways(Log.WARN, "Format error in the blocklist file: " + buf);
    467478            return null;
    468479        } catch (NumberFormatException nfe) {
    469             if (shouldLog && _log.shouldLog(Log.ERROR))
    470                 _log.error("Format error in the blocklist file: " + buf);
     480            if (shouldLog)
     481                _log.logAlways(Log.WARN, "Format error in the blocklist file: " + buf);
    471482            return null;
    472483        } catch (IndexOutOfBoundsException ioobe) {
    473             if (shouldLog && _log.shouldLog(Log.ERROR))
    474                 _log.error("Format error in the blocklist file: " + buf);
     484            if (shouldLog)
     485                _log.logAlways(Log.WARN, "Format error in the blocklist file: " + buf);
    475486            return null;
    476487        }
     
    744755    }
    745756
     757    /**
     758     *  IPv4 only
     759     */
    746760    private void store(byte ip1[], byte ip2[], int idx) {
    747761        _blocklist[idx] = toEntry(ip1, ip2);
     
    10361050
    10371051/****
    1038     public static void main(String args[]) {
    1039         Blocklist b = new Blocklist();
    1040         if ( (args != null) && (args.length == 1) )
    1041             b.readBlocklistFile(args[0]);
     1052    public static void main(String args[]) throws Exception {
     1053        Blocklist b = new Blocklist(new Router().getContext());
     1054        if (args != null && args.length == 1) {
     1055            File f = new File(args[0]);
     1056            b.allocate(Collections.singletonList(f));
     1057            int count = b.readBlocklistFile(f, 0);
     1058            b.merge(count);
     1059            Writer w = new java.io.OutputStreamWriter(System.out);
     1060            b.renderStatusHTML(w);
     1061        }
    10421062        System.out.println("Saved " + b._blocklistSize + " records");
    10431063        String tests[] = {"0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.255", "1.0.0.0",
Note: See TracChangeset for help on using the changeset viewer.