Changeset 1215a70


Ignore:
Timestamp:
Nov 22, 2015 4:00:16 PM (5 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
302ec77
Parents:
9a9832c (diff), ce96234 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

propagate from branch 'i2p.i2p.zzz.test2' (head 8fa44268a1dd2b7baaf01806e6994281ab031870)

to branch 'i2p.i2p' (head 44afdaa15ce8a95c112c7d58a5908f401c1a0145)

Files:
148 edited

Legend:

Unmodified
Added
Removed
  • INSTALL-headless.txt

    r9a9832c r1215a70  
    2626
    2727To start I2P:
    28    (*nix): sh i2prouter start
     28   (*nix, BSD, Mac): sh i2prouter start
    2929   (win*): I2P.exe
    30    (non-x86 platforms PPC, ARM, etc): sh runplain.sh
     30   (platforms without wrapper support): sh runplain.sh
    3131
    3232To stop I2P (gracefully):
    3333   lynx http://localhost:7657/summaryframe (click "Shutdown")
     34   or (*nix, BSD, Mac) sh i2prouter graceful
    3435
    3536To stop I2P immediately:
    36    sh i2prouter stop
     37   (*nix, BSD, Mac) sh i2prouter stop
    3738
    3839To uninstall I2P:
     
    4041
    4142Supported JVMs:
    42   All platforms: Java 1.6 or higher required; 1.7 or higher recommended
     43  All platforms: Java 1.7 or higher required
    4344  Windows: OpenJDK or Oracle from http://java.com/download
    4445  Linux:   OpenJDK or Oracle from http://java.com/download
  • INSTALL.txt

    r9a9832c r1215a70  
    22
    33Prerequisites to build from source:
    4         Java SDK (preferably Oracle/Sun or OpenJDK) 1.6.0 or higher
     4        Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
    55          Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
     6          Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
    67        Apache Ant 1.7.0 or higher
    78        The xgettext, msgfmt, and msgmerge tools installed
     
    4142
    4243To start I2P:
    43    (*nix): sh i2prouter start
     44   (*nix, BSD, Mac): sh i2prouter start
    4445   (win*): I2P.exe or i2prouter.bat
    45    (non-x86 platforms PPC, ARM, etc): sh runplain.sh
     46   (platforms without wrapper support): sh runplain.sh
    4647
    4748To install I2P as a system service:
    48    (*nix) sh i2prouter install
     49   (*nix, BSD, Mac) sh i2prouter install
    4950   (win*) install_i2p_service_winnt.bat
    5051
    5152To uninstall I2P as a system service:
    52    (*nix) sh i2prouter remove
     53   (*nix, BSD, Mac) sh i2prouter remove
    5354   (win*) uninstall_i2p-service_winnt.bat
    5455
    5556To stop I2P (gracefully):
    5657   lynx http://localhost:7657/summaryframe (click "Shutdown")
     58   or (*nix, BSD, Mac) sh i2prouter graceful
    5759
    5860To stop I2P immediately:
    59    sh i2prouter stop
     61   (*nix, BSD, Mac) sh i2prouter stop
    6062
    6163To uninstall I2P:
     
    6365
    6466Supported JVMs:
    65   Windows: Latest available from http://java.com/download (1.5+ supported)
    66   Linux:   Latest available from http://java.com/download (1.5+ supported)
    67   FreeBSD: 1.5-compatible (NIO required)
     67  Windows: Latest available from http://java.com/download (1.7+ supported)
     68  Linux:   Latest available from http://java.com/download (1.7+ supported)
     69  FreeBSD: 1.7-compatible (NIO required)
    6870  Other operating systems and JVMs: See http://trac.i2p2.de/wiki/java
  • README.txt

    r9a9832c r1215a70  
    11Prerequisites to build from source:
    2         Java SDK (preferably Oracle/Sun or OpenJDK) 1.6.0 or higher
     2        Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
    33          Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
     4          Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
    45        Apache Ant 1.7.0 or higher
    56        The xgettext, msgfmt, and msgmerge tools installed
  • apps/BOB/src/net/i2p/BOB/BOB.java

    r9a9832c r1215a70  
    248248                }
    249249                if (!props.containsKey("inbound.length")) {
    250                         props.setProperty("inbound.length", "1");
     250                        props.setProperty("inbound.length", "3");
    251251                        save = true;
    252252                }
    253253                if (!props.containsKey("outbound.length")) {
    254                         props.setProperty("outbound.length", "1");
     254                        props.setProperty("outbound.length", "3");
    255255                        save = true;
    256256                }
  • apps/addressbook/java/src/net/i2p/addressbook/ConfigIterator.java

    r9a9832c r1215a70  
    3232import java.util.Map;
    3333import java.util.NoSuchElementException;
     34
     35import net.i2p.data.DataHelper;
    3436
    3537/**
     
    7072            while (inputLine != null) {
    7173                inputLine = ConfigParser.stripComments(inputLine);
    72                 String[] splitLine = inputLine.split("=");
     74                String[] splitLine = DataHelper.split(inputLine, "=");
    7375                if (splitLine.length == 2) {
    7476                    next = new ConfigEntry(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
  • apps/addressbook/java/src/net/i2p/addressbook/ConfigParser.java

    r9a9832c r1215a70  
    3636import java.util.Map;
    3737
     38import net.i2p.data.DataHelper;
    3839import net.i2p.util.SecureFile;
    3940import net.i2p.util.SecureFileOutputStream;
     
    9495        while (inputLine != null) {
    9596            inputLine = stripComments(inputLine);
    96             String[] splitLine = inputLine.split("=");
     97            String[] splitLine = DataHelper.split(inputLine, "=");
    9798            if (splitLine.length == 2) {
    9899                result.put(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
  • apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java

    r9a9832c r1215a70  
    44import java.io.File;
    55import java.io.IOException;
    6 import java.net.MalformedURLException;
    7 import java.net.URL;
     6import java.net.URI;
     7import java.net.URISyntaxException;
    88import java.util.Collections;
    99import java.util.HashMap;
     
    591591    public boolean isKnownOpenTracker(String url) {
    592592        try {
    593            URL u = new URL(url);
     593           URI u = new URI(url);
    594594           String host = u.getHost();
    595595           return host != null && SnarkManager.KNOWN_OPENTRACKERS.contains(host);
    596         } catch (MalformedURLException mue) {
     596        } catch (URISyntaxException use) {
    597597           return false;
    598598        }
  • apps/i2psnark/java/src/org/klomp/snark/Peer.java

    r9a9832c r1215a70  
    6363  // Keeps state for in/out connections.  Non-null when the handshake
    6464  // was successful, the connection setup and runs
    65   PeerState state;
     65  volatile PeerState state;
    6666
    6767  /** shared across all peers on this torrent */
  • apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java

    r9a9832c r1215a70  
    4040                                                   MagnetState.CHUNK_SIZE + 100);  // 100 for the ext msg dictionary
    4141
    42   private Thread thread;
     42  private volatile Thread thread;
    4343  private volatile boolean quit;
    4444
     
    7676    try
    7777      {
    78         PeerState ps = peer.state;
    79         while (!quit && ps != null)
     78        while (!quit)
    8079          {
     80            final PeerState ps = peer.state;
     81            if (ps == null)
     82                break;
     83
    8184            // Common variables used for some messages.
    8285            int piece;
     
    9295            if (i == 0)
    9396              {
     97                if (_log.shouldLog(Log.DEBUG))
     98                    _log.debug("Received keepalive from " + peer);
    9499                ps.keepAliveMessage();
    95                 if (_log.shouldLog(Log.DEBUG))
    96                     _log.debug("Received keepalive from " + peer);
    97100                continue;
    98101              }
     
    102105              {
    103106              case Message.CHOKE:
     107                if (_log.shouldLog(Log.DEBUG))
     108                    _log.debug("Received choke from " + peer);
    104109                ps.chokeMessage(true);
    105                 if (_log.shouldLog(Log.DEBUG))
    106                     _log.debug("Received choke from " + peer);
    107110                break;
    108111
    109112              case Message.UNCHOKE:
     113                if (_log.shouldLog(Log.DEBUG))
     114                    _log.debug("Received unchoke from " + peer);
    110115                ps.chokeMessage(false);
    111                 if (_log.shouldLog(Log.DEBUG))
    112                     _log.debug("Received unchoke from " + peer);
    113116                break;
    114117
    115118              case Message.INTERESTED:
     119                if (_log.shouldLog(Log.DEBUG))
     120                    _log.debug("Received interested from " + peer);
    116121                ps.interestedMessage(true);
    117                 if (_log.shouldLog(Log.DEBUG))
    118                     _log.debug("Received interested from " + peer);
    119122                break;
    120123
    121124              case Message.UNINTERESTED:
     125                if (_log.shouldLog(Log.DEBUG))
     126                    _log.debug("Received not interested from " + peer);
    122127                ps.interestedMessage(false);
    123                 if (_log.shouldLog(Log.DEBUG))
    124                     _log.debug("Received not interested from " + peer);
    125128                break;
    126129
    127130              case Message.HAVE:
    128131                piece = din.readInt();
     132                if (_log.shouldLog(Log.DEBUG))
     133                    _log.debug("Received havePiece(" + piece + ") from " + peer);
    129134                ps.haveMessage(piece);
    130                 if (_log.shouldLog(Log.DEBUG))
    131                     _log.debug("Received havePiece(" + piece + ") from " + peer);
    132135                break;
    133136
     
    135138                byte[] bitmap = new byte[i-1];
    136139                din.readFully(bitmap);
     140                if (_log.shouldLog(Log.DEBUG))
     141                    _log.debug("Received bitmap from " + peer  + ": size=" + (i-1) /* + ": " + ps.bitfield */ );
    137142                ps.bitfieldMessage(bitmap);
    138                 if (_log.shouldLog(Log.DEBUG))
    139                     _log.debug("Received bitmap from " + peer  + ": size=" + (i-1) /* + ": " + ps.bitfield */ );
    140143                break;
    141144
     
    144147                begin = din.readInt();
    145148                len = din.readInt();
     149                if (_log.shouldLog(Log.DEBUG))
     150                    _log.debug("Received request(" + piece + "," + begin + ") from " + peer);
    146151                ps.requestMessage(piece, begin, len);
    147                 if (_log.shouldLog(Log.DEBUG))
    148                     _log.debug("Received request(" + piece + "," + begin + ") from " + peer);
    149152                break;
    150153
     
    157160                  {
    158161                    req.read(din);
    159                     ps.pieceMessage(req);
    160162                    if (_log.shouldLog(Log.DEBUG))
    161163                        _log.debug("Received data(" + piece + "," + begin + ") from " + peer);
     164                    ps.pieceMessage(req);
    162165                  }
    163166                else
     
    176179                begin = din.readInt();
    177180                len = din.readInt();
     181                if (_log.shouldLog(Log.DEBUG))
     182                    _log.debug("Received cancel(" + piece + "," + begin + ") from " + peer);
    178183                ps.cancelMessage(piece, begin, len);
    179                 if (_log.shouldLog(Log.DEBUG))
    180                     _log.debug("Received cancel(" + piece + "," + begin + ") from " + peer);
    181184                break;
    182185
    183186              case Message.PORT:
    184187                int port = din.readUnsignedShort();
     188                if (_log.shouldLog(Log.DEBUG))
     189                    _log.debug("Received port message from " + peer);
    185190                ps.portMessage(port);
    186                 if (_log.shouldLog(Log.DEBUG))
    187                     _log.debug("Received port message from " + peer);
    188191                break;
    189192
     
    248251            _log.info("IOError talking with " + peer, ioe);
    249252      }
    250     catch (Throwable t)
     253    catch (RuntimeException t)
    251254      {
    252255        _log.error("Error talking with " + peer, t);
    253         if (t instanceof OutOfMemoryError)
    254             throw (OutOfMemoryError)t;
    255256      }
    256257    finally
  • apps/i2psnark/java/src/org/klomp/snark/Snark.java

    r9a9832c r1215a70  
    913913
    914914    /**
     915     *  Bytes not received and set to skipped.
     916     *  This is not the same as the total of all skipped files,
     917     *  since pieces may span multiple files.
     918     *
     919     *  @return exact value. or 0 if no storage yet.
     920     *  @since 0.9.24
     921     */
     922    public long getSkippedLength() {
     923        PeerCoordinator coord = coordinator;
     924        if (coord != null) {
     925            // fast way
     926            long r = getRemainingLength();
     927            if (r <= 0)
     928                return 0;
     929            long n = coord.getNeededLength();
     930            return r - n;
     931        } else if (storage != null) {
     932            // slow way
     933            return storage.getSkippedLength();
     934        }
     935        return 0;
     936    }
     937
     938    /**
    915939     *  Does not account (i.e. includes) for skipped files.
    916940     *  @return number of pieces still needed (magnet mode or not), or -1 if unknown
  • apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java

    r9a9832c r1215a70  
    190190            if (DEFAULT_TRACKERS[i-1].equals("TheBland") && !SigType.ECDSA_SHA256_P256.isAvailable())
    191191                continue;
    192             String urls[] = DEFAULT_TRACKERS[i].split("=", 2);
     192            String urls[] = DataHelper.split(DEFAULT_TRACKERS[i], "=", 2);
    193193            ann.add(urls[0]);
    194194        }
     
    10791079        if (val == null)
    10801080            return Collections.emptyList();
    1081         return Arrays.asList(val.split(","));
     1081        return Arrays.asList(DataHelper.split(val, ","));
    10821082    }
    10831083
     
    16121612        int filecount = metainfo.getFiles().size();
    16131613        int[] rv = new int[filecount];
    1614         String[] arr = pri.split(",");
     1614        String[] arr = DataHelper.split(pri, ",");
    16151615        for (int i = 0; i < filecount && i < arr.length; i++) {
    16161616            if (arr[i].length() > 0) {
     
    20522052                        ok = monitorTorrents(dir);
    20532053                    }
    2054                 } catch (Exception e) {
     2054                } catch (RuntimeException e) {
    20552055                    _log.error("Error in the DirectoryMonitor", e);
    20562056                    ok = false;
     
    20612061                        addMagnets();
    20622062                        doMagnets = false;
    2063                     } catch (Exception e) {
     2063                    } catch (RuntimeException e) {
    20642064                        _log.error("Error in the DirectoryMonitor", e);
    20652065                    }
     
    22672267                    // don't let one bad torrent kill the whole loop
    22682268                    addTorrent(name, null, !shouldAutoStart());
    2269                 } catch (Exception e) {
     2269                } catch (RuntimeException e) {
    22702270                    addMessage(_t("Error: Could not add the torrent {0}", name) + ": " + e);
    22712271                    _log.error("Unable to add the torrent " + name, e);
     
    22862286                    // don't let one bad torrent kill the whole loop
    22872287                    stopTorrent(name, true);
    2288                 } catch (Exception e) {
     2288                } catch (RuntimeException e) {
    22892289                    // don't bother with message
    22902290                }
     
    23432343            setDefaultTrackerMap(true);
    23442344        } else {
    2345             String[] toks = trackers.split(",");
     2345            String[] toks = DataHelper.split(trackers, ",");
    23462346            for (int i = 0; i < toks.length; i += 2) {
    23472347                String name = toks[i].trim().replace("&#44;", ",");
    23482348                String url = toks[i+1].trim().replace("&#44;", ",");
    23492349                if ( (name.length() > 0) && (url.length() > 0) ) {
    2350                     String urls[] = url.split("=", 2);
     2350                    String urls[] = DataHelper.split(url, "=", 2);
    23512351                    String url2 = urls.length > 1 ? urls[1] : "";
    23522352                    _trackerMap.put(name, new Tracker(name, urls[0], url2));
     
    23682368            if (name.equals("TheBland") && !SigType.ECDSA_SHA256_P256.isAvailable())
    23692369                continue;
    2370             String urls[] = DEFAULT_TRACKERS[i+1].split("=", 2);
     2370            String urls[] = DataHelper.split(DEFAULT_TRACKERS[i+1], "=", 2);
    23712371            String url2 = urls.length > 1 ? urls[1] : null;
    23722372            _trackerMap.put(name, new Tracker(name, urls[0], url2));
     
    24682468            try {
    24692469                run2();
    2470             } catch (Exception e) {
     2470            } catch (RuntimeException e) {
    24712471                _log.error("Error starting", e);
    24722472            }
     
    25962596                    addMessageNoEscape(_t("Finished recheck of torrent {0}, unchanged", link));
    25972597                }
    2598             } catch (Exception e) {
     2598            } catch (IOException e) {
    25992599                _log.error("Error rechecking " + snark.getBaseName(), e);
    26002600                addMessage(_t("Error checking the torrent {0}", snark.getBaseName()) + ": " + e);
  • apps/i2psnark/java/src/org/klomp/snark/Storage.java

    r9a9832c r1215a70  
    515515          }
    516516          rv[i] = pri;
     517      }
     518      return rv;
     519  }
     520
     521  /**
     522   *  Call setPriority() for all changed files first,
     523   *  then call this.
     524   *  The length of all the pieces that are not yet downloaded,
     525   *  and are set to skipped.
     526   *  This is not the same as the total of all skipped files,
     527   *  since pieces may span multiple files.
     528   *
     529   *  @return 0 on error, if complete, or if only one file
     530   *  @since 0.9.24
     531   */
     532  public long getSkippedLength() {
     533      int[] pri = getPiecePriorities();
     534      if (pri == null)
     535          return 0;
     536      long rv = 0;
     537      final int end = pri.length - 1;
     538      for (int i = 0; i <= end; i++) {
     539          if (pri[i] <= -9 && !bitfield.get(i)) {
     540              rv += (i != end) ? piece_size : metainfo.getPieceLength(i);
     541          }
    517542      }
    518543      return rv;
     
    749774                    rv = repl;
    750775                }
    751             } catch (Exception ex) {
     776            } catch (RuntimeException ex) {
    752777                ex.printStackTrace();
    753778            }
     
    14841509            }  // switch
    14851510          } // while
    1486       } catch (Exception e) {
     1511      } catch (RuntimeException e) {
    14871512          e.printStackTrace();
    14881513          error = true;
  • apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java

    r9a9832c r1215a70  
    2424import java.io.IOException;
    2525import java.io.InputStream;
    26 import java.net.MalformedURLException;
    27 import java.net.URL;
     26import java.net.URI;
     27import java.net.URISyntaxException;
    2828import java.util.ArrayList;
    2929import java.util.Collection;
     
    876876
    877877  /**
    878    *  @param ann an announce URL
     878   *  @param ann an announce URL, may be null, returns false if null
    879879   *  @return true for i2p hosts only
    880880   *  @since 0.7.12
    881881   */
    882882  public static boolean isValidAnnounce(String ann) {
    883     URL url;
     883    if (ann == null)
     884        return false;
     885    URI url;
    884886    try {
    885        url = new URL(ann);
    886     } catch (MalformedURLException mue) {
    887        return false;
    888     }
    889     return url.getProtocol().equals("http") &&
     887        url = new URI(ann);
     888    } catch (URISyntaxException use) {
     889        return false;
     890    }
     891    return "http".equals(url.getScheme()) && url.getHost() != null &&
    890892           (url.getHost().endsWith(".i2p") || url.getHost().equals("i2p"));
    891893  }
     
    897899   */
    898900  private static Hash getHostHash(String ann) {
    899     URL url;
     901    URI url;
    900902    try {
    901         url = new URL(ann);
    902     } catch (MalformedURLException mue) {
     903        url = new URI(ann);
     904    } catch (URISyntaxException use) {
    903905        return null;
    904906    }
    905     if (!url.getProtocol().equals("http"))
     907    if (!"http".equals(url.getScheme()))
    906908        return null;
    907909    String host = url.getHost();
     
    913915            !path.startsWith("/"))
    914916            return null;
    915         String[] parts = path.substring(1).split("[/\\?&;]", 2);
     917        String[] parts = DataHelper.split(path.substring(1), "[/\\?&;]", 2);
    916918        return ConvertToHash.getHash(parts[0]);
    917919    }
  • apps/i2psnark/java/src/org/klomp/snark/dht/NodeInfo.java

    r9a9832c r1215a70  
    103103    public NodeInfo(String s) throws DataFormatException {
    104104        super();
    105         String[] parts = s.split(":", 4);
     105        String[] parts = DataHelper.split(s, ":", 4);
    106106        if (parts.length != 4)
    107107            throw new DataFormatException("Bad format");
     
    226226            // assume dest matches, ignore it
    227227            return this.hash.equals(ni.hash) && nID.equals(ni.nID) && port == ni.port;
    228         } catch (Exception e) {
     228        } catch (RuntimeException e) {
    229229            return false;
    230230        }
  • apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java

    r9a9832c r1215a70  
    1919import java.util.Map;
    2020import java.util.Set;
    21 import java.util.TimeZone;
    2221import java.util.TreeMap;
    2322
     
    27152714            // first table - torrent info
    27162715            buf.append("<table class=\"snarkTorrentInfo\">\n");
    2717             buf.append("<tr><th><b>")
     2716            buf.append("<tr><th></th><th><b>")
    27182717               .append(_t("Torrent"))
    27192718               .append(":</b> ")
     
    27252724            buf.append("<tr><td>");
    27262725            toThemeImg(buf, "file");
    2727             buf.append("&nbsp;<b>")
     2726            buf.append("</td><td><b>")
    27282727               .append(_t("Torrent file"))
    27292728               .append(":</b> <a href=\"").append(_contextPath).append('/').append(baseName).append("\">")
     
    27332732                buf.append("<tr><td>");
    27342733                toThemeImg(buf, "file");
    2735                 buf.append("&nbsp;<b>")
     2734                buf.append("</td><td><b>")
    27362735                   .append(_t("Data location"))
    27372736                   .append(":</b> ")
     
    27422741            buf.append("<tr><td>");
    27432742            toThemeImg(buf, "details");
    2744             buf.append("&nbsp;<b>")
     2743            buf.append("</td><td><b>")
    27452744               .append(_t("Info hash"))
    27462745               .append(":</b> ")
     
    27622761                    else
    27632762                        toThemeImg(buf, "details");
    2764                     buf.append(" <b>").append(_t("Primary Tracker")).append(":</b> ");
     2763                    buf.append("</td><td><b>").append(_t("Primary Tracker")).append(":</b> ");
    27652764                    buf.append(getShortTrackerLink(announce, snark.getInfoHash()));
    27662765                    buf.append("</td></tr>");
     
    27702769                    buf.append("<tr><td>");
    27712770                    toThemeImg(buf, "details");
    2772                     buf.append(" <b>")
     2771                    buf.append("</td><td valign=\"top\"><b>")
    27732772                       .append(_t("Tracker List")).append(":</b> ");
    27742773                    for (List<String> alist2 : alist) {
     
    27952794                    buf.append("<tr><td>");
    27962795                    toThemeImg(buf, "details");
    2797                     buf.append(" <b>")
     2796                    buf.append("</td><td><b>")
    27982797                       .append(_t("Comment")).append(":</b> ")
    27992798                       .append(DataHelper.stripHTML(com))
     
    28022801                long dat = meta.getCreationDate();
    28032802                SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    2804                 String systemTimeZone = _context.getProperty("i2p.systemTimeZone");
    2805                 if (systemTimeZone != null)
    2806                     fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     2803                fmt.setTimeZone(DataHelper.getSystemTimeZone(_context));
    28072804                if (dat > 0) {
    28082805                    String date = fmt.format(new Date(dat));
    28092806                    buf.append("<tr><td>");
    28102807                    toThemeImg(buf, "details");
    2811                     buf.append(" <b>")
     2808                    buf.append("</td><td><b>")
    28122809                       .append(_t("Created")).append(":</b> ")
    28132810                       .append(date)
     
    28202817                    buf.append("<tr><td>");
    28212818                    toThemeImg(buf, "details");
    2822                     buf.append(" <b>")
     2819                    buf.append("</td><td><b>")
    28232820                       .append(_t("Created By")).append(":</b> ")
    28242821                       .append(DataHelper.stripHTML(cby))
     
    28302827                    buf.append("<tr><td>");
    28312828                    toThemeImg(buf, "details");
    2832                     buf.append(" <b>")
     2829                    buf.append("</td><td><b>")
    28332830                       .append(_t("Added")).append(":</b> ")
    28342831                       .append(date)
     
    28392836                    buf.append("<tr><td>");
    28402837                    toThemeImg(buf, "details");
    2841                     buf.append(" <b>")
     2838                    buf.append("</td><td><b>")
    28422839                       .append(_t("Completed")).append(":</b> ")
    28432840                       .append(date)
     
    28532850                buf.append("\">")
    28542851                   .append(toImg("magnet", _t("Magnet link")))
    2855                    .append("</a> <b>Magnet:</b> <a href=\"")
     2852                   .append("</a></td><td><b>Magnet:</b> <a href=\"")
    28562853                   .append(MagnetURI.MAGNET_FULL).append(hex);
    28572854                if (announce != null)
     
    28642861                   .append("</td></tr>\n");
    28652862            } else {
    2866                 buf.append("<tr><td>")
     2863                buf.append("<tr><td>");
     2864                toThemeImg(buf, "details");
     2865                buf.append("</td><td><b>")
    28672866                   .append(_t("Private torrent"))
    28682867                   .append("</td></tr>\n");
     
    28752874            buf.append("<tr><td>");
    28762875            toThemeImg(buf, "size");
    2877             buf.append("&nbsp;<b>")
     2876            buf.append("</td><td><b>")
    28782877               .append(_t("Size"))
    28792878               .append(":</b> ")
     
    29182917                   .append(formatSize(needed));
    29192918            }
     2919            long skipped = snark.getSkippedLength();
     2920            if (skipped > 0) {
     2921                buf.append("&nbsp;");
     2922                toThemeImg(buf, "head_rx");
     2923                buf.append("&nbsp;<b>")
     2924                   .append(_t("Skipped"))
     2925                   .append(":</b> ")
     2926                   .append(formatSize(skipped));
     2927            }
    29202928            if (meta != null) {
    29212929                List<List<String>> files = meta.getFiles();
     
    29442952            // buttons
    29452953            if (showStopStart) {
    2946                 buf.append("<tr><td>");
    2947                 toThemeImg(buf, "file");
     2954                buf.append("<tr><td></td><td>");
    29482955                if (snark.isChecking()) {
    2949                     buf.append("&nbsp;<b>").append(_t("Checking")).append("&hellip; ")
     2956                    buf.append("<b>").append(_t("Checking")).append("&hellip; ")
    29502957                       .append((new DecimalFormat("0.00%")).format(snark.getCheckingProgress()))
    29512958                       .append("&nbsp;&nbsp;&nbsp;<a href=\"").append(base).append("\">")
    29522959                       .append(_t("Refresh page for results")).append("</a>");
    29532960                } else if (snark.isStarting()) {
    2954                     buf.append("&nbsp;<b>").append(_t("Starting")).append("&hellip;</b>");
     2961                    buf.append("<b>").append(_t("Starting")).append("&hellip;</b>");
    29552962                } else if (snark.isAllocating()) {
    2956                     buf.append("&nbsp;<b>").append(_t("Allocating")).append("&hellip;</b>");
     2963                    buf.append("<b>").append(_t("Allocating")).append("&hellip;</b>");
    29572964                } else {
    29582965                    boolean isRunning = !snark.isStopped();
    2959                     buf.append(" <input type=\"submit\" value=\"");
     2966                    buf.append("<input type=\"submit\" value=\"");
    29602967                    if (isRunning)
    29612968                        buf.append(_t("Stop")).append("\" name=\"stop\" class=\"stoptorrent\">\n");
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ConnThrottler.java

    r9a9832c r1215a70  
    88import java.util.List;
    99import java.util.Map;
    10 import java.util.TimeZone;
    1110
    1211import net.i2p.I2PAppContext;
     
    5857        // for logging
    5958        _fmt = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
    60         String systemTimeZone = I2PAppContext.getGlobalContext().getProperty("i2p.systemTimeZone");
    61         if (systemTimeZone != null)
    62             _fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     59        _fmt.setTimeZone(DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext()));
    6360        new Cleaner();
    6461    }
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/GunzipOutputStream.java

    r9a9832c r1215a70  
    106106        try {
    107107            return inf.getBytesRead();
    108         } catch (Exception e) {
     108        } catch (RuntimeException e) {
    109109            return 0;
    110110        }
     
    117117        try {
    118118            return inf.getBytesWritten();
    119         } catch (Exception e) {
     119        } catch (RuntimeException e) {
    120120            // possible NPE in some implementations
    121121            return 0;
     
    129129        try {
    130130            return inf.getRemaining();
    131         } catch (Exception e) {
     131        } catch (RuntimeException e) {
    132132            // possible NPE in some implementations
    133133            return 0;
     
    141141        try {
    142142            return inf.finished();
    143         } catch (Exception e) {
     143        } catch (RuntimeException e) {
    144144            // possible NPE in some implementations
    145145            return true;
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java

    r9a9832c r1215a70  
    18741874                result.fromByteArray(content);
    18751875                return result;
    1876             } catch (Exception ex) {
     1876            } catch (RuntimeException ex) {
    18771877                if (log.shouldLog(Log.INFO))
    18781878                    log.info("File is not a binary destination - trying base64");
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClient.java

    r9a9832c r1215a70  
    44package net.i2p.i2ptunnel;
    55
     6import java.io.IOException;
    67import java.net.Socket;
    78import java.net.UnknownHostException;
     
    1112import java.util.StringTokenizer;
    1213
     14import net.i2p.I2PException;
    1315import net.i2p.client.streaming.I2PSocket;
    1416import net.i2p.client.streaming.I2PSocketAddress;
     
    123125            //t.start();
    124126            t.run();
    125         } catch (Exception ex) {
     127        } catch (IOException ex) {
     128            if (_log.shouldLog(Log.INFO))
     129                _log.info("Error connecting", ex);
     130            //l.log("Error connecting: " + ex.getMessage());
     131            closeSocket(s);
     132            if (i2ps != null) {
     133                synchronized (sockLock) {
     134                    mySockets.remove(sockLock);
     135                }
     136            }
     137        } catch (I2PException ex) {
    126138            if (_log.shouldLog(Log.INFO))
    127139                _log.info("Error connecting", ex);
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java

    r9a9832c r1215a70  
    415415                    }
    416416
    417                     String[] params = line.split(" ", 3);
     417                    String[] params = DataHelper.split(line, " ", 3);
    418418                    if(params.length != 3) {
    419419                        break;
     
    12531253        if (s == null)
    12541254            return null;
    1255         String[] p = s.split("[,; \r\n\t]");
     1255        String[] p = DataHelper.split(s, "[,; \r\n\t]");
    12561256        if (p.length == 0)
    12571257            return null;
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java

    r9a9832c r1215a70  
    286286                try {
    287287                    String dec = new String(decoded, "UTF-8");
    288                     String[] parts = dec.split(":");
     288                    String[] parts = DataHelper.split(dec, ":");
    289289                    String user = parts[0];
    290290                    String pw = parts[1];
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java

    r9a9832c r1215a70  
    665665        @Override
    666666        protected String filterResponseLine(String line) {
    667             String[] s = line.split(" ", 3);
     667            String[] s = DataHelper.split(line, " ", 3);
    668668            if (s.length > 1 &&
    669669                (s[1].startsWith("3") || s[1].startsWith("5")))
     
    743743            try {
    744744                return def.getTotalIn();
    745             } catch (Exception e) {
     745            } catch (RuntimeException e) {
    746746                // j2se 1.4.2_08 on linux is sometimes throwing an NPE in the getTotalIn() implementation
    747747                return 0;
     
    751751            try {
    752752                return def.getTotalOut();
    753             } catch (Exception e) {
     753            } catch (RuntimeException e) {
    754754                // j2se 1.4.2_08 on linux is sometimes throwing an NPE in the getTotalOut() implementation
    755755                return 0;
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCClient.java

    r9a9832c r1215a70  
    99import java.util.StringTokenizer;
    1010
     11import net.i2p.I2PException;
    1112import net.i2p.client.streaming.I2PSocket;
    1213import net.i2p.client.streaming.I2PSocketAddress;
     
    143144            //out.start();
    144145            out.run();
    145         } catch (Exception ex) {
     146        } catch (IOException ex) {
    146147            // generally NoRouteToHostException
    147148            if (_log.shouldLog(Log.WARN))
     
    161162                }
    162163            }
     164        } catch (I2PException ex) {
     165            if (_log.shouldLog(Log.WARN))
     166                _log.warn("Error connecting", ex);
     167            //l.log("Error connecting: " + ex.getMessage());
     168            try {
     169                // Send a response so the user doesn't just see a disconnect
     170                // and blame his router or the network.
     171                String name = addr != null ? addr.getHostName() : "undefined";
     172                String msg = ":" + name + " 499 you :" + ex + "\r\n";
     173                s.getOutputStream().write(DataHelper.getUTF8(msg));
     174            } catch (IOException ioe) {}
     175            closeSocket(s);
     176            if (i2ps != null) {
     177                synchronized (sockLock) {
     178                    mySockets.remove(sockLock);
     179                }
     180            }
    163181        }
    164182
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCServer.java

    r9a9832c r1215a70  
    1414import net.i2p.client.streaming.I2PSocket;
    1515import net.i2p.crypto.SHA256Generator;
     16import net.i2p.data.DataHelper;
    1617import net.i2p.data.Destination;
    1718import net.i2p.data.Hash;
     
    278279            //    _log.debug("Got line: " + s);
    279280
    280             String field[]=s.split(" ",5);
     281            String field[] = DataHelper.split(s, " ", 5);
    281282            String command;
    282283            int idx=0;
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelOutproxyRunner.java

    r9a9832c r1215a70  
    183183            if (_log.shouldLog(Log.WARN))
    184184                _log.warn("gnu?", ise);
    185         } catch (Exception e) {
     185        } catch (RuntimeException e) {
    186186            if (_log.shouldLog(Log.ERROR))
    187187                _log.error("Internal error", e);
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java

    r9a9832c r1215a70  
    327327            if (_log.shouldLog(Log.WARN))
    328328                _log.warn("gnu?", ise);
    329         } catch (Exception e) {
     329        } catch (RuntimeException e) {
    330330            if (_log.shouldLog(Log.ERROR))
    331331                _log.error("Internal error", e);
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java

    r9a9832c r1215a70  
    518518            } catch(SocketTimeoutException ste) {
    519519                // ignored, we never set the timeout
    520             } catch (Exception e) {
     520            } catch (RuntimeException e) {
    521521                // streaming borkage
    522522                if (_log.shouldLog(Log.ERROR))
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2Ping.java

    r9a9832c r1215a70  
    2020import net.i2p.client.I2PSessionException;
    2121import net.i2p.client.streaming.I2PSocketManager;
     22import net.i2p.data.DataHelper;
    2223import net.i2p.data.Destination;
    2324import net.i2p.util.EventDispatcher;
     
    9495      int remotePort = 0;
    9596      boolean error = false;
    96       String[] argv = cmd.split(" ");
     97      String[] argv = DataHelper.split(cmd, " ");
    9798      Getopt g = new Getopt("ping", argv, "t:m:n:chl:f:p:");
    9899      int c;
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java

    r9a9832c r1215a70  
    231231        try {
    232232            doStartTunnel();
    233         } catch (Exception e) {
     233        } catch (RuntimeException e) {
    234234            _log.error("Error starting the tunnel " + getName(), e);
    235235            log("Error starting the tunnel " + getName() + ": " + e.getMessage());
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/I2PTunnelDCCClient.java

    r9a9832c r1215a70  
    77import java.io.IOException;
    88
     9import net.i2p.I2PException;
    910import net.i2p.client.streaming.I2PSocket;
    1011import net.i2p.client.streaming.I2PSocketManager;
     
    8182            //t.start();
    8283            t.run();
    83         } catch (Exception ex) {
     84        } catch (IOException ex) {
     85            _log.error("Could not make DCC connection to " + _dest + ':' + _remotePort, ex);
     86            closeSocket(s);
     87            if (i2ps != null) {
     88                try { i2ps.close(); } catch (IOException ioe) {}
     89            }
     90            notifyEvent(CONNECT_STOP_EVENT, Integer.valueOf(getLocalPort()));
     91        } catch (I2PException ex) {
    8492            _log.error("Could not make DCC connection to " + _dest + ':' + _remotePort, ex);
    8593            closeSocket(s);
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java

    r9a9832c r1215a70  
    3434    public static String inboundFilter(String s, StringBuffer expectedPong, DCCHelper helper) {
    3535       
    36         String field[]=s.split(" ",4);
     36        String field[] = DataHelper.split(s, " ", 4);
    3737        String command;
    3838        int idx=0;
     
    275275    public static String outboundFilter(String s, StringBuffer expectedPong, DCCHelper helper) {
    276276
    277         String field[]=s.split(" ",3);
     277        String field[] = DataHelper.split(s, " ",3);
    278278
    279279        if(field[0].length()==0)
     
    421421        if (ctcp > 0)
    422422            msg = msg.substring(0, ctcp);
    423         String[] args = msg.split(" ", 5);
     423        String[] args = DataHelper.split(msg, " ", 5);
    424424        if (args.length <= 0)
    425425            return null;
     
    513513        if (ctcp > 0)
    514514            msg = msg.substring(0, ctcp);
    515         String[] args = msg.split(" ", 5);
     515        String[] args = DataHelper.split(msg, " ", 5);
    516516        if (args.length <= 0)
    517517            return null;
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java

    r9a9832c r1215a70  
    1010
    1111import net.i2p.I2PAppContext;
     12import net.i2p.I2PException;
    1213import net.i2p.client.I2PClient;
    1314import net.i2p.crypto.SigType;
     
    342343                    if (rv != null)
    343344                        return rv;
    344                 } catch (Exception e) {}
     345                } catch (I2PException e) {
     346                } catch (IOException e) {}
    345347            }
    346348        }
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java

    r9a9832c r1215a70  
    99 */
    1010
     11import java.io.IOException;
    1112import java.util.List;
    1213import java.util.Set;
     14
     15import net.i2p.I2PException;
    1316import net.i2p.crypto.SigType;
    1417import net.i2p.data.Base64;
     
    8891                Signature sig = _context.dsa().sign(spoof.getBytes("UTF-8"), privKey);
    8992                return Base64.encode(sig.getData());
    90             } catch (Exception e) {}
     93            } catch (I2PException e) {
     94            } catch (IOException e) {}
    9195        }
    9296        return "";
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java

    r9a9832c r1215a70  
    1010
    1111import java.io.File;
     12import java.io.IOException;
    1213import java.util.ArrayList;
    1314import java.util.List;
     
    1617
    1718import net.i2p.I2PAppContext;
     19import net.i2p.I2PException;
    1820import net.i2p.app.ClientAppManager;
    1921import net.i2p.app.Outproxy;
     
    267269            try {
    268270                buf.append(processAction()).append('\n');
    269             } catch (Exception e) {
     271            } catch (RuntimeException e) {
    270272                _log.log(Log.CRIT, "Error processing " + _action, e);
    271273                buf.append("Error: ").append(e.toString()).append('\n');
     
    973975        try {
    974976            pkf.createIfAbsent();
    975         } catch (Exception e) {
     977        } catch (I2PException e) {
     978            return "Create private key file failed: " + e;
     979        } catch (IOException e) {
    976980            return "Create private key file failed: " + e;
    977981        }
     
    10121016            pkf.write();
    10131017            newdest = pkf.getDestination();
    1014         } catch (Exception e) {
     1018        } catch (I2PException e) {
     1019            return "Modification failed: " + e;
     1020        } catch (IOException e) {
    10151021            return "Modification failed: " + e;
    10161022        }
  • apps/jetty/build.xml

    r9a9832c r1215a70  
    150150             needed for old plugins and things. We add tomcat-juli below.
    151151          -->
     152      <!--
     153        * Removed in 0.9.24, see ticket #1679
     154        * Jetty now uses tomcat-juli (added below to commons-logging.jar), not commons-logging proper,
     155        * and no known plugins use it either.
    152156        <jar destfile="jettylib/commons-logging.jar" filesetmanifest="mergewithoutmain" >
    153157            <zipfileset excludes="META-INF/LICENSE.txt META-INF/NOTICE.txt" src="../../installer/lib/launch4j/lib/commons-logging.jar" />
    154158        </jar>
     159      -->
    155160        <ant target="copyTomcatLib" />
    156161    </target>
  • apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketEepGet.java

    r9a9832c r1215a70  
    66import java.net.MalformedURLException;
    77import java.net.UnknownHostException;
    8 import java.net.URL;
     8import java.net.URI;
     9import java.net.URISyntaxException;
    910import java.util.Locale;
    1011import java.util.Properties;
     
    113114
    114115        try {
    115             URL url = new URL(_actualURL);
    116             if ("http".equals(url.getProtocol())) {
     116            URI url = new URI(_actualURL);
     117            if ("http".equals(url.getScheme())) {
    117118                String host = url.getHost();
    118119                int port = url.getPort();
     
    124125                // as the naming service accepts B64KEY (but not B64KEY.i2p atm)
    125126                if ("i2p".equals(host)) {
    126                     String file = url.getFile();
     127                    String file = url.getRawPath();
    127128                    try {
    128129                        int slash = 1 + file.substring(1).indexOf("/");
    129130                        host = file.substring(1, slash);
    130131                        _actualURL = "http://" + host + file.substring(slash);
     132                        String query = url.getRawQuery();
     133                        if (query != null)
     134                            _actualURL = _actualURL + '?' + query;
    131135                    } catch (IndexOutOfBoundsException ioobe) {
    132                         throw new IOException("Bad /i2p/ format: " + _actualURL);
     136                        throw new MalformedURLException("Bad /i2p/ format: " + _actualURL);
    133137                    }
    134138                }
     
    174178                _socket = _socketManager.connect(dest, opts);
    175179            } else {
    176                 throw new IOException("Unsupported protocol: " + _actualURL);
     180                throw new MalformedURLException("Unsupported protocol: " + _actualURL);
    177181            }
    178         } catch (MalformedURLException mue) {
    179             throw new IOException("Request URL is invalid: " + _actualURL);
     182        } catch (URISyntaxException use) {
     183            IOException ioe = new MalformedURLException("Bad URL");
     184            ioe.initCause(use);
     185            throw ioe;
    180186        } catch (I2PException ie) {
    181             throw new IOException(ie.toString());
     187            throw new IOException("I2P error", ie);
    182188        }
    183189
     
    203209    protected String getRequest() throws IOException {
    204210        StringBuilder buf = new StringBuilder(2048);
    205         URL url = new URL(_actualURL);
     211        URI url;
     212        try {
     213            url = new URI(_actualURL);
     214        } catch (URISyntaxException use) {
     215            IOException ioe = new MalformedURLException("Bad URL");
     216            ioe.initCause(use);
     217            throw ioe;
     218        }
    206219        //String host = url.getHost();
    207         String path = url.getPath();
    208         String query = url.getQuery();
     220        String path = url.getRawPath();
     221        String query = url.getRawQuery();
    209222        if (query != null)
    210223            path = path + '?' + query;
     
    233246            buf.append("User-Agent: " + USER_AGENT + "\r\n");
    234247        buf.append("\r\n");
     248        if (_log.shouldDebug())
     249            _log.debug("Request: [" + buf.toString() + "]");
    235250        return buf.toString();
    236251    }
     
    265280                }
    266281            }
    267         } catch (Exception e) {
     282        } catch (RuntimeException e) {
    268283            e.printStackTrace();
    269284            usage();
  • apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketManagerFactory.java

    r9a9832c r1215a70  
    196196            try {
    197197                client.createDestination(keyStream, getSigType(opts));
    198             } catch (Exception e) {
     198            } catch (I2PException e) {
     199                throw new I2PSessionException("Error creating keys", e);
     200            } catch (IOException e) {
    199201                throw new I2PSessionException("Error creating keys", e);
    200202            }
  • apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java

    r9a9832c r1215a70  
    1111import java.util.Date;
    1212import java.util.List;
    13 import java.util.TimeZone;
    1413
    1514import net.i2p.I2PAppContext;
     15import net.i2p.app.ClientApp;
    1616import net.i2p.app.ClientAppManager;
    1717import net.i2p.app.ClientAppState;
    1818import static net.i2p.app.ClientAppState.*;
    19 import net.i2p.router.app.RouterApp;
     19import net.i2p.data.DataHelper;
    2020import net.i2p.util.FileUtil;
    2121import net.i2p.util.Log;
     
    3131 *  @since 0.9.23
    3232 */
    33 public class NewsManager implements RouterApp {
     33public class NewsManager implements ClientApp {
    3434
    3535    private final I2PAppContext _context;
     
    234234                    DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT);
    235235                    // the router sets the JVM time zone to UTC but saves the original here so we can get it
    236                     String systemTimeZone = _context.getProperty("i2p.systemTimeZone");
    237                     if (systemTimeZone != null)
    238                         fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     236                    fmt.setTimeZone(DataHelper.getSystemTimeZone(_context));
    239237                    try {
    240238                        Date date = fmt.parse(newsContent.substring(0, colon));
  • apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java

    r9a9832c r1215a70  
    2020import java.util.Map;
    2121import java.util.StringTokenizer;
    22 import java.util.TimeZone;
    2322
    2423import net.i2p.app.ClientAppManager;
     
    223222                            if (NewsHelper.isBaseReadonly(_context)) {
    224223                                String msg = _mgr._t("No write permission for I2P install directory.");
     224                                _log.logAlways(Log.WARN, "Cannot update to version " + ver + ": " + msg);
     225                                _mgr.notifyVersionConstraint(this, _currentURI, ROUTER_SIGNED, "", ver, msg);
     226                                return;
     227                            }
     228                            if (!FileUtil.isPack200Supported()) {
     229                                String msg = _mgr._t("No Pack200 support in Java runtime.");
     230                                _log.logAlways(Log.WARN, "Cannot update to version " + ver + ": " + msg);
     231                                _mgr.notifyVersionConstraint(this, _currentURI, ROUTER_SIGNED, "", ver, msg);
     232                                return;
     233                            }
     234                            if (!ConfigUpdateHandler.USE_SU3_UPDATE) {
     235                                String msg = _mgr._t("No update certificates installed.");
    225236                                _log.logAlways(Log.WARN, "Cannot update to version " + ver + ": " + msg);
    226237                                _mgr.notifyVersionConstraint(this, _currentURI, ROUTER_SIGNED, "", ver, msg);
     
    253264                            Map<UpdateMethod, List<URI>> sourceMap = new HashMap<UpdateMethod, List<URI>>(4);
    254265                            // Must do su3 first
    255                             if (ConfigUpdateHandler.USE_SU3_UPDATE) {
     266                            //if (ConfigUpdateHandler.USE_SU3_UPDATE) {
    256267                                sourceMap.put(HTTP, _mgr.getUpdateURLs(ROUTER_SIGNED_SU3, "", HTTP));
    257268                                addMethod(TORRENT, args.get(SU3_KEY), sourceMap);
     
    262273                                                            "", sourceMap, ver, "");
    263274                                sourceMap.clear();
    264                             }
    265                             // now do sud/su2
    266                             sourceMap.put(HTTP, _mgr.getUpdateURLs(ROUTER_SIGNED, "", HTTP));
    267                             String key = FileUtil.isPack200Supported() ? SU2_KEY : SUD_KEY;
    268                             addMethod(TORRENT, args.get(key), sourceMap);
     275                            //}
     276                            // now do sud/su2 - DISABLED
     277                            //sourceMap.put(HTTP, _mgr.getUpdateURLs(ROUTER_SIGNED, "", HTTP));
     278                            //String key = FileUtil.isPack200Supported() ? SU2_KEY : SUD_KEY;
     279                            //addMethod(TORRENT, args.get(key), sourceMap);
    269280                            // notify about all sources at once
    270                             _mgr.notifyVersionAvailable(this, _currentURI, ROUTER_SIGNED,
    271                                                         "", sourceMap, ver, "");
     281                            //_mgr.notifyVersionAvailable(this, _currentURI, ROUTER_SIGNED,
     282                            //                            "", sourceMap, ver, "");
    272283                        } else {
    273284                            if (_log.shouldLog(Log.DEBUG))
     
    416427        if (_tempFile.exists() && _tempFile.length() > 0) {
    417428            File from;
    418             // TODO check magic number instead?
    419             // But then a corrupt file would be displayed as-is...
    420             if (url.endsWith(".su3") || url.contains(".su3?")) {
     429            // sud/su2 disabled
     430            //if (url.endsWith(".su3") || url.contains(".su3?")) {
    421431                try {
    422432                    from = processSU3();
     
    426436                    return;
    427437                }
    428             } else {
    429                 from = _tempFile;
    430             }
     438            //} else {
     439            //    from = _tempFile;
     440            //}
    431441            boolean copied = FileUtil.rename(from, _newsFile);
    432442            _tempFile.delete();
     
    580590            DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT);
    581591            // the router sets the JVM time zone to UTC but saves the original here so we can get it
    582             String systemTimeZone = _context.getProperty("i2p.systemTimeZone");
    583             if (systemTimeZone != null)
    584                 fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     592            fmt.setTimeZone(DataHelper.getSystemTimeZone(_context));
    585593            for (NewsEntry e : entries) {
    586594                if (e.title == null || e.content == null)
  • apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java

    r9a9832c r1215a70  
    108108                r = "" + MIN_REFRESH;
    109109            _context.router().saveConfig(PROP_REFRESH, r);
    110         } catch (Exception e) {
     110        } catch (RuntimeException e) {
    111111        }
    112112    }
     
    118118            if (Integer.parseInt(r) < MIN_REFRESH)
    119119                r = "" + MIN_REFRESH;
    120         } catch (Exception e) {
     120        } catch (RuntimeException e) {
    121121            r = "" + MIN_REFRESH;
    122122        }
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java

    r9a9832c r1215a70  
    208208        } else {
    209209            configs = new HashSet<String>(4);
    210             String[] ca = cs.split("[,; \r\n\t]");
     210            String[] ca = DataHelper.split(cs, "[,; \r\n\t]");
    211211            for (int i = 0; i < ca.length; i++) {
    212212                String c = ca[i];
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java

    r9a9832c r1215a70  
    33import java.io.InputStream;
    44import java.io.IOException;
    5 import java.net.URL;
    6 import java.net.MalformedURLException;
     5import java.net.URI;
     6import java.net.URISyntaxException;
    77import java.util.ArrayList;
    88import java.util.HashMap;
     
    3838                return;
    3939            }
    40             URL url;
     40            URI url;
    4141            try {
    42                 url = new URL(val);
    43             } catch (MalformedURLException mue) {
     42                url = new URI(val);
     43            } catch (URISyntaxException mue) {
    4444                addFormError(_t("Bad URL {0}", val));
    4545                return;
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java

    r9a9832c r1215a70  
    109109                }
    110110            } else if (moving) {
    111                 String parts[] = _action.split("_");
     111                String parts[] = DataHelper.split(_action, "_");
    112112                try {
    113113                    int from = Integer.parseInt(parts[1]);
  • apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java

    r9a9832c r1215a70  
    1313import java.util.List;
    1414import java.util.Map;
    15 import java.util.TimeZone;
    1615import java.util.TreeMap;
    1716
     
    190189        SimpleDateFormat fmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
    191190        // the router sets the JVM time zone to UTC but saves the original here so we can get it
    192         String systemTimeZone = _context.getProperty("i2p.systemTimeZone");
    193         if (systemTimeZone != null)
    194             fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     191        fmt.setTimeZone(DataHelper.getSystemTimeZone(_context));
    195192
    196193        List<Map.Entry<Long, String>> entries = new ArrayList<Map.Entry<Long, String>>(events.entrySet());
     
    203200            buf.append("</td><td>");
    204201            if (isAll) {
    205                  String[] s = event.split(" ", 2);
     202                 String[] s = DataHelper.split(event, " ", 2);
    206203                 String xs = _xevents.get(s[0]);
    207204                 if (xs == null)
  • apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java

    r9a9832c r1215a70  
    136136    }
    137137
     138    private static final String SS = Character.toString(S);
     139
    138140    static Collection<App> buildApps(RouterContext ctx, String config) {
    139         String[] args = config.split("" + S);
     141        String[] args = DataHelper.split(config, SS);
    140142        Set<App> apps = new TreeSet<App>(new AppComparator());
    141143        for (int i = 0; i < args.length - 3; i += 4) {
     
    150152
    151153    static Collection<App> buildSearchApps(String config) {
    152         String[] args = config.split("" + S);
     154        String[] args = DataHelper.split(config, SS);
    153155        Set<App> apps = new TreeSet<App>(new AppComparator());
    154156        for (int i = 0; i < args.length - 1; i += 2) {
  • apps/routerconsole/java/src/net/i2p/router/web/NewsFeedHelper.java

    r9a9832c r1215a70  
    55import java.util.Date;
    66import java.util.List;
    7 import java.util.TimeZone;
    87
    98import net.i2p.I2PAppContext;
     
    5756            DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT);
    5857            // the router sets the JVM time zone to UTC but saves the original here so we can get it
    59             String systemTimeZone = ctx.getProperty("i2p.systemTimeZone");
    60             if (systemTimeZone != null)
    61                 fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     58            fmt.setTimeZone(DataHelper.getSystemTimeZone(ctx));
    6259            int i = 0;
    6360            for (NewsEntry entry : entries) {
  • apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java

    r9a9832c r1215a70  
    424424                            log.error("INFO: Adding translation plugin to classpath: " + f);
    425425                            added = true;
    426                         } catch (Exception e) {
     426                        } catch (RuntimeException e) {
    427427                            log.error("Plugin " + appName + " bad classpath element: " + f, e);
    428428                        }
     
    962962                if (log.shouldLog(Log.WARN))
    963963                    log.warn("INFO: Adding plugin to classpath: " + f);
    964             } catch (Exception e) {
     964            } catch (IOException e) {
    965965                log.error("Plugin client " + clientName + " bad classpath element: " + f, e);
    966966            }
  • apps/routerconsole/java/src/net/i2p/router/web/SearchHelper.java

    r9a9832c r1215a70  
    4444    }
    4545
     46    private static final String SS = Character.toString(S);
     47
    4648    private void buildEngineMap() {
    4749        String config = _context.getProperty(PROP_ENGINES, ENGINES_DEFAULT);
    48         String[] args = config.split("" + S);
     50        String[] args = DataHelper.split(config, SS);
    4951        for (int i = 0; i < args.length - 1; i += 2) {
    5052            String name = args[i];
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java

    r9a9832c r1215a70  
    1010import java.util.List;
    1111import java.util.Map;
    12 import java.util.TimeZone;
    1312
    1413import net.i2p.app.ClientAppManager;
     
    635634                DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT);
    636635                // the router sets the JVM time zone to UTC but saves the original here so we can get it
    637                 String systemTimeZone = _context.getProperty("i2p.systemTimeZone");
    638                 if (systemTimeZone != null)
    639                     fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     636                fmt.setTimeZone(DataHelper.getSystemTimeZone(_context));
    640637                int i = 0;
    641638                final int max = 2;
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java

    r9a9832c r1215a70  
    862862    public NewsHelper getNewsHelper() { return _newshelper; }
    863863
     864    private static final String SS = Character.toString(S);
     865
    864866    public List<String> getSummaryBarSections(String page) {
    865867        String config = "";
     
    871873                config = _context.getProperty(PROP_SUMMARYBAR + "default", DEFAULT_FULL);
    872874        }
    873         return Arrays.asList(config.split("" + S));
     875        return Arrays.asList(DataHelper.split(config, SS));
    874876    }
    875877
  • apps/routerconsole/java/src/net/i2p/router/web/UpdateHandler.java

    r9a9832c r1215a70  
    8585                update(ROUTER_SIGNED_SU3);
    8686            } else {
    87                 update(ROUTER_SIGNED);
     87                // disabled, shouldn't get here
     88                //update(ROUTER_SIGNED);
    8889            }
    8990        }
  • apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketManagerFull.java

    r9a9832c r1215a70  
    1010import java.net.Socket;
    1111import java.net.SocketTimeoutException;
     12import java.security.GeneralSecurityException;
    1213import java.util.HashSet;
    1314import java.util.List;
     
    260261                priv.writeBytes(keyStream);
    261262                keys[1].writeBytes(keyStream); // signing priv
    262             } catch (Exception e) {
     263            } catch (GeneralSecurityException e) {
     264                throw new I2PSessionException("Error creating keys", e);
     265            } catch (I2PException e) {
     266                throw new I2PSessionException("Error creating keys", e);
     267            } catch (IOException e) {
     268                throw new I2PSessionException("Error creating keys", e);
     269            } catch (RuntimeException e) {
    263270                throw new I2PSessionException("Error creating keys", e);
    264271            }
  • apps/streaming/java/src/net/i2p/client/streaming/impl/Packet.java

    r9a9832c r1215a70  
    586586        setAckThrough(DataHelper.fromLong(buffer, cur, 4));
    587587        cur += 4;
    588         int numNacks = (int)DataHelper.fromLong(buffer, cur, 1);
     588        int numNacks = buffer[cur] & 0xff;
    589589        cur++;
    590590        if (length < 22 + numNacks*4)
     
    600600            setNacks(null);
    601601        }
    602         setResendDelay((int)DataHelper.fromLong(buffer, cur, 1));
     602        setResendDelay(buffer[cur] & 0xff);
    603603        cur++;
    604604        setFlags((int)DataHelper.fromLong(buffer, cur, 2));
  • apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java

    r9a9832c r1215a70  
    165165                        message = generateLoadMessage();
    166166                }
    167                 catch (Exception e) {
     167                catch (IOException e) {
    168168                        warn(e);
    169169                } finally {
     
    317317                                                save();
    318318                                                message += "<br>" + _t("Address book saved.");
    319                                         } catch (Exception e) {
     319                                        } catch (IOException e) {
    320320                                                warn(e);
    321321                                                message += "<br>" + _t("ERROR: Could not write addressbook file.");
  • apps/susidns/src/java/src/i2p/susi/dns/FormatDate.java

    r9a9832c r1215a70  
    33import java.util.Date;
    44import java.text.DateFormat;
    5 import java.util.TimeZone;
    65
    76import net.i2p.I2PAppContext;
     7import net.i2p.data.DataHelper;
    88
    99/**
     
    1818        DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    1919        // the router sets the JVM time zone to UTC but saves the original here so we can get it
    20         String systemTimeZone = I2PAppContext.getGlobalContext().getProperty("i2p.systemTimeZone");
    21         if (systemTimeZone != null)
    22                 fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     20        fmt.setTimeZone(DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext()));
    2321        _dateFormat = fmt;
    2422    }
  • apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java

    r9a9832c r1215a70  
    206206                        message = generateLoadMessage();
    207207                }
    208                 catch (Exception e) {
     208                catch (RuntimeException e) {
    209209                        warn(e);
    210210                }
  • apps/susimail/src/src/i2p/susi/util/Config.java

    r9a9832c r1215a70  
    9999                        iv = Config.class.getResourceAsStream("/susimail.properties");
    100100                        properties.load(iv);
    101                 } catch (Exception e) {
     101                } catch (IOException e) {
    102102                        Debug.debug(Debug.ERROR, "Could not open WEB-INF/classes/susimail.properties (possibly in jar), reason: " + e);
    103103                } finally {
     
    110110                                DataHelper.loadProps(config, cfg);
    111111                        }
    112                 } catch (Exception e) {
     112                } catch (IOException e) {
    113113                        Debug.debug(Debug.ERROR, "Could not open susimail.config, reason: " + e);
    114114                }
  • apps/susimail/src/src/i2p/susi/webmail/Mail.java

    r9a9832c r1215a70  
    4343
    4444import net.i2p.I2PAppContext;
     45import net.i2p.data.DataHelper;
    4546
    4647/**
     
    127128                } catch (DecodingException de) {
    128129                        Debug.debug(Debug.ERROR, "Decode error: " + de);
    129                 } catch (Exception e) {
     130                } catch (RuntimeException e) {
    130131                        Debug.debug(Debug.ERROR, "Parse error: " + e);
    131132                }
     
    191192                        return false;
    192193               
    193                 String[] tokens = address.split( "[ \t]+" );
     194                String[] tokens = DataHelper.split(address, "[ \t]+");
    194195
    195196                int addresses = 0;
     
    209210        public static String getAddress(String address )
    210211        {
    211                 String[] tokens = address.split( "[ \t]+" );
     212                String[] tokens = DataHelper.split(address, "[ \t]+");
    212213
    213214                for( int i = 0; i < tokens.length; i++ ) {
     
    233234        {
    234235                if( text != null && text.length() > 0 ) {                       
    235                         String[] ccs = text.split( "," );
     236                        String[] ccs = DataHelper.split(text, ",");
    236237                        for( int i = 0; i < ccs.length; i++ ) {
    237238                                String recipient = ccs[i].trim();
     
    276277                DateFormat longLocalDateFormatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    277278                // the router sets the JVM time zone to UTC but saves the original here so we can get it
    278                 String systemTimeZone = I2PAppContext.getGlobalContext().getProperty("i2p.systemTimeZone");
    279                 if (systemTimeZone != null) {
    280                         TimeZone tz = TimeZone.getTimeZone(systemTimeZone);
    281                         localDateFormatter.setTimeZone(tz);
    282                         longLocalDateFormatter.setTimeZone(tz);
    283                 }
     279                TimeZone tz = DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext());
     280                localDateFormatter.setTimeZone(tz);
     281                longLocalDateFormatter.setTimeZone(tz);
    284282                DateFormat mailDateFormatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH );
    285283               
  • apps/susimail/src/src/i2p/susi/webmail/MailPart.java

    r9a9832c r1215a70  
    8080                       
    8181                ReadBuffer decodedHeaders = EncodingFactory.getEncoding( "HEADERLINE" ).decode( buffer.content, begin, beginBody - begin );
    82                 headerLines = new String( decodedHeaders.content, decodedHeaders.offset, decodedHeaders.length ).split( "\r\n" );
     82                headerLines = DataHelper.split(new String(decodedHeaders.content, decodedHeaders.offset, decodedHeaders.length), "\r\n");
    8383
    8484                String boundary = null;
  • apps/susimail/src/src/i2p/susi/webmail/WebMail.java

    r9a9832c r1215a70  
    615615                                                reason = _t("Charset \\''{0}\\'' not supported.", quoteHTML( mailPart.charset )) + br;
    616616                                        }
    617                                         catch (Exception e1) {
     617                                        catch (IOException e1) {
    618618                                                showBody = false;
    619619                                                reason += _t("Part ({0}) not shown, because of {1}", ident, e1.toString()) + br;
     
    997997                                                        showPart( pw2, part, 0, TEXT_ONLY );
    998998                                                        pw2.flush();
    999                                                         String[] lines = text2.toString().split( "\r\n" );
     999                                                        String[] lines = DataHelper.split(text2.toString(), "\r\n");
    10001000                                                        for( int i = 0; i < lines.length; i++ )
    10011001                                                                pw.println( "> " + lines[i] );
  • apps/susimail/src/src/i2p/susi/webmail/encoding/DecodingException.java

    r9a9832c r1215a70  
    2424package i2p.susi.webmail.encoding;
    2525
     26import java.io.IOException;
     27
    2628/**
    2729 * @author susi
    2830 */
    29 public class DecodingException extends Exception {
     31public class DecodingException extends IOException {
    3032        private static final long serialVersionUID = 1L;
    3133
  • apps/susimail/src/src/i2p/susi/webmail/encoding/HeaderLine.java

    r9a9832c r1215a70  
    234234                                                                                                lastCharWasQuoted = true;
    235235                                                                                                continue;
    236                                                                                         } catch (Exception e1) {
     236                                                                                        } catch (IOException e1) {
     237                                                                                                Debug.debug(Debug.ERROR, e1.toString());
     238                                                                                        } catch (RuntimeException e1) {
    237239                                                                                                Debug.debug(Debug.ERROR, e1.toString());
    238240                                                                                        }
  • apps/susimail/src/src/i2p/susi/webmail/smtp/SMTPClient.java

    r9a9832c r1215a70  
    211211                try {
    212212                        socket = new Socket( host, port );
    213                 } catch (Exception e) {
     213                } catch (IOException e) {
    214214                        error += _t("Cannot connect") + ": " + e.getMessage() + '\n';
    215215                        ok = false;
     
    283283                }
    284284                if( !mailSent && lastResponse.length() > 0 ) {
    285                         String[] lines = lastResponse.split( "\r" );
     285                        String[] lines = DataHelper.split(lastResponse, "\r");
    286286                        for( int i = 0; i < lines.length; i++ )
    287287                                error += lines[i] + '\n';                       
  • apps/systray/java/build.xml

    r9a9832c r1215a70  
    66        <!-- run from top level build.xml to get dependencies built -->
    77    </target>
     8    <condition property="depend.available">
     9        <typefound name="depend" />
     10    </condition>
     11    <target name="depend" if="depend.available">
     12        <depend
     13            cache="../../../build"
     14            srcdir="./src:./test/junit"
     15            destdir="./build/obj" >
     16            <!-- Depend on classes instead of jars where available -->
     17            <classpath>
     18                <pathelement location="../../../core/java/build/obj" />
     19                <pathelement location="lib/systray4j.jar" />
     20            </classpath>
     21        </depend>
     22    </target>
    823
    924    <property name="javac.compilerargs" value="" />
    1025    <property name="javac.version" value="1.6" />
    1126
    12     <target name="compile">
     27    <target name="compile" depends="depend">
    1328        <mkdir dir="./build" />
    1429        <mkdir dir="./build/obj" />
  • apps/systray/java/src/net/i2p/apps/systray/ConfigFile.java

    r9a9832c r1215a70  
    6363            fileInputStream = new FileInputStream(_configFile);
    6464            _properties.load(fileInputStream);
    65         } catch (Exception e) {
     65        } catch (IOException e) {
    6666            rv = false;
    6767        } finally {
     
    8080            fileOutputStream = new FileOutputStream(_configFile);
    8181            _properties.store(fileOutputStream, null);
    82         } catch (Exception e) {
     82        } catch (IOException e) {
    8383            rv = false;
    8484        } finally {
  • apps/systray/java/src/net/i2p/apps/systray/SysTray.java

    r9a9832c r1215a70  
    1212import java.awt.Frame;
    1313import java.io.File;
     14import java.io.IOException;
    1415
    1516import net.i2p.I2PAppContext;
     
    8990                if (urlLauncher.openUrl(url))
    9091                    return;
    91             } catch (Exception ex) {
     92            } catch (IOException ex) {
    9293                // Fall through.
    9394            }
     
    9697                if (urlLauncher.openUrl(url, _browserString))
    9798                    return;
    98             } catch (Exception ex) {
     99            } catch (IOException ex) {
    99100                // Fall through.
    100101            }
  • apps/systray/java/src/net/i2p/apps/systray/UrlLauncher.java

    r9a9832c r1215a70  
    1919import java.net.Socket;
    2020import java.net.SocketAddress;
    21 import java.net.URL;
     21import java.net.URI;
     22import java.net.URISyntaxException;
    2223import java.util.Locale;
    2324
     
    116117     */
    117118    private static boolean waitForServer(String urlString) {
    118         URL url;
     119        URI url;
    119120        try {
    120             url = new URL(urlString);
    121         } catch (MalformedURLException e) {
     121            url = new URI(urlString);
     122        } catch (URISyntaxException e) {
    122123            return false;
    123124        }
     
    125126        int port = url.getPort();
    126127        if (port <= 0) {
    127             port = url.getDefaultPort();
    128             if (port <= 0)
    129                 return false;
     128            port = "https".equals(url.getScheme()) ? 443 : 80;
    130129        }
    131130        SocketAddress sa;
     
    151150                } catch (InterruptedException ie) {}
    152151                return true;
    153             } catch (Exception e) {}
     152            } catch (IOException e) {}
    154153            if (System.currentTimeMillis() > done)
    155154                break;
     
    173172     *             <code>false</code>.
    174173     *
    175      * @throws Exception
     174     * @throws IOException
    176175     */
    177     public boolean openUrl(String url) throws Exception {
     176    public boolean openUrl(String url) throws IOException {
    178177        waitForServer(url);
    179178        if (validateUrlFormat(url)) {
     
    219218                    }
    220219                    foo.delete();
    221                 } catch (Exception e) {
     220                } catch (IOException e) {
    222221                    // Defaults to IE.
    223222                } finally {
     
    248247     *                 otherwise <code>false</code>.
    249248     *
    250      * @throws Exception
    251      */
    252     public boolean openUrl(String url, String browser) throws Exception {
     249     * @throws IOException
     250     */
     251    public boolean openUrl(String url, String browser) throws IOException {
    253252        waitForServer(url);
    254253        if (validateUrlFormat(url)) {
     
    262261         try {
    263262            // just to check validity
    264             new URL(urlString);
    265         } catch (MalformedURLException e) {
     263            new URI(urlString);
     264        } catch (URISyntaxException e) {
    266265            return false;
    267266        }
     
    291290                openUrl(url);
    292291                changeState(STOPPED);
    293             } catch (Exception e) {
     292            } catch (IOException e) {
    294293                changeState(CRASHED, e);
    295294            }
     
    356355            else
    357356                launcher.openUrl("http://127.0.0.1:7657/index.jsp");
    358          } catch (Exception e) {}
     357         } catch (IOException e) {}
    359358    }
    360359}
  • build.xml

    r9a9832c r1215a70  
    869869
    870870    <target name="-pre-release">
     871            <fail message="javac.compilerargs must contain a -bootclasspath option in override.properties">
     872                <condition>
     873                    <not><contains string="${javac.compilerargs}" substring="-bootclasspath"/></not>
     874                </condition>
     875            </fail>
     876            <fail message="build.built-by must be set in override.properties">
     877                <condition>
     878                    <equals arg1="${build.built-by}" arg2="unknown"/>
     879                </condition>
     880            </fail>
     881            <fail message="require.gettext must be true">
     882                <condition>
     883                    <not><equals arg1="${require.gettext}" arg2="true"/></not>
     884                </condition>
     885            </fail>
    871886            <echo message="================================================================" />
    872887            <echo message="Did you update these files?" />
     
    14511466
    14521467    <!-- All jetty jars required for update.
    1453          We don't need commons-el or commons-logging, they haven't changed.
    14541468         TODO do we need to bother updating jasper?
    1455          TODO where is JMX? We don't need it I hope.
    14561469      -->
    14571470    <target name="prepjupdate" depends="prepupdate, buildWEB">
  • core/java/src/net/i2p/client/impl/I2PSessionImpl.java

    r9a9832c r1215a70  
    863863                                _log.info("Message availability notification for " + msgId.intValue() + " took "
    864864                                           + duration + " to " + _sessionListener);
    865                         } catch (Exception e) {
     865                        } catch (RuntimeException e) {
    866866                            _log.log(Log.CRIT, "Error notifying app of message availability", e);
    867867                        }
  • core/java/src/net/i2p/client/impl/I2PSessionMuxedImpl.java

    r9a9832c r1215a70  
    400400                    _demultiplexer.messageAvailable(I2PSessionMuxedImpl.this,
    401401                        msg.id, msg.size, msg.proto, msg.fromPort, msg.toPort);
    402                 } catch (Exception e) {
     402                } catch (RuntimeException e) {
    403403                    _log.error("Error notifying app of message availability", e);
    404404                }
  • core/java/src/net/i2p/client/naming/SingleFileNamingService.java

    r9a9832c r1215a70  
    9292            if (key != null)
    9393                return lookupBase64(key);
    94         } catch (Exception ioe) {
     94        } catch (IOException ioe) {
    9595            if (_file.exists())
    9696                _log.error("Error loading hosts file " + _file, ioe);
     
    124124            }
    125125            return null;
    126         } catch (Exception ioe) {
     126        } catch (IOException ioe) {
    127127            if (_file.exists())
    128128                _log.error("Error loading hosts file " + _file, ioe);
  • core/java/src/net/i2p/crypto/DSAEngine.java

    r9a9832c r1215a70  
    258258            }
    259259            return ok;
    260         } catch (Exception e) {
     260        } catch (RuntimeException e) {
    261261            _log.log(Log.CRIT, "Error verifying the signature", e);
    262262            return false;
  • core/java/src/net/i2p/crypto/ECConstants.java

    r9a9832c r1215a70  
    44import java.math.BigInteger;
    55import java.security.AlgorithmParameters;
     6import java.security.GeneralSecurityException;
    67import java.security.Provider;
    78import java.security.Security;
     
    279280            try {
    280281                ap = AlgorithmParameters.getInstance("EC");
    281             } catch (Exception e) {
     282            } catch (GeneralSecurityException e) {
    282283                if (BC_AVAILABLE) {
    283284                    log("Named curve " + name + " is not available, trying BC", e);
     
    293294            log("Named curve " + name + " loaded");
    294295            return rv;
    295         } catch (Exception e) {
     296        } catch (GeneralSecurityException e) {
    296297            log("Named curve " + name + " is not available", e);
    297298            return null;
  • core/java/src/net/i2p/crypto/ElGamalAESEngine.java

    r9a9832c r1215a70  
    328328            int cur = 0;
    329329            long numTags = DataHelper.fromLong(decrypted, cur, 2);
    330             if ((numTags < 0) || (numTags > MAX_TAGS_RECEIVED)) throw new Exception("Invalid number of session tags");
     330            if ((numTags < 0) || (numTags > MAX_TAGS_RECEIVED)) throw new IllegalArgumentException("Invalid number of session tags");
    331331            if (numTags > 0) tags = new ArrayList<SessionTag>((int)numTags);
    332332            cur += 2;
    333333            //_log.debug("# tags: " + numTags);
    334334            if (numTags * SessionTag.BYTE_LENGTH > decrypted.length - 2) {
    335                 throw new Exception("# tags: " + numTags + " is too many for " + (decrypted.length - 2));
     335                throw new IllegalArgumentException("# tags: " + numTags + " is too many for " + (decrypted.length - 2));
    336336            }
    337337            for (int i = 0; i < numTags; i++) {
     
    345345            //_log.debug("len: " + len);
    346346            if ((len < 0) || (len > decrypted.length - cur - Hash.HASH_LENGTH - 1))
    347                 throw new Exception("Invalid size of payload (" + len + ", remaining " + (decrypted.length-cur) +")");
     347                throw new IllegalArgumentException("Invalid size of payload (" + len + ", remaining " + (decrypted.length-cur) +")");
    348348            //byte hashval[] = new byte[Hash.HASH_LENGTH];
    349349            //System.arraycopy(decrypted, cur, hashval, 0, Hash.HASH_LENGTH);
     
    380380            }
    381381
    382             throw new Exception("Hash does not match");
    383         } catch (Exception e) {
     382            throw new RuntimeException("Hash does not match");
     383        } catch (RuntimeException e) {
    384384            if (_log.shouldLog(Log.WARN)) _log.warn("Unable to decrypt AES block", e);
    385385            return null;
  • core/java/src/net/i2p/crypto/EncType.java

    r9a9832c r1215a70  
    109109        try {
    110110            getParams();
    111         } catch (Exception e) {
     111        } catch (InvalidParameterSpecException e) {
    112112            return false;
    113113        }
  • core/java/src/net/i2p/crypto/KeyGenerator.java

    r9a9832c r1215a70  
    344344        try {
    345345             main2(args);
    346         } catch (Exception e) {
     346        } catch (RuntimeException e) {
    347347             e.printStackTrace();
    348348        }
     
    382382                    System.out.println("Testing " + type);
    383383                    testSig(type, runs);
    384                 } catch (Exception e) {
     384                } catch (GeneralSecurityException e) {
    385385                    System.out.println("error testing " + type);
    386386                    e.printStackTrace();
  • core/java/src/net/i2p/crypto/KeyStoreUtil.java

    r9a9832c r1215a70  
    9999                        ks.load(null, DEFAULT_KEYSTORE_PASSWORD.toCharArray());
    100100                        success = addCerts(new File(System.getProperty("java.home"), "etc/security/cacerts"), ks) > 0;
    101                     } catch (Exception e) {}
     101                    } catch (IOException e) {
     102                    } catch (GeneralSecurityException e) {}
    102103                } else {
    103104                    success = loadCerts(new File(System.getProperty("java.home"), "etc/security/cacerts.bks"), ks);
     
    114115                // must be initted
    115116                ks.load(null, DEFAULT_KEYSTORE_PASSWORD.toCharArray());
    116             } catch (Exception e) {}
     117            } catch (IOException e) {
     118            } catch (GeneralSecurityException e) {}
    117119            error("All key store loads failed, will only load local certificates", null);
    118120        }
     
    141143                // not clear if null is allowed for password
    142144                ks.load(null, DEFAULT_KEYSTORE_PASSWORD.toCharArray());
    143             } catch (Exception foo) {}
     145            } catch (IOException foo) {
     146            } catch (GeneralSecurityException e) {}
    144147            return false;
    145148        } catch (IOException ioe) {
     
    147150            try {
    148151                ks.load(null, DEFAULT_KEYSTORE_PASSWORD.toCharArray());
    149             } catch (Exception foo) {}
     152            } catch (IOException foo) {
     153            } catch (GeneralSecurityException e) {}
    150154            return false;
    151155        } finally {
     
    172176                }
    173177            }
    174         } catch (Exception foo) {}
     178        } catch (GeneralSecurityException e) {}
    175179        return count;
    176180    }
     
    317321                    return false;
    318322                }
    319             } catch (Exception e) {
     323            } catch (IOException e) {
     324                error("Not overwriting key \"" + alias + "\", already exists in " + ks, e);
     325                return false;
     326            } catch (GeneralSecurityException e) {
    320327                error("Not overwriting key \"" + alias + "\", already exists in " + ks, e);
    321328                return false;
     
    355362                    if (!success)
    356363                        error("Key gen failed to get private key", null);
    357                 } catch (Exception e) {
     364                } catch (IOException e) {
     365                    error("Key gen failed to get private key", e);
     366                    success = false;
     367                } catch (GeneralSecurityException e) {
    358368                    error("Key gen failed to get private key", e);
    359369                    success = false;
  • core/java/src/net/i2p/crypto/SigType.java

    r9a9832c r1215a70  
    11package net.i2p.crypto;
    22
     3import java.security.GeneralSecurityException;
    34import java.security.MessageDigest;
    45import java.security.NoSuchAlgorithmException;
     
    216217            getDigestInstance();
    217218            getHashInstance();
    218         } catch (Exception e) {
     219        } catch (GeneralSecurityException e) {
     220            return false;
     221        } catch (RuntimeException e) {
    219222            return false;
    220223        }
  • core/java/src/net/i2p/crypto/TrustedUpdate.java

    r9a9832c r1215a70  
    345345            System.out.println("Public key written to: " + publicKeyFile);
    346346            System.out.println("\r\nPublic key: " + signingPublicKey.toBase64() + "\r\n");
    347         } catch (Exception e) {
     347        } catch (IOException e) {
     348            System.err.println("Error writing keys:");
     349            e.printStackTrace();
     350            return false;
     351        } catch (DataFormatException e) {
    348352            System.err.println("Error writing keys:");
    349353            e.printStackTrace();
     
    759763            signature = _context.dsa().sign(bytesToSignInputStream, signingPrivateKey);
    760764
    761         } catch (Exception e) {
     765        } catch (IOException e) {
    762766            if (_log.shouldLog(Log.ERROR))
    763767                _log.error("Error signing", e);
  • core/java/src/net/i2p/crypto/eddsa/math/GroupElement.java

    r9a9832c r1215a70  
    723723            try {
    724724                ge = ge.toRep(this.repr);
    725             } catch (Exception e) {
     725            } catch (RuntimeException e) {
    726726                return false;
    727727            }
  • core/java/src/net/i2p/data/Certificate.java

    r9a9832c r1215a70  
    216216
    217217        int cur = offset;
    218         _type = (int)DataHelper.fromLong(source, cur, 1);
     218        _type = source[cur] & 0xff;
    219219        cur++;
    220220        int length = (int)DataHelper.fromLong(source, cur, 2);
  • core/java/src/net/i2p/data/DataHelper.java

    r9a9832c r1215a70  
    3838import java.util.Map;
    3939import java.util.Properties;
     40import java.util.TimeZone;
     41import java.util.concurrent.ConcurrentHashMap;
     42import java.util.regex.Pattern;
    4043import java.util.zip.Deflater;
    4144
     
    16161619     */
    16171620    public static String formatSize(long bytes) {
    1618         double val = bytes;
     1621        float val = bytes;
    16191622        int scale = 0;
    1620         while (val >= 1024) {
     1623        while (val >= 1024.0f) {
    16211624            scale++;
    1622             val /= 1024;
     1625            val /= 1024.0f;
    16231626        }
    16241627       
     
    18891892        return rv;
    18901893    }
     1894
     1895    /**
     1896     *  Same as s.split(regex) but caches the compiled pattern for speed.
     1897     *  This saves about 10 microseconds (Bulldozer) on subsequent invocations.
     1898     *
     1899     *  @param s non-null
     1900     *  @param regex non-null
     1901     *  @throws java.util.regex.PatternSyntaxException unchecked
     1902     *  @since 0.9.24
     1903     */
     1904    public static String[] split(String s, String regex) {
     1905        return split(s, regex, 0);
     1906    }
     1907
     1908    private static final ConcurrentHashMap<String, Pattern> patterns = new ConcurrentHashMap<String, Pattern>();
     1909
     1910    /**
     1911     *  Same as s.split(regex, limit) but caches the compiled pattern for speed.
     1912     *  This saves about 10 microseconds (Bulldozer) on subsequent invocations.
     1913     *
     1914     *  @param s non-null
     1915     *  @param regex non-null
     1916     *  @param limit result threshold
     1917     *  @throws java.util.regex.PatternSyntaxException unchecked
     1918     *  @since 0.9.24
     1919     */
     1920    public static String[] split(String s, String regex, int limit) {
     1921        Pattern p = patterns.get(regex);
     1922        if (p == null) {
     1923            p = Pattern.compile(regex);
     1924            patterns.putIfAbsent(regex, p);
     1925        }
     1926        return p.split(s, limit);
     1927    }
     1928
     1929    /**
     1930     *  The system's time zone, which is probably different from the
     1931     *  JVM time zone, because Router changes the JVM default to GMT.
     1932     *  It saves the old default in the context properties where we can get it.
     1933     *  Use this to format a time in local time zone with DateFormat.setTimeZone().
     1934     *
     1935     *  @return non-null
     1936     *  @since 0.9.24
     1937     */
     1938    public static TimeZone getSystemTimeZone(I2PAppContext ctx) {
     1939        String systemTimeZone = ctx.getProperty("i2p.systemTimeZone");
     1940        if (systemTimeZone != null)
     1941            return TimeZone.getTimeZone(systemTimeZone);
     1942        return TimeZone.getDefault();
     1943    }
    18911944}
  • core/java/src/net/i2p/data/PrivateKeyFile.java

    r9a9832c r1215a70  
    1010import java.io.OutputStream;
    1111import java.security.GeneralSecurityException;
     12import java.security.NoSuchAlgorithmException;
    1213import java.util.Locale;
    1314import java.util.Map;
     
    175176                verifySignature(pkf.getDestination());
    176177            }
    177         } catch (Exception e) {
     178        } catch (I2PException e) {
     179            e.printStackTrace();
     180            System.exit(1);
     181        } catch (IOException e) {
    178182            e.printStackTrace();
    179183            System.exit(1);
     
    359363        try {
    360364            hc = HashCash.mintCash(resource, effort);
    361         } catch (Exception e) {
     365        } catch (NoSuchAlgorithmException e) {
    362366            return null;
    363367        }
     
    392396        try {
    393397            d2 = pkf2.getDestination();
    394         } catch (Exception e) {
     398        } catch (I2PException e) {
     399            return null;
     400        } catch (IOException e) {
    395401            return null;
    396402        }
     
    501507        try {
    502508            low = HashCash.estimateTime(hashEffort);
    503         } catch (Exception e) {}
     509        } catch (NoSuchAlgorithmException e) {}
    504510        // takes a lot longer than the estimate usually...
    505511        // maybe because the resource string is much longer than used in the estimate?
  • core/java/src/net/i2p/data/i2cp/I2CPMessageReader.java

    r9a9832c r1215a70  
    161161            try {
    162162                run2();
    163             } catch (Exception e) {
     163            } catch (RuntimeException e) {
    164164                _log.log(Log.CRIT, "Uncaught I2CP error", e);
    165165                _listener.readError(I2CPMessageReader.this, e);
     
    194194                        // ooms seen here... maybe log and keep going?
    195195                        throw oom;
    196                     } catch (Exception e) {
     196                    } catch (RuntimeException e) {
    197197                        _log.log(Log.CRIT, "Unhandled error reading I2CP stream", e);
    198198                        _listener.disconnected(I2CPMessageReader.this);
  • core/java/src/net/i2p/stat/BufferedStatLog.java

    r9a9832c r1215a70  
    146146                                _log.debug("writing " + writeStart +"->"+ writeEnd);
    147147                            writeEvents(writeStart, writeEnd);
    148                         } catch (Exception e) {
     148                        } catch (RuntimeException e) {
    149149                            _log.error("error writing " + writeStart +"->"+ writeEnd, e);
    150150                        }
  • core/java/src/net/i2p/util/EepGet.java

    r9a9832c r1215a70  
    1616import java.net.Socket;
    1717import java.net.UnknownHostException;
    18 import java.net.URL;
     18import java.net.URI;
     19import java.net.URISyntaxException;
    1920import java.text.DecimalFormat;
    2021import java.util.ArrayList;
     
    273274              }  // switch
    274275            } // while
    275         } catch (Exception e) {
     276        } catch (RuntimeException e) {
    276277            e.printStackTrace();
    277278            error = true;
     
    322323     */
    323324    public static String suggestName(String url) {
    324         URL nameURL = null;  // URL object
     325        URI nameURL = null;
    325326        String name;         // suggested name
    326327
    327328        try {
    328             nameURL = new URL(url);
    329         } catch (MalformedURLException e) {
     329            nameURL = new URI(url);
     330        } catch (URISyntaxException e) {
    330331            System.err.println("Please enter a properly formed URL.");
    331332            System.exit(1);
    332333        }
    333334
    334         String path = nameURL.getPath();  // discard any URI queries
     335        String path = nameURL.getRawPath();  // discard any URI queries
    335336
    336337        // if no file specified, eepget scrapes webpage - use domain as name
     
    723724        if (_redirectLocation != null) {
    724725            // we also are here after a 407
    725             //try {
     726            try {
    726727                if (_redirectLocation.startsWith("http://")) {
    727728                    _actualURL = _redirectLocation;
     
    730731                    // RFC 1945 (HTTP/1.0 1996), so it isn't clear what the point of this is.
    731732                    // This oddly adds a ":" even if no port, but that seems to work.
    732                     URL url = new URL(_actualURL);
     733                    URI url = new URI(_actualURL);
    733734                    if (_redirectLocation.startsWith("/"))
    734735                        _actualURL = "http://" + url.getHost() + ":" + url.getPort() + _redirectLocation;
     
    737738                        _actualURL = "http://" + url.getHost() + ":" + url.getPort() + "/" + _redirectLocation;
    738739                }
    739             // an MUE is an IOE
    740             //} catch (MalformedURLException mue) {
    741             //    throw new IOException("Redirected from an invalid URL");
    742             //}
     740            } catch (URISyntaxException use) {
     741                IOException ioe = new MalformedURLException("Redirected to invalid URL");
     742                ioe.initCause(use);
     743                throw ioe;
     744            }
    743745
    744746            AuthState as = _authState;
     
    11321134        if (_log.shouldLog(Log.DEBUG))
    11331135            _log.debug("Status line: [" + line.trim() + "]");
    1134         String[] toks = line.split(" ", 3);
     1136        String[] toks = DataHelper.split(line, " ", 3);
    11351137        if (toks.length < 2) {
    11361138            if (_log.shouldLog(Log.WARN))
     
    12271229            _proxy = InternalSocket.getSocket(_proxyHost, _proxyPort);
    12281230        } else {
    1229             //try {
    1230                 URL url = new URL(_actualURL);
    1231                 if ("http".equals(url.getProtocol())) {
     1231            try {
     1232                URI url = new URI(_actualURL);
     1233                if ("http".equals(url.getScheme())) {
    12321234                    String host = url.getHost();
    12331235                    String hostlc = host.toLowerCase(Locale.US);
     
    12491251                    throw new MalformedURLException("URL is not supported:" + _actualURL);
    12501252                }
    1251             // an MUE is an IOE
    1252             //} catch (MalformedURLException mue) {
    1253             //    throw new IOException("Request URL is invalid");
    1254             //}
     1253            } catch (URISyntaxException use) {
     1254                IOException ioe = new MalformedURLException("Request URL is invalid");
     1255                ioe.initCause(use);
     1256                throw ioe;
     1257            }
    12551258        }
    12561259        _proxyIn = _proxy.getInputStream();
     
    12741277        if ( (_postData != null) && (_postData.length() > 0) )
    12751278            post = true;
    1276         URL url = new URL(_actualURL);
     1279        URI url;
     1280        try {
     1281            url = new URI(_actualURL);
     1282        } catch (URISyntaxException use) {
     1283            IOException ioe = new MalformedURLException("Bad URL");
     1284            ioe.initCause(use);
     1285            throw ioe;
     1286        }
    12771287        String host = url.getHost();
    12781288        if (host == null || host.length() <= 0)
    12791289            throw new MalformedURLException("Bad URL, no host");
    12801290        int port = url.getPort();
    1281         String path = url.getPath();
    1282         String query = url.getQuery();
     1291        String path = url.getRawPath();
     1292        String query = url.getRawQuery();
    12831293        if (_log.shouldLog(Log.DEBUG))
    12841294            _log.debug("Requesting " + _actualURL);
  • core/java/src/net/i2p/util/EepHead.java

    r9a9832c r1215a70  
    77import java.io.InputStreamReader;
    88import java.io.OutputStream;
    9 import java.net.URL;
     9import java.net.MalformedURLException;
     10import java.net.URI;
     11import java.net.URISyntaxException;
    1012
    1113import gnu.getopt.Getopt;
     
    108110              }  // switch
    109111            } // while
    110         } catch (Exception e) {
     112        } catch (RuntimeException e) {
    111113            e.printStackTrace();
    112114            error = true;
     
    177179        // Should we even follow redirects for HEAD?
    178180        if (_redirectLocation != null) {
    179             //try {
     181            try {
    180182                if (_redirectLocation.startsWith("http://")) {
    181183                    _actualURL = _redirectLocation;
     
    184186                    // RFC 1945 (HTTP/1.0 1996), so it isn't clear what the point of this is.
    185187                    // This oddly adds a ":" even if no port, but that seems to work.
    186                     URL url = new URL(_actualURL);
     188                    URI url = new URI(_actualURL);
    187189                    if (_redirectLocation.startsWith("/"))
    188190                        _actualURL = "http://" + url.getHost() + ":" + url.getPort() + _redirectLocation;
     
    191193                        _actualURL = "http://" + url.getHost() + ":" + url.getPort() + "/" + _redirectLocation;
    192194                }
    193             // an MUE is an IOE
    194             //} catch (MalformedURLException mue) {
    195             //    throw new IOException("Redirected from an invalid URL");
    196             //}
     195            } catch (URISyntaxException use) {
     196                IOException ioe = new MalformedURLException("Redirected to invalid URL");
     197                ioe.initCause(use);
     198                throw ioe;
     199            }
    197200            AuthState as = _authState;
    198201            if (_responseCode == 407) {
     
    253256    protected String getRequest() throws IOException {
    254257        StringBuilder buf = new StringBuilder(512);
    255         URL url = new URL(_actualURL);
     258        URI url;
     259        try {
     260            url = new URI(_actualURL);
     261        } catch (URISyntaxException use) {
     262            IOException ioe = new MalformedURLException("Bad URL");
     263            ioe.initCause(use);
     264            throw ioe;
     265        }
    256266        String host = url.getHost();
    257267        int port = url.getPort();
    258         String path = url.getPath();
    259         String query = url.getQuery();
     268        String path = url.getRawPath();
     269        String query = url.getRawQuery();
    260270        if (_log.shouldLog(Log.DEBUG))
    261271            _log.debug("Requesting " + _actualURL);
  • core/java/src/net/i2p/util/FortunaRandomSource.java

    r9a9832c r1215a70  
    1212import gnu.crypto.prng.AsyncFortunaStandalone;
    1313
     14import java.io.IOException;
    1415import java.security.SecureRandom;
    1516
     
    267268                _fortuna.addRandomBytes(data, offset, len);
    268269            }
    269         } catch (Exception e) {
     270        } catch (RuntimeException e) {
    270271            // AIOOBE seen, root cause unknown, ticket #1576
    271272            Log log = _context.logManager().getLog(FortunaRandomSource.class);
     
    291292                System.out.write(buf);
    292293            }
    293         } catch (Exception e) { e.printStackTrace(); }
     294        } catch (IOException e) { e.printStackTrace(); }
    294295    }
    295296}
  • core/java/src/net/i2p/util/I2PSSLSocketFactory.java

    r9a9832c r1215a70  
    8484import net.i2p.I2PAppContext;
    8585import net.i2p.crypto.KeyStoreUtil;
     86import net.i2p.data.DataHelper;
    8687
    8788import org.apache.http.conn.ssl.DefaultHostnameVerifier;
     
    444445                    if (line.charAt(0) == '#')
    445446                        continue;
    446                     String[] s = line.split(",");
     447                    String[] s = DataHelper.split(line, ",");
    447448                    String lc = s[0].toLowerCase(Locale.US);
    448449                    tlds.add(lc);
  • core/java/src/net/i2p/util/LogManager.java

    r9a9832c r1215a70  
    2323import java.util.Queue;
    2424import java.util.Set;
    25 import java.util.TimeZone;
    2625import java.util.concurrent.ConcurrentHashMap;
    2726import java.util.concurrent.LinkedBlockingQueue;
     
    480479                fmt.applyPattern(format);
    481480            // the router sets the JVM time zone to UTC but saves the original here so we can get it
    482             String systemTimeZone = _context.getProperty("i2p.systemTimeZone");
    483             if (systemTimeZone != null)
    484                 fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
     481            fmt.setTimeZone(DataHelper.getSystemTimeZone(_context));
    485482            _dateFormatPattern = format;
    486483            _dateFormat = fmt;
  • core/java/src/net/i2p/util/LogWriterBase.java

    r9a9832c r1215a70  
    7676                    rereadConfig();
    7777            }
    78         } catch (Exception e) {
     78        } catch (RuntimeException e) {
    7979            System.err.println("Error writing the log: " + e);
    8080            e.printStackTrace();
  • core/java/src/net/i2p/util/NativeBigInteger.java

    r9a9832c r1215a70  
    3636import net.i2p.I2PAppContext;
    3737import net.i2p.crypto.CryptoConstants;
     38import net.i2p.data.DataHelper;
    3839
    3940/**
     
    735736            String line = null;
    736737            while ( (line = in.readLine()) != null) {
    737                 String[] parts = line.split(":", 2);
     738                String[] parts = DataHelper.split(line, ":", 2);
    738739                if (parts.length < 2)
    739740                    continue;
  • core/java/src/net/i2p/util/PartialEepGet.java

    r9a9832c r1215a70  
    77import java.io.OutputStream;
    88import java.net.MalformedURLException;
    9 import java.net.URL;
     9import java.net.URI;
     10import java.net.URISyntaxException;
    1011import java.util.Locale;
    1112
     
    107108              }  // switch
    108109            } // while
    109         } catch (Exception e) {
     110        } catch (RuntimeException e) {
    110111            e.printStackTrace();
    111112            error = true;
     
    168169    protected String getRequest() throws IOException {
    169170        StringBuilder buf = new StringBuilder(2048);
    170         URL url = new URL(_actualURL);
     171        URI url;
     172        try {
     173            url = new URI(_actualURL);
     174        } catch (URISyntaxException use) {
     175            IOException ioe = new MalformedURLException("Bad URL");
     176            ioe.initCause(use);
     177            throw ioe;
     178        }
    171179        String host = url.getHost();
    172180        if (host == null || host.length() <= 0)
    173181            throw new MalformedURLException("Bad URL, no host");
    174182        int port = url.getPort();
    175         String path = url.getPath();
    176         String query = url.getQuery();
     183        String path = url.getRawPath();
     184        String query = url.getRawQuery();
    177185        if (_log.shouldLog(Log.DEBUG))
    178186            _log.debug("Requesting " + _actualURL);
  • core/java/src/net/i2p/util/ResettableGZIPInputStream.java

    r9a9832c r1215a70  
    125125        try {
    126126            return inf.getBytesRead();
    127         } catch (Exception e) {
     127        } catch (RuntimeException e) {
    128128            return 0;
    129129        }
     
    137137        try {
    138138            return inf.getBytesWritten();
    139         } catch (Exception e) {
     139        } catch (RuntimeException e) {
    140140            // possible NPE in some implementations
    141141            return 0;
     
    150150        try {
    151151            return inf.getRemaining();
    152         } catch (Exception e) {
     152        } catch (RuntimeException e) {
    153153            // possible NPE in some implementations
    154154            return 0;
     
    163163        try {
    164164            return inf.finished();
    165         } catch (Exception e) {
     165        } catch (RuntimeException e) {
    166166            // possible NPE in some implementations
    167167            return true;
  • core/java/src/net/i2p/util/SSLEepGet.java

    r9a9832c r1215a70  
    4747import java.net.InetSocketAddress;
    4848import java.net.MalformedURLException;
    49 import java.net.URL;
     49import java.net.URI;
     50import java.net.URISyntaxException;
    5051import java.security.KeyStore;
    5152import java.security.GeneralSecurityException;
     
    180181              }  // switch
    181182            } // while
    182         } catch (Exception e) {
     183        } catch (RuntimeException e) {
    183184            e.printStackTrace();
    184185            error = true;
     
    370371            try {
    371372                cert.checkValidity();
    372             } catch (Exception e) {
     373            } catch (GeneralSecurityException e) {
    373374                System.out.println("      WARNING: Certificate is not currently valid, it cannot be used");
    374375            }
     
    554555        String req = getRequest();
    555556
    556         //try {
    557             URL url = new URL(_actualURL);
    558             String host = null;
    559             int port = 0;
    560             if ("https".equals(url.getProtocol())) {
     557        String host;
     558        int port;
     559        try {
     560            URI url = new URI(_actualURL);
     561            if ("https".equals(url.getScheme())) {
    561562                host = url.getHost();
    562563                if (host.toLowerCase(Locale.US).endsWith(".i2p"))
     
    590591                throw new MalformedURLException("Only https supported: " + _actualURL);
    591592            }
    592         // an MUE is an IOE
    593         //} catch (MalformedURLException mue) {
    594         //    throw new IOException("Request URL is invalid");
    595         //}
     593        } catch (URISyntaxException use) {
     594            IOException ioe = new MalformedURLException("Redirected to invalid URL");
     595            ioe.initCause(use);
     596            throw ioe;
     597        }
    596598
    597599        _proxyIn = _proxy.getInputStream();
  • core/java/src/net/i2p/util/ShellCommand.java

    r9a9832c r1215a70  
    440440                try {
    441441                    process.waitFor();
    442                 } catch (Exception e) {
     442                } catch (InterruptedException e) {
    443443                    if (DEBUG) {
    444444                        System.out.println("ShellCommand exception waiting for \"" + name + '\"');
     
    458458                    return false;
    459459            }
    460         } catch (Exception e) {
     460        } catch (IOException e) {
    461461            // probably IOException, file not found from exec()
    462462            if (DEBUG) {
  • core/java/src/net/metanotion/io/block/BlockFile.java

    r9a9832c r1215a70  
    148148                        bf.close();
    149149                        raif.close();
    150                 } catch (Exception e) {
     150                } catch (IOException e) {
    151151                        e.printStackTrace();
    152152                }
  • installer/java/src/net/i2p/installer/Exec.java

    r9a9832c r1215a70  
    22
    33import java.io.File;
     4import java.io.IOException;
    45
    56/**
     
    2122            try { proc.exitValue(); } catch (Throwable t) { }
    2223            Runtime.getRuntime().halt(0);
    23 
    24         } catch (Exception e) {
     24        } catch (IOException e) {
     25            e.printStackTrace();
     26        } catch (RuntimeException e) {
    2527            e.printStackTrace();
    2628        }
  • installer/tools/java/src/net/i2p/router/networkdb/kademlia/BundleRouterInfos.java

    r9a9832c r1215a70  
    2525
    2626import net.i2p.I2PAppContext;
     27import net.i2p.data.DataFormatException;
    2728import net.i2p.data.Hash;
    2829import net.i2p.data.router.RouterAddress;
     
    110111            ri.readBytes(fis, true);  // true = verify sig on read
    111112            me = ri.getIdentity().getHash();
    112         } catch (Exception e) {
     113        } catch (IOException e) {
     114            //System.out.println("Can't determine our identity");
     115        } catch (DataFormatException e) {
    113116            //System.out.println("Can't determine our identity");
    114117        } finally {
     
    210213                else
    211214                    System.out.println("Failed copy of " + file + " to " + toDir);
    212             } catch (Exception e) {
     215            } catch (IOException e) {
     216                System.out.println("Skipping bad " + file);
     217            } catch (DataFormatException e) {
    213218                System.out.println("Skipping bad " + file);
    214219            } finally {
  • router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java

    r9a9832c r1215a70  
    6969        //_key = new Hash(keyData);
    7070       
    71         int num = (int)DataHelper.fromLong(data, curIndex, 1);
     71        int num = data[curIndex] & 0xff;
    7272        curIndex++;
    7373       
  • router/java/src/net/i2p/data/i2np/DeliveryInstructions.java

    r9a9832c r1215a70  
    210210    public int readBytes(byte data[], int offset) throws DataFormatException {
    211211        int cur = offset;
    212         long flags = DataHelper.fromLong(data, cur, 1);
     212        int flags = data[cur] & 0xff;
    213213        cur++;
    214214        //if (_log.shouldLog(Log.DEBUG))
  • router/java/src/net/i2p/data/i2np/FastI2NPMessageImpl.java

    r9a9832c r1215a70  
    8686        int cur = offset;
    8787        if (type < 0) {
    88             type = (int)DataHelper.fromLong(data, cur, 1);
     88            type = data[cur] & 0xff;
    8989            cur++;
    9090        }
  • router/java/src/net/i2p/data/i2np/GarlicClove.java

    r9a9832c r1215a70  
    159159                throw new RuntimeException("foo, returned 0 length");
    160160            out.write(m);
    161         } catch (Exception e) {
     161        } catch (RuntimeException e) {
    162162            throw new DataFormatException("Unable to write the clove: " + _msg + " to " + out, e);
    163163        }
     
    188188            System.arraycopy(m, 0, rv, offset, m.length);
    189189            offset += m.length;
    190         } catch (Exception e) { throw new RuntimeException("Unable to write: " + _msg + ": " + e.getMessage()); }
     190        } catch (RuntimeException e) { throw new RuntimeException("Unable to write: " + _msg + ": " + e.getMessage()); }
    191191        DataHelper.toLong(rv, offset, 4, _cloveId);
    192192        offset += 4;
  • router/java/src/net/i2p/data/i2np/I2NPMessageHandler.java

    r9a9832c r1215a70  
    6060            } catch (I2NPMessageException ime) {
    6161                throw ime;
    62             } catch (Exception e) {
     62            } catch (RuntimeException e) {
    6363                if (_log.shouldLog(Log.WARN))
    6464                    _log.warn("Error reading the stream", e);
     
    110110        int cur = offset;
    111111        // we will assume that maxLen is >= 1 here. It's checked to be >= 16 in readBytes()
    112         int type = (int)DataHelper.fromLong(data, cur, 1);
     112        int type = data[cur] & 0xff;
    113113        cur++;
    114114        _lastReadBegin = System.currentTimeMillis();
     
    132132        } catch (I2NPMessageException ime) {
    133133            throw ime;
    134         } catch (Exception e) {
     134        } catch (RuntimeException e) {
    135135            if (_log.shouldLog(Log.WARN))
    136136                _log.warn("Error reading the stream", e);
  • router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java

    r9a9832c r1215a70  
    198198        int cur = offset;
    199199        if (type < 0) {
    200             type = (int)DataHelper.fromLong(data, cur, 1);
     200            type = data[cur] & 0xff;
    201201            cur++;
    202202        }
     
    414414    public static I2NPMessage fromRawByteArray(I2PAppContext ctx, byte buffer[], int offset,
    415415                                               int len, I2NPMessageHandler handler) throws I2NPMessageException {
    416         int type = (int)DataHelper.fromLong(buffer, offset, 1);
     416        int type = buffer[offset] & 0xff;
    417417        offset++;
    418418        I2NPMessage msg = createMessage(ctx, type);
  • router/java/src/net/i2p/data/i2np/I2NPMessageReader.java

    r9a9832c r1215a70  
    164164                        _listener.disconnected(I2NPMessageReader.this);
    165165                        cancelRunner();
    166                     } catch (Exception e) {
     166                    } catch (RuntimeException e) {
    167167                        _log.log(Log.CRIT, "error reading msg!", e);
    168168                        _listener.readError(I2NPMessageReader.this, e);
  • router/java/src/net/i2p/data/i2np/VariableTunnelBuildMessage.java

    r9a9832c r1215a70  
    3030    public void readMessage(byte[] data, int offset, int dataSize, int type) throws I2NPMessageException {
    3131        // message type will be checked in super()
    32         int r = (int)DataHelper.fromLong(data, offset, 1);
     32        int r = data[offset] & 0xff;
    3333        if (r <= 0 || r > MAX_RECORD_COUNT)
    3434            throw new I2NPMessageException("Bad record count " + r);
  • router/java/src/net/i2p/data/i2np/VariableTunnelBuildReplyMessage.java

    r9a9832c r1215a70  
    3232    public void readMessage(byte[] data, int offset, int dataSize, int type) throws I2NPMessageException {
    3333        // message type will be checked in super()
    34         int r = (int)DataHelper.fromLong(data, offset, 1);
     34        int r = data[offset] & 0xff;
    3535        if (r <= 0 || r > MAX_RECORD_COUNT)
    3636            throw new I2NPMessageException("Bad record count " + r);
  • router/java/src/net/i2p/data/router/RouterInfo.java

    r9a9832c r1215a70  
    725725                     fail = true;
    726726                  }
    727              } catch (Exception e) {
     727             } catch (IOException e) {
     728                 System.err.println("Error reading " + args[i] + ": " + e);
     729                 fail = true;
     730             } catch (DataFormatException e) {
    728731                 System.err.println("Error reading " + args[i] + ": " + e);
    729732                 fail = true;
  • router/java/src/net/i2p/router/InNetMessagePool.java

    r9a9832c r1215a70  
    435435                } catch (OutOfMemoryError oome) {
    436436                    throw oome;
    437                 } catch (Exception e) {
     437                } catch (RuntimeException e) {
    438438                    if (_log.shouldLog(Log.CRIT))
    439439                        _log.log(Log.CRIT, "Error in the tunnel gateway dispatcher", e);
     
    468468                } catch (OutOfMemoryError oome) {
    469469                    throw oome;
    470                 } catch (Exception e) {
     470                } catch (RuntimeException e) {
    471471                    if (_log.shouldLog(Log.CRIT))
    472472                        _log.log(Log.CRIT, "Error in the tunnel data dispatcher", e);
  • router/java/src/net/i2p/router/JobTiming.java

    r9a9832c r1215a70  
    1717 * For use by the router only. Not to be used by applications or plugins.
    1818 */
    19 public class JobTiming implements Clock.ClockUpdateListener, RouterClock.ClockShiftListener {
     19public class JobTiming implements Clock.ClockUpdateListener {
    2020    private volatile long _start;
    2121    private volatile long _actualStart;
     
    8383            _actualEnd += delta;
    8484    }
    85 
    86     public void clockShift(long delta) {
    87         offsetChanged(delta);
    88     }
    8985}
  • router/java/src/net/i2p/router/Router.java

    r9a9832c r1215a70  
    1010
    1111import java.io.File;
     12import java.io.IOException;
    1213import java.util.Collection;
    1314import java.util.Collections;
     
    649650                //    System.err.println("WARNING: Configuration file " + filename + " does not exist");
    650651            }
    651         } catch (Exception ioe) {
     652        } catch (IOException ioe) {
    652653            if (log != null)
    653654                log.error("Error loading the router configuration from " + filename, ioe);
     
    13521353                DataHelper.storeProps(ordered, new File(_configFilename));
    13531354            }
    1354         } catch (Exception ioe) {
     1355        } catch (IOException ioe) {
    13551356                // warning, _log will be null when called from constructor
    13561357                if (_log != null)
  • router/java/src/net/i2p/router/dummy/VMCommSystem.java

    r9a9832c r1215a70  
    99import net.i2p.data.Hash;
    1010import net.i2p.data.i2np.I2NPMessage;
     11import net.i2p.data.i2np.I2NPMessageException;
    1112import net.i2p.data.i2np.I2NPMessageHandler;
    1213import net.i2p.router.CommSystemFacade;
     
    122123
    123124                _ctx.inNetMessagePool().add(msg, null, _from);
    124             } catch (Exception e) {
     125            } catch (I2NPMessageException e) {
    125126                _log.error("Error reading/formatting a VM message? Something is not right...", e);
    126127            }
  • router/java/src/net/i2p/router/message/GarlicMessageParser.java

    r9a9832c r1215a70  
    7676        int offset = 0;
    7777       
    78         int numCloves = (int)DataHelper.fromLong(data, offset, 1);
     78        int numCloves = data[offset] & 0xff;
    7979        offset++;
    8080        if (_log.shouldLog(Log.DEBUG))
  • router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java

    r9a9832c r1215a70  
    950950                    size = ((size + 1023) / 1024) * 1024; // messages are in ~1KB blocks
    951951               
    952                 for (int i = 0; i < _outTunnel.getLength(); i++) {
     952                // skip ourselves at first hop
     953                for (int i = 1; i < _outTunnel.getLength(); i++) {
    953954                    getContext().profileManager().tunnelTestSucceeded(_outTunnel.getPeer(i), sendTime);
    954955                    getContext().profileManager().tunnelDataPushed(_outTunnel.getPeer(i), sendTime, size);
     
    956957                _outTunnel.incrementVerifiedBytesTransferred(size);
    957958            }
    958             if (_inTunnel != null)
    959                 for (int i = 0; i < _inTunnel.getLength(); i++)
     959            if (_inTunnel != null) {
     960                // skip ourselves at last hop
     961                for (int i = 0; i < _inTunnel.getLength() - 1; i++) {
    960962                    getContext().profileManager().tunnelTestSucceeded(_inTunnel.getPeer(i), sendTime);
     963                }
     964            }
    961965        }
    962966
  • router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java

    r9a9832c r1215a70  
    544544                        _log.info("Unable to read the router reference in " + _routerFile.getName(), ioe);
    545545                    corrupt = true;
    546                 } catch (Exception e) {
     546                } catch (RuntimeException e) {
    547547                    // key certificate problems, etc., don't let one bad RI kill the whole thing
    548548                    if (_log.shouldLog(Log.INFO))
     
    667667            Hash h = Hash.create(b);
    668668            return h;
    669         } catch (Exception e) {
     669        } catch (RuntimeException e) {
    670670            // static
    671671            //_log.warn("Unable to fetch the key from [" + filename + "]", e);
  • router/java/src/net/i2p/router/networkdb/reseed/ReseedChecker.java

    r9a9832c r1215a70  
    44import java.io.InputStream;
    55import java.io.IOException;
    6 import java.net.URL;
     6import java.net.URI;
    77import java.util.concurrent.atomic.AtomicBoolean;
    88
     
    132132     *  @since 0.9.19
    133133     */
    134     public boolean requestReseed(URL url) throws IllegalArgumentException {
     134    public boolean requestReseed(URI url) throws IllegalArgumentException {
    135135        if (_inProgress.compareAndSet(false, true)) {
    136136            Reseeder reseeder = new Reseeder(_context, this);
  • router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java

    r9a9832c r1215a70  
    88import java.io.IOException;
    99import java.io.OutputStream;
    10 import java.net.MalformedURLException;
    1110import java.net.URI;
    1211import java.net.URISyntaxException;
    13 import java.net.URL;
    1412import java.util.Arrays;
    1513import java.util.ArrayList;
     
    153151     *  @since 0.9.19
    154152     */
    155     void requestReseed(URL url) throws IllegalArgumentException {
     153    void requestReseed(URI url) throws IllegalArgumentException {
    156154        ReseedRunner reseedRunner = new ReseedRunner(url);
    157155        // set to daemon so it doesn't hang a shutdown
     
    239237        private final List<Long> _bandwidths;
    240238        private static final int MAX_DATE_SETS = 2;
    241         private final URL _url;
     239        private final URI _url;
    242240
    243241        /**
     
    256254         *  @since 0.9.19
    257255         */
    258         public ReseedRunner(URL url) throws IllegalArgumentException {
     256        public ReseedRunner(URI url) throws IllegalArgumentException {
    259257            String lc = url.getPath().toLowerCase(Locale.US);
    260258            if (!(lc.endsWith(".zip") || lc.endsWith(".su3")))
     
    412410        */
    413411        private int reseed(boolean echoStatus) {
    414             List<URL> URLList = new ArrayList<URL>();
     412            List<URI> URLList = new ArrayList<URI>();
    415413            String URLs = _context.getProperty(PROP_RESEED_URL);
    416414            boolean defaulted = URLs == null;
     
    429427                        u = u + '/';
    430428                    try {
    431                         URLList.add(new URL(u));
    432                     } catch (MalformedURLException mue) {}
     429                        URLList.add(new URI(u));
     430                    } catch (URISyntaxException mue) {}
    433431                }
    434432                Collections.shuffle(URLList, _context.random());
    435433                if (!SSLDisable && !SSLRequired) {
    436434                    // put the non-SSL at the end of the SSL
    437                     List<URL> URLList2 = new ArrayList<URL>();
     435                    List<URI> URLList2 = new ArrayList<URI>();
    438436                    tok = new StringTokenizer(DEFAULT_SEED_URL, " ,");
    439437                    while (tok.hasMoreTokens()) {
     
    442440                            u = u + '/';
    443441                        try {
    444                             URLList2.add(new URL(u));
    445                         } catch (MalformedURLException mue) {}
     442                            URLList2.add(new URI(u));
     443                        } catch (URISyntaxException mue) {}
    446444                    }
    447445                    Collections.shuffle(URLList2, _context.random());
     
    450448            } else {
    451449                // custom list given
    452                 List<URL> SSLList = new ArrayList<URL>();
    453                 List<URL> nonSSLList = new ArrayList<URL>();
     450                List<URI> SSLList = new ArrayList<URI>();
     451                List<URI> nonSSLList = new ArrayList<URI>();
    454452                StringTokenizer tok = new StringTokenizer(URLs, " ,");
    455453                while (tok.hasMoreTokens()) {
     
    461459                    if (u.startsWith("https")) {
    462460                        try {
    463                             SSLList.add(new URL(u));
    464                         } catch (MalformedURLException mue) {}
     461                            SSLList.add(new URI(u));
     462                        } catch (URISyntaxException mue) {}
    465463                    } else {
    466464                        try {
    467                             nonSSLList.add(new URL(u));
    468                         } catch (MalformedURLException mue) {}
     465                            nonSSLList.add(new URI(u));
     466                        } catch (URISyntaxException mue) {}
    469467                    }
    470468                }
     
    482480            if (!isSNISupported()) {
    483481                try {
    484                     URLList.remove(new URL("https://netdb.i2p2.no/"));
    485                 } catch (MalformedURLException mue) {}
     482                    URLList.remove(new URI("https://netdb.i2p2.no/"));
     483                } catch (URISyntaxException mue) {}
    486484            }
    487485            if (URLList.isEmpty()) {
     
    501499        * @return count of routerinfos successfully fetched
    502500        */
    503         private int reseed(List<URL> URLList, boolean echoStatus) {
     501        private int reseed(List<URI> URLList, boolean echoStatus) {
    504502            int total = 0;
    505503            for (int i = 0; i < URLList.size() && _isRunning; i++) {
     
    508506                    return total;
    509507                }
    510                 URL url = URLList.get(i);
     508                URI url = URLList.get(i);
    511509                int dl = 0;
    512510                if (ENABLE_SU3) {
    513511                    try {
    514                         dl = reseedSU3(new URL(url.toString() + SU3_FILENAME), echoStatus);
    515                     } catch (MalformedURLException mue) {}
     512                        dl = reseedSU3(new URI(url.toString() + SU3_FILENAME), echoStatus);
     513                    } catch (URISyntaxException mue) {}
    516514                }
    517515                if (ENABLE_NON_SU3) {
     
    557555         * @return count of routerinfos successfully fetched
    558556         **/
    559         private int reseedOne(URL seedURL, boolean echoStatus) {
     557        private int reseedOne(URI seedURL, boolean echoStatus) {
    560558            try {
    561559                // Don't use context clock as we may be adjusting the time
     
    628626                                System.out.println();
    629627                        }
    630                     } catch (Exception e) {
     628                    } catch (RuntimeException e) {
    631629                        if (_log.shouldLog(Log.INFO))
    632630                            _log.info("Failed fetch", e);
     
    659657         *  @since 0.9.14
    660658         **/
    661         public int reseedSU3(URL seedURL, boolean echoStatus) {
     659        public int reseedSU3(URI seedURL, boolean echoStatus) {
    662660            return reseedSU3OrZip(seedURL, true, echoStatus);
    663661        }
     
    673671         *  @since 0.9.19
    674672         **/
    675         public int reseedZip(URL seedURL, boolean echoStatus) {
     673        public int reseedZip(URI seedURL, boolean echoStatus) {
    676674            return reseedSU3OrZip(seedURL, false, echoStatus);
    677675        }
     
    687685         *  @since 0.9.19
    688686         **/
    689         private int reseedSU3OrZip(URL seedURL, boolean isSU3, boolean echoStatus) {
     687        private int reseedSU3OrZip(URI seedURL, boolean isSU3, boolean echoStatus) {
    690688            int fetched = 0;
    691689            int errors = 0;
     
    869867                return false;
    870868
    871             URL url = new URL(seedURL + (seedURL.endsWith("/") ? "" : "/") + ROUTERINFO_PREFIX + peer + ROUTERINFO_SUFFIX);
     869            URI url = new URI(seedURL + (seedURL.endsWith("/") ? "" : "/") + ROUTERINFO_PREFIX + peer + ROUTERINFO_SUFFIX);
    872870
    873871            byte data[] = readURL(url);
     
    878876
    879877        /** @return null on error */
    880         private byte[] readURL(URL url) throws IOException {
     878        private byte[] readURL(URI url) throws IOException {
    881879            ByteArrayOutputStream baos = new ByteArrayOutputStream(4*1024);
    882880            EepGet get;
     
    923921         *  @since 0.9.14
    924922         */
    925         private File fetchURL(URL url) throws IOException {
     923        private File fetchURL(URI url) throws IOException {
    926924            File out = new File(_context.getTempDir(), "reseed-" + _context.random().nextInt() + ".tmp");
    927925            EepGet get;
  • router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java

    r9a9832c r1215a70  
    157157     */
    158158    public PeerProfile getProfile(Hash peer) {
     159        if (peer.equals(_us)) {
     160            if (_log.shouldWarn())
     161                _log.warn("Who wanted our own profile?", new Exception("I did"));
     162            return null;
     163        }
    159164        getReadLock();
    160165        try {
     
    169174     */
    170175    public PeerProfile getProfileNonblocking(Hash peer) {
     176        if (peer.equals(_us)) {
     177            if (_log.shouldWarn())
     178                _log.warn("Who wanted our own profile?", new Exception("I did"));
     179            return null;
     180        }
    171181        if (tryReadLock()) {
    172182            try {
     
    185195
    186196        Hash peer = profile.getPeer();
     197        if (peer.equals(_us)) {
     198            if (_log.shouldWarn())
     199                _log.warn("Who added our own profile?", new Exception("I did"));
     200            return null;
     201        }
    187202
    188203        if (_log.shouldLog(Log.DEBUG))
  • router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java

    r9a9832c r1215a70  
    302302           
    303303            return profile;
    304         } catch (Exception e) {
     304        } catch (IOException e) {
    305305            if (_log.shouldLog(Log.WARN))
    306306                _log.warn("Error loading properties from " + file.getAbsolutePath(), e);
     
    370370            Hash h = Hash.create(b);
    371371            return h;
    372         } catch (Exception dfe) {
     372        } catch (RuntimeException dfe) {
    373373            _log.warn("Invalid base64 [" + key + "]", dfe);
    374374            return null;
  • router/java/src/net/i2p/router/startup/RebuildRouterInfoJob.java

    r9a9832c r1215a70  
    9999                    info = new RouterInfo();
    100100                    info.setIdentity(kd.routerIdentity);
    101                 } catch (Exception e) {
     101                } catch (DataFormatException e) {
     102                    _log.log(Log.CRIT, "Error reading in the key data from " + keyFile.getAbsolutePath(), e);
     103                    keyFile.delete();
     104                    keyFile2.delete();
     105                    rebuildRouterInfo(alreadyRunning);
     106                    return;
     107                } catch (IOException e) {
    102108                    _log.log(Log.CRIT, "Error reading in the key data from " + keyFile.getAbsolutePath(), e);
    103109                    keyFile.delete();
  • router/java/src/net/i2p/router/startup/WorkingDir.java

    r9a9832c r1215a70  
    212212            if (files == null)
    213213                return false;
    214             String migrated[] = MIGRATE_BASE.split(",");
     214            String migrated[] = DataHelper.split(MIGRATE_BASE, ",");
    215215            for (String file: files) {
    216216                for (int i = 0; i < migrated.length; i++) {
     
    283283    private static boolean migrate(String list, File olddir, File todir) {
    284284        boolean rv = true;
    285         String files[] = list.split(",");
     285        String files[] = DataHelper.split(list, ",");
    286286        for (int i = 0; i < files.length; i++) {
    287287            File from = new File(olddir, files[i]);
  • router/java/src/net/i2p/router/time/Zones.java

    r9a9832c r1215a70  
    1111
    1212import net.i2p.I2PAppContext;
     13import net.i2p.data.DataHelper;
    1314import net.i2p.router.transport.GeoIP;
    1415
     
    106107                    if (line.charAt(0) == '#')
    107108                        continue;
    108                     String[] s = line.split(",");
     109                    String[] s = DataHelper.split(line, ",");
    109110                    String ucContinent = s[1].toUpperCase(Locale.US).trim();
    110111                    String zone = _continentToZone.get(ucContinent);
  • router/java/src/net/i2p/router/transport/GeoIP.java

    r9a9832c r1215a70  
    1818
    1919import net.i2p.I2PAppContext;
     20import net.i2p.data.DataHelper;
    2021import net.i2p.data.Hash;
    2122import net.i2p.router.Router;
     
    210211                        continue;
    211212                    }
    212                     String[] s = line.split(",");
     213                    String[] s = DataHelper.split(line, ",");
    213214                    String lc = s[0].toLowerCase(Locale.US);
    214215                    _codeToName.put(lc, s[1]);
     
    275276                        continue;
    276277                    }
    277                     String[] s = buf.split(",");
     278                    String[] s = DataHelper.split(buf, ",");
    278279                    long ip1 = Long.parseLong(s[0]);
    279280                    long ip2 = Long.parseLong(s[1]);
  • router/java/src/net/i2p/router/transport/GeoIPv6.java

    r9a9832c r1215a70  
    171171                            continue;
    172172                        }
    173                         String[] s = buf.split(",");
     173                        String[] s = DataHelper.split(buf, ",");
    174174                        String ips1 = s[0].replace("\"", "").trim();
    175175                        String ips2 = s[1].replace("\"", "").trim();
  • router/java/src/net/i2p/router/transport/UPnP.java

    r9a9832c r1215a70  
    55
    66import java.net.InetAddress;
    7 import java.net.MalformedURLException;
    87import java.net.UnknownHostException;
    9 import java.net.URL;
     8import java.net.URI;
     9import java.net.URISyntaxException;
    1010import java.util.Collections;
    1111import java.util.HashMap;
     
    225225                String toIgnore = _context.getProperty(PROP_IGNORE);
    226226                if (toIgnore != null) {
    227                         String[] ignores = toIgnore.split("[,; \r\n\t]");
     227                        String[] ignores = DataHelper.split(toIgnore, "[,; \r\n\t]");
    228228                        for (int i = 0; i < ignores.length; i++) {
    229229                                if (ignores[i].equals(udn)) {
     
    477477                try {
    478478                        table = serv.getServiceStateTable();
    479                 } catch (Exception e) {
     479                } catch (RuntimeException e) {
    480480                        // getSCPDNode() returns null,
    481481                        // NPE at org.cybergarage.upnp.Service.getServiceStateTable(Service.java:526)
     
    824824                if (him != null && him.length() > 0) {
    825825                        try {
    826                                 URL url = new URL(him);
     826                                URI url = new URI(him);
    827827                                hisIP = url.getHost();
    828                         } catch (MalformedURLException mue) {}
     828                        } catch (URISyntaxException use) {}
    829829                }
    830830                if (hisIP == null) {
     
    832832                        if (him != null && him.length() > 0) {
    833833                                try {
    834                                         URL url = new URL(him);
     834                                        URI url = new URI(him);
    835835                                        hisIP = url.getHost();
    836                                 } catch (MalformedURLException mue) {}
     836                                } catch (URISyntaxException use) {}
    837837                        }
    838838                }
  • router/java/src/net/i2p/router/transport/UPnPManager.java

    r9a9832c r1215a70  
    8989                if (_log.shouldLog(Log.INFO))
    9090                    _log.info("UPnP runPlugin took " + (_context.clock().now() - b));
    91             } catch (Exception e) {
     91            } catch (RuntimeException e) {
    9292                // NPE in UPnP (ticket #728), can't let it bring us down
    9393                if (!_errorLogged) {
  • router/java/src/net/i2p/router/transport/ntcp/EventPumper.java

    r9a9832c r1215a70  
    336336                            key.cancel();
    337337                        }
    338                     } catch (Exception ke) {
     338                    } catch (IOException ke) {
    339339                        _log.error("Error closing key " + key + " on pumper shutdown", ke);
    340340                    }
     
    345345                    _log.debug("Closing down the event pumper with no selection keys remaining");
    346346            }
    347         } catch (Exception e) {
     347        } catch (IOException e) {
    348348            _log.error("Error closing keys on pumper shutdown", e);
    349349        }
  • router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java

    r9a9832c r1215a70  
    464464            if (_consecutiveBacklog > 10) { // waaay too backlogged
    465465                boolean wantsWrite = false;
    466                 try { wantsWrite = ( (_conKey.interestOps() & SelectionKey.OP_WRITE) != 0); } catch (Exception e) {}
     466                try { wantsWrite = ( (_conKey.interestOps() & SelectionKey.OP_WRITE) != 0); } catch (RuntimeException e) {}
    467467                if (_log.shouldLog(Log.WARN)) {
    468468                    int blocks = _writeBufs.size();
     
    522522                          + ", currentOut set? " + currentOutboundSet
    523523                          + ", writeBufs: " + writeBufs + " on " + toString());
    524                 } catch (Exception e) {}  // java.nio.channels.CancelledKeyException
     524                } catch (RuntimeException e) {}  // java.nio.channels.CancelledKeyException
    525525            }
    526526            //_context.statManager().addRateData("ntcp.sendBacklogTime", queueTime);
  • router/java/src/net/i2p/router/transport/udp/ACKSender.java

    r9a9832c r1215a70  
    149149                            // bulk operations may throw an exception
    150150                            _peersToACK.addAll(notYet);
    151                         } catch (Exception e) {}
     151                        } catch (RuntimeException e) {}
    152152                        if (_log.shouldLog(Log.DEBUG))
    153153                            _log.debug("sleeping, pending size = " + notYet.size());
  • router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java

    r9a9832c r1215a70  
    3030import net.i2p.util.I2PThread;
    3131import net.i2p.util.Log;
     32import net.i2p.util.VersionComparator;
    3233
    3334/**
     
    127128    private static final int DATA_MESSAGE_TIMEOUT = 10*1000;
    128129   
     130    /**
     131     * Java I2P has always parsed the length of the extended options field,
     132     * but i2pd hasn't recognized it until this release.
     133     * No matter, the options weren't defined until this release anyway.
     134     *
     135**********************************************************************************************************
     136     * FIXME 0.9.23 for testing, change to 0.9.24 for release
     137     *
     138     */
     139    private static final String VERSION_ALLOW_EXTENDED_OPTIONS = "0.9.23";
     140    private static final String PROP_DISABLE_EXT_OPTS = "i2np.udp.disableExtendedOptions";
     141
     142
    129143    public EstablishmentManager(RouterContext ctx, UDPTransport transport) {
    130144        _context = ctx;
     
    357371                        return;
    358372                    }
     373                    boolean allowExtendedOptions = VersionComparator.comp(toRouterInfo.getVersion(),
     374                                                                          VERSION_ALLOW_EXTENDED_OPTIONS) >= 0
     375                                                   && !_context.getBooleanProperty(PROP_DISABLE_EXT_OPTS);
     376                    // w/o ext options, it's always 'requested', no need to set
     377                    // don't ask if they are indirect
     378                    boolean requestIntroduction = allowExtendedOptions && !isIndirect &&
     379                                                  _transport.introducersMaybeRequired();
    359380                    state = new OutboundEstablishState(_context, maybeTo, to,
    360                                                        toIdentity,
     381                                                       toIdentity, allowExtendedOptions,
     382                                                       requestIntroduction,
    361383                                                       sessionKey, addr, _transport.getDHFactory());
    362384                    OutboundEstablishState oldState = _outboundStates.putIfAbsent(to, state);
     
    478500            // Only offer for an IPv4 session.
    479501            // TODO if already we have their RI, only offer if they need it (no 'C' cap)
    480             if (_transport.canIntroduce() && state.getSentPort() >= 1024 &&
     502            // if extended options, only if they asked for it
     503            if (state.isIntroductionRequested() &&
     504                _transport.canIntroduce() && state.getSentPort() >= 1024 &&
    481505                state.getSentIP().length == 4) {
    482506                // ensure > 0
  • router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java

    r9a9832c r1215a70  
    6363    // count for backoff
    6464    private int _createdSentCount;
     65    // default true
     66    private boolean _introductionRequested = true;
    6567   
    6668    public enum InboundState {
     
    151153            _bobIP = new byte[req.readIPSize()];
    152154        req.readIP(_bobIP, 0);
     155        byte[] ext = req.readExtendedOptions();
     156        if (ext != null && ext.length >= UDPPacket.SESS_REQ_MIN_EXT_OPTIONS_LENGTH) {
     157            _introductionRequested = (ext[1] & (byte) UDPPacket.SESS_REQ_EXT_FLAG_REQUEST_RELAY_TAG) != 0;
     158            if (_log.shouldInfo())
     159                _log.info("got sess req. w/ ext. options, need intro? " + _introductionRequested + ' ' + this);
     160        }
    153161        if (_log.shouldLog(Log.DEBUG))
    154162            _log.debug("Receive sessionRequest, BobIP = " + Addresses.toString(_bobIP));
     
    161169    public synchronized byte[] getReceivedX() { return _receivedX; }
    162170    public synchronized byte[] getReceivedOurIP() { return _bobIP; }
     171    /**
     172     *  True (default) if no extended options in session request,
     173     *  or value of flag bit in the extended options.
     174     *  @since 0.9.24
     175     */
     176    public synchronized boolean isIntroductionRequested() { return _introductionRequested; }
    163177   
    164178    /**
  • router/java/src/net/i2p/router/transport/udp/MessageReceiver.java

    r9a9832c r1215a70  
    244244            _context.messageHistory().droppedInboundMessage(state.getMessageId(), state.getFrom(), "error: " + ime.toString() + ": " + state.toString());
    245245            return null;
    246         } catch (Exception e) {
     246        } catch (RuntimeException e) {
    247247            // e.g. AIOOBE
    248248            if (_log.shouldLog(Log.WARN))
  • router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java

    r9a9832c r1215a70  
    5757    private final RemoteHostId _claimedAddress;
    5858    private final RouterIdentity _remotePeer;
     59    private final boolean _allowExtendedOptions;
     60    private final boolean _needIntroduction;
    5961    private final SessionKey _introKey;
    6062    private final Queue<OutNetMessage> _queuedMessages;
     
    108110     *  @param remoteHostId non-null, == claimedAddress if direct, or a hash-based one if indirect
    109111     *  @param remotePeer must have supported sig type
     112     *  @param allowExtenededOptions are we allowed to send extended options to Bob?
     113     *  @param needIntroduction should we ask Bob to be an introducer for us?
     114               ignored unless allowExtendedOptions is true
    110115     *  @param introKey Bob's introduction key, as published in the netdb
    111116     *  @param addr non-null
     
    113118    public OutboundEstablishState(RouterContext ctx, RemoteHostId claimedAddress,
    114119                                  RemoteHostId remoteHostId,
    115                                   RouterIdentity remotePeer, SessionKey introKey, UDPAddress addr,
     120                                  RouterIdentity remotePeer, boolean allowExtendedOptions,
     121                                  boolean needIntroduction,
     122                                  SessionKey introKey, UDPAddress addr,
    116123                                  DHSessionKeyBuilder.Factory dh) {
    117124        _context = ctx;
     
    126133        _claimedAddress = claimedAddress;
    127134        _remoteHostId = remoteHostId;
     135        _allowExtendedOptions = allowExtendedOptions;
     136        _needIntroduction = needIntroduction;
    128137        _remotePeer = remotePeer;
    129138        _introKey = introKey;
     
    158167    /** @return -1 if unset */
    159168    public long getIntroNonce() { return _introductionNonce; }
     169
     170    /**
     171     *  Are we allowed to send extended options to this peer?
     172     *  @since 0.9.24
     173     */
     174    public boolean isExtendedOptionsAllowed() { return _allowExtendedOptions; }
     175
     176    /**
     177     *  Should we ask this peer to be an introducer for us?
     178     *  Ignored unless allowExtendedOptions is true
     179     *  @since 0.9.24
     180     */
     181    public boolean needIntroduction() { return _needIntroduction; }
    160182   
    161183    /**
  • router/java/src/net/i2p/router/transport/udp/PacketBuilder.java

    r9a9832c r1215a70  
    5858the following bitfields:</p>
    5959<pre>
    60   bits 0-3: payload type
    61      bit 4: rekey?
    62      bit 5: extended options included
    63   bits 6-7: reserved
     60Bit order: 76543210
     61  bits 7-4: payload type
     62     bit 3: rekey?
     63     bit 2: extended options included
     64  bits 1-0: reserved
    6465</pre>
    6566
     
    167168    private static final boolean DEFAULT_ENABLE_PADDING = true;
    168169
     170    /**
     171     *  The nine message types, 0-8, shifted to bits 7-4 for convenience
     172     */
     173    private static final byte SESSION_REQUEST_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_SESSION_REQUEST << 4;
     174    private static final byte SESSION_CREATED_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_SESSION_CREATED << 4;
     175    private static final byte SESSION_CONFIRMED_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_SESSION_CONFIRMED << 4;
     176    private static final byte PEER_RELAY_REQUEST_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_RELAY_REQUEST << 4;
     177    private static final byte PEER_RELAY_RESPONSE_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_RELAY_RESPONSE << 4;
     178    private static final byte PEER_RELAY_INTRO_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_RELAY_INTRO << 4;
     179    private static final byte DATA_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_DATA << 4;
     180    private static final byte PEER_TEST_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_TEST << 4;
     181    private static final byte SESSION_DESTROY_FLAG_BYTE = (byte) (UDPPacket.PAYLOAD_TYPE_SESSION_DESTROY << 4);
     182   
    169183    /**
    170184     *  @param transport may be null for unit testing only
     
    333347
    334348        // make the packet
    335         UDPPacket packet = buildPacketHeader((byte)(UDPPacket.PAYLOAD_TYPE_DATA << 4));
     349        UDPPacket packet = buildPacketHeader(DATA_FLAG_BYTE);
    336350        DatagramPacket pkt = packet.getPacket();
    337351        byte data[] = pkt.getData();
     
    574588     */
    575589    public UDPPacket buildACK(PeerState peer, List<ACKBitfield> ackBitfields) {
    576         UDPPacket packet = buildPacketHeader((byte)(UDPPacket.PAYLOAD_TYPE_DATA << 4));
     590        UDPPacket packet = buildPacketHeader(DATA_FLAG_BYTE);
    577591        DatagramPacket pkt = packet.getPacket();
    578592        byte data[] = pkt.getData();
     
    668682    }
    669683   
    670     /**
    671      * full flag info for a sessionCreated message.  this can be fixed,
    672      * since we never rekey on startup, and don't need any extended options
    673      */
    674     private static final byte SESSION_CREATED_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_SESSION_CREATED << 4);
    675    
    676684    /**
    677685     * Build a new SessionCreated packet for the given peer, encrypting it
     
    769777    }
    770778   
    771     /**
    772      * full flag info for a sessionRequest message.  this can be fixed,
    773      * since we never rekey on startup, and don't need any extended options
    774      */
    775     private static final byte SESSION_REQUEST_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_SESSION_REQUEST << 4);
    776    
    777779    /**
    778780     * Build a new SessionRequest packet for the given peer, encrypting it
     
    782784     */
    783785    public UDPPacket buildSessionRequestPacket(OutboundEstablishState state) {
    784         UDPPacket packet = buildPacketHeader(SESSION_REQUEST_FLAG_BYTE);
     786        int off = HEADER_SIZE;
     787        byte[] options;
     788        boolean ext = state.isExtendedOptionsAllowed();
     789        if (ext) {
     790            options = new byte[UDPPacket.SESS_REQ_MIN_EXT_OPTIONS_LENGTH];
     791            boolean intro = state.needIntroduction();
     792            if (intro)
     793                options[1] = (byte) UDPPacket.SESS_REQ_EXT_FLAG_REQUEST_RELAY_TAG;
     794            if (_log.shouldInfo())
     795                _log.info("send sess req. w/ ext. options, need intro? " + intro + ' ' + state);
     796            off += UDPPacket.SESS_REQ_MIN_EXT_OPTIONS_LENGTH + 1;
     797        } else {
     798            options = null;
     799        }
     800        UDPPacket packet = buildPacketHeader(SESSION_REQUEST_FLAG_BYTE, options);
    785801        DatagramPacket pkt = packet.getPacket();
    786802        byte data[] = pkt.getData();
    787         int off = HEADER_SIZE;
    788803
    789804        byte toIP[] = state.getSentIP();
     
    855870    }
    856871
    857    
    858     /**
    859      * full flag info for a sessionConfirmed message.  this can be fixed,
    860      * since we never rekey on startup, and don't need any extended options
    861      */
    862     private static final byte SESSION_CONFIRMED_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_SESSION_CONFIRMED << 4);
    863    
    864872    /**
    865873     * Build a new SessionConfirmed packet for the given peer
     
    10191027     */
    10201028    private UDPPacket buildSessionDestroyPacket(SessionKey cipherKey, SessionKey macKey, InetAddress addr, int port) {
    1021         UDPPacket packet = buildPacketHeader((byte)(UDPPacket.PAYLOAD_TYPE_SESSION_DESTROY << 4));
     1029        UDPPacket packet = buildPacketHeader(SESSION_DESTROY_FLAG_BYTE);
    10221030        int off = HEADER_SIZE;
    10231031       
     
    10351043    }
    10361044   
    1037     /**
    1038      * full flag info for a peerTest message.  this can be fixed,
    1039      * since we never rekey on test, and don't need any extended options
    1040      */
    1041     private static final byte PEER_TEST_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_TEST << 4);
    1042 
    10431045    /**
    10441046     * Build a packet as if we are Alice and we either want Bob to begin a
     
    11981200        return packet;
    11991201    }
    1200    
    1201     /**
    1202      * full flag info for a relay request message.  this can be fixed,
    1203      * since we never rekey on relay request, and don't need any extended options
    1204      */
    1205     private static final byte PEER_RELAY_REQUEST_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_REQUEST << 4);
    12061202
    12071203    // specify these if we know what our external receive ip/port is and if its different
     
    13311327    }
    13321328
    1333     /**
    1334      * full flag info for a relay intro message.  this can be fixed,
    1335      * since we never rekey on relay request, and don't need any extended options
    1336      */
    1337     private static final byte PEER_RELAY_INTRO_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_INTRO << 4);
    1338    
    13391329    UDPPacket buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request) {
    13401330        UDPPacket packet = buildPacketHeader(PEER_RELAY_INTRO_FLAG_BYTE);
     
    13711361        return packet;
    13721362    }
    1373 
    1374     /**
    1375      * full flag info for a relay response message.  this can be fixed,
    1376      * since we never rekey on relay response, and don't need any extended options
    1377      */
    1378     private static final byte PEER_RELAY_RESPONSE_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_RESPONSE << 4);
    13791363   
    13801364    UDPPacket buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce,
     
    14631447     *  Create a new packet and add the flag byte and the time stamp.
    14641448     *  Caller should add data starting at HEADER_SIZE.
    1465      *  At this point, adding support for extended options and rekeying is unlikely,
    1466      *  but if we do, we'll have to change this.
     1449     *  Does not include extended options or rekeying.
    14671450     *
    14681451     *  @param flagByte contains type and flags
     
    14701453     */
    14711454    private UDPPacket buildPacketHeader(byte flagByte) {
     1455        return buildPacketHeader(flagByte, null);
     1456    }
     1457
     1458    /**
     1459     *  Create a new packet and add the flag byte and the time stamp.
     1460     *  Caller should add data starting at HEADER_SIZE.
     1461     *  (if extendedOptions != null, at HEADER_SIZE + 1 + extendedOptions.length)
     1462     *  Does not include rekeying.
     1463     *
     1464     *  @param flagByte contains type and flags
     1465     *  @param extendedOptions May be null. If non-null, we will add the associated flag here.
     1466     *                         255 bytes max.
     1467     *  @since 0.9.24
     1468     */
     1469    private UDPPacket buildPacketHeader(byte flagByte, byte[] extendedOptions) {
    14721470        UDPPacket packet = UDPPacket.acquire(_context, false);
    14731471        byte data[] = packet.getPacket().getData();
     
    14761474       
    14771475        // header
     1476        if (extendedOptions != null)
     1477            flagByte |= UDPPacket.HEADER_FLAG_EXTENDED_OPTIONS;
    14781478        data[off] = flagByte;
    14791479        off++;
     1480        // Note, this is unsigned, so we're good until February 2106
    14801481        long now = (_context.clock().now() + 500) / 1000;
    14811482        DataHelper.toLong(data, off, 4, now);
    1482         // todo: add support for rekeying and extended options
     1483        // todo: add support for rekeying
     1484        // extended options
     1485        if (extendedOptions != null) {
     1486            off+= 4;
     1487            int len = extendedOptions.length;
     1488            if (len > 255)
     1489                throw new IllegalArgumentException();
     1490            data[off++] = (byte) len;
     1491            System.arraycopy(extendedOptions, 0, data, off, len);
     1492        }
    14831493        return packet;
    14841494    }
  • router/java/src/net/i2p/router/transport/udp/PacketHandler.java

    r9a9832c r1215a70  
    216216                    handlePacket(_reader, packet);
    217217                    _state = 6;
    218                 } catch (Exception e) {
     218                } catch (RuntimeException e) {
    219219                    _state = 7;
    220220                    if (_log.shouldLog(Log.ERROR))
  • router/java/src/net/i2p/router/transport/udp/PacketPusher.java

    r9a9832c r1215a70  
    4444                    }
    4545                }
    46             } catch (Exception e) {
     46            } catch (RuntimeException e) {
    4747                _log.error("SSU Output Queue Error", e);
    4848            }
  • router/java/src/net/i2p/router/transport/udp/UDPPacket.java

    r9a9832c r1215a70  
    8686    public static final int PAYLOAD_TYPE_DATA = 6;
    8787    public static final int PAYLOAD_TYPE_TEST = 7;
    88     public static final int MAX_PAYLOAD_TYPE = PAYLOAD_TYPE_TEST;
    8988    /** @since 0.8.1 */
    9089    public static final int PAYLOAD_TYPE_SESSION_DESTROY = 8;
    91    
     90    public static final int MAX_PAYLOAD_TYPE = PAYLOAD_TYPE_SESSION_DESTROY;
     91   
     92    // various flag fields for use in the header
     93    /**
     94     *  Defined in the spec from the beginning, Unused
     95     *  @since 0.9.24
     96     */
     97    public static final byte HEADER_FLAG_REKEY = (1 << 3);
     98    /**
     99     *  Defined in the spec from the beginning, Used starting in 0.9.24
     100     *  @since 0.9.24
     101     */
     102    public static final byte HEADER_FLAG_EXTENDED_OPTIONS = (1 << 2);
     103
     104    // Extended options for session request
     105    public static final int SESS_REQ_MIN_EXT_OPTIONS_LENGTH = 2;
     106    // bytes 0-1 are flags
     107    /**
     108     * set to 1 to request a session tag, i.e. we want him to be an introducer for us
     109     */
     110    public static final int SESS_REQ_EXT_FLAG_REQUEST_RELAY_TAG = 0x01;
     111
    92112    // various flag fields for use in the data packets
    93113    public static final byte DATA_FLAG_EXPLICIT_ACK = (byte)(1 << 7);
    94114    public static final byte DATA_FLAG_ACK_BITFIELDS = (1 << 6);
    95     // unused
     115    /** unused */
    96116    public static final byte DATA_FLAG_ECN = (1 << 4);
    97117    public static final byte DATA_FLAG_WANT_ACKS = (1 << 3);
    98118    public static final byte DATA_FLAG_WANT_REPLY = (1 << 2);
    99     // unused
     119    /** unused */
    100120    public static final byte DATA_FLAG_EXTENDED = (1 << 1);
    101121   
  • router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java

    r9a9832c