Changeset 5f96067


Ignore:
Timestamp:
Mar 3, 2017 2:00:47 PM (3 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
74151b0, e20310d
Parents:
61e4e2a (diff), f7cdf22 (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:

merge of 'bd4c9889786a280f8797cbdc6ca9cddb8c7260a2'

and 'fe4b2b6942b6c0dbe1efda4e2fa555289e74cbef'

Files:
11 edited

Legend:

Unmodified
Added
Removed
  • apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java

    r61e4e2a r5f96067  
    25962596                if (dht != null)
    25972597                    dht.stop();
    2598                 // Schedule this even for final shutdown, as there's a chance
    2599                 // that it's just this webapp that is stopping.
    2600                 _context.simpleTimer2().addEvent(new Disconnector(), 60*1000);
    26012598                addMessage(_t("Closing I2P tunnel after notifying trackers."));
    26022599                if (finalShutdown) {
     
    26052602                        toWait *= 2;
    26062603                    try { Thread.sleep(toWait); } catch (InterruptedException ie) {}
     2604                    _util.disconnect();
     2605                    _stopping = false;
     2606                } else {
     2607                    // Only schedule this if not a final shutdown
     2608                    _context.simpleTimer2().addEvent(new Disconnector(), 60*1000);
    26072609                }
    2608                 _util.disconnect();
    26092610            } else {
    26102611                _util.disconnect();
  • apps/jetty/java/src/net/i2p/servlet/RequestWrapper.java

    r61e4e2a r5f96067  
    4444 *
    4545 *  So we could either extend and fix MultiPartFilter, and rewrite everything here,
    46  *  or copy MultiParRequest into our war and fix it so it compiles with Jetty 6.
     46 *  or copy MultiPartRequest into our war and fix it so it compiles with Jetty 6.
    4747 *  We do the latter.
    4848 *
     
    7272                        try {
    7373                                mpr = new MultiPartRequest( httpRequest );
     74                        } catch (OutOfMemoryError oome) {
     75                                // TODO Throw ioe from constructor?
     76                                oome.printStackTrace();
    7477                        } catch (IOException e) {
    75                                 // TODO Auto-generated catch block
     78                                // TODO Throw ioe from constructor?
    7679                                e.printStackTrace();
    7780                        }
  • apps/routerconsole/jsp/createreseed.jsp

    r61e4e2a r5f96067  
    2121        response.setContentType("application/zip; name=\"i2preseed.zip\"");
    2222        response.addHeader("Content-Disposition", "attachment; filename=\"i2preseed.zip\"");
    23         byte buf[] = new byte[16*1024];
    2423        in = new java.io.FileInputStream(zip);
    2524        java.io.OutputStream cout = response.getOutputStream();
  • core/java/src/net/i2p/client/naming/HostTxtEntry.java

    r61e4e2a r5f96067  
    397397        props.setProperty(PROP_NAME, name);
    398398        props.setProperty(PROP_DEST, dest);
     399        if (!props.containsKey(PROP_DATE))
     400            props.setProperty(PROP_DATE, Long.toString(System.currentTimeMillis() / 1000));
    399401        StringWriter buf = new StringWriter(1024);
    400402        try {
     
    419421        if (props.containsKey(sigprop))
    420422            throw new IllegalStateException();
     423        if (!props.containsKey(PROP_DATE))
     424            props.setProperty(PROP_DATE, Long.toString(System.currentTimeMillis() / 1000));
    421425        StringWriter buf = new StringWriter(1024);
    422426        buf.append(name);
  • core/java/src/net/i2p/util/SystemVersion.java

    r61e4e2a r5f96067  
    2121     */
    2222    public static final String DAEMON_USER = "i2psvc";
     23    /*
     24     *  @since 0.9.29
     25     */
    2326    public static final String GENTOO_USER = "i2p";
    2427
  • debian-alt/doc/launchpad.txt

    r61e4e2a r5f96067  
    151151    Tags: empty
    152152    Summary: empty
    153 Click 'register milestone'
     153Click 'create milestone'
    154154Now you are back on https://launchpad.net/i2p/trunk
    155155At your milestone, 'release now'
  • debian-alt/precise/changelog

    r61e4e2a r5f96067  
     1i2p (0.9.29p-1~precise+1) precise; urgency=medium
     2
     3  * Backport to Precise
     4
     5 -- zzz on i2p <zzz@i2pmail.org>  Tue, 27 Feb 2017 12:12:12 +0000
     6
    17i2p (0.9.28p-1~precise+1) precise; urgency=medium
    28
  • debian-alt/trusty/changelog

    r61e4e2a r5f96067  
     1i2p (0.9.29-1ubuntu1) trusty; urgency=medium
     2
     3  * New upstream version 0.9.29
     4
     5 -- zzz on i2p (key signing) <zzz@i2pmail.org>  Mon, 27 Feb 2017 12:12:12 +0000
     6
    17i2p (0.9.28-1ubuntu1) trusty; urgency=medium
    28
  • history.txt

    r61e4e2a r5f96067  
     12017-02-27 zzz
     2 * i2psnark: Fix disappearing start button
     3 * addressbook: Add date parameter to authentication strings
     4
    15* 2017-02-27 0.9.29 released
    26
  • router/java/src/net/i2p/router/RouterVersion.java

    r61e4e2a r5f96067  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 0;
     21    public final static long BUILD = 1;
    2222
    2323    /** for example "-test" */
  • router/java/src/net/i2p/router/transport/udp/UDPAddress.java

    r61e4e2a r5f96067  
    2222    private final int _port;
    2323    private final byte[] _introKey;
    24     private String _introHosts[];
    25     private InetAddress _introAddresses[];
    26     private int _introPorts[];
    27     private byte[] _introKeys[];
    28     private long _introTags[];
    29     private int _mtu;
     24    private final String _introHosts[];
     25    private final InetAddress _introAddresses[];
     26    private final int _introPorts[];
     27    private final byte[] _introKeys[];
     28    private final long _introTags[];
     29    private final long _introExps[];
     30    private final int _mtu;
    3031   
    3132    public static final String PROP_PORT = RouterAddress.PROP_PORT;
     
    4243    public static final String PROP_INTRO_KEY_PREFIX = "ikey";
    4344    public static final String PROP_INTRO_TAG_PREFIX = "itag";
     45    /** @since 0.9.30 */
     46    public static final String PROP_INTRO_EXP_PREFIX = "iexp";
    4447    static final int MAX_INTRODUCERS = 3;
    4548    private static final String[] PROP_INTRO_HOST;
     
    4750    private static final String[] PROP_INTRO_IKEY;
    4851    private static final String[] PROP_INTRO_TAG;
     52    private static final String[] PROP_INTRO_EXP;
    4953    static {
    5054        // object churn
     
    5357        PROP_INTRO_IKEY = new String[MAX_INTRODUCERS];
    5458        PROP_INTRO_TAG = new String[MAX_INTRODUCERS];
     59        PROP_INTRO_EXP = new String[MAX_INTRODUCERS];
    5560        for (int i = 0; i < MAX_INTRODUCERS; i++) {
    5661            PROP_INTRO_HOST[i] = PROP_INTRO_HOST_PREFIX + i;
     
    5863            PROP_INTRO_IKEY[i] = PROP_INTRO_KEY_PREFIX + i;
    5964            PROP_INTRO_TAG[i] = PROP_INTRO_TAG_PREFIX + i;
     65            PROP_INTRO_EXP[i] = PROP_INTRO_EXP_PREFIX + i;
    6066        }
    6167    }
    6268
    6369    public UDPAddress(RouterAddress addr) {
    64         // TODO make everything final
    6570        if (addr == null) {
    6671            _host = null;
    6772            _port = 0;
    6873            _introKey = null;
     74            _introHosts = null;
     75            _introAddresses = null;
     76            _introPorts = null;
     77            _introKeys = null;
     78            _introTags = null;
     79            _introExps = null;
     80            _mtu = 0;
    6981            return;
    7082        }
    7183        _host = addr.getHost();
    7284        _port = addr.getPort();
     85
     86        int cmtu = 0;
    7387        try {
    7488            String mtu = addr.getOption(PROP_MTU);
    7589            if (mtu != null) {
    7690                boolean isIPv6 = _host != null && _host.contains(":");
    77                 _mtu = MTU.rectify(isIPv6, Integer.parseInt(mtu));
     91                cmtu = MTU.rectify(isIPv6, Integer.parseInt(mtu));
    7892            }
    7993        } catch (NumberFormatException nfe) {}
     94        _mtu = cmtu;
     95
    8096        String key = addr.getOption(PROP_INTRO_KEY);
    8197        if (key != null) {
     
    89105        }
    90106       
     107        byte[][] cintroKeys = null;
     108        long[] cintroTags = null;
     109        int[] cintroPorts = null;
     110        String[] cintroHosts = null;
     111        InetAddress[] cintroAddresses = null;
     112        long[] cintroExps = null;
    91113        for (int i = MAX_INTRODUCERS - 1; i >= 0; i--) {
    92114            String host = addr.getOption(PROP_INTRO_HOST[i]);
     
    115137                continue;
    116138            }
    117             if (_introHosts == null) {
    118                 _introHosts = new String[i+1];
    119                 _introPorts = new int[i+1];
    120                 _introAddresses = new InetAddress[i+1];
    121                 _introKeys = new byte[i+1][];
    122                 _introTags = new long[i+1];
    123             }
    124             _introHosts[i] = host;
    125             _introPorts[i] = p;
    126             _introKeys[i] = ikey;
    127             _introTags[i] = tag;
     139            // expiration is optional
     140            long exp = 0;
     141            t = addr.getOption(PROP_INTRO_EXP[i]);
     142            if (t != null) {
     143                try {
     144                    exp = Long.parseLong(t) * 1000L;
     145                } catch (NumberFormatException nfe) {}
     146            }
     147
     148            if (cintroHosts == null) {
     149                cintroHosts = new String[i+1];
     150                cintroPorts = new int[i+1];
     151                cintroAddresses = new InetAddress[i+1];
     152                cintroKeys = new byte[i+1][];
     153                cintroTags = new long[i+1];
     154                cintroExps = new long[i+1];
     155            }
     156            cintroHosts[i] = host;
     157            cintroPorts[i] = p;
     158            cintroKeys[i] = ikey;
     159            cintroTags[i] = tag;
     160            cintroExps[i] = exp;
    128161        }
    129162       
    130163        int numOK = 0;
    131         if (_introHosts != null) {
    132             for (int i = 0; i < _introHosts.length; i++) {
    133                 if ( (_introKeys[i] != null) &&
    134                      (_introPorts[i] > 0) &&
    135                      (_introTags[i] > 0) &&
    136                      (_introHosts[i] != null) )
     164        if (cintroHosts != null) {
     165            // Validate the intro parameters, and shrink the
     166            // introAddresses array if they aren't all valid,
     167            // since we use the length for the valid count.
     168            // We don't bother shrinking the other arrays,
     169            // we just remove the invalid entries.
     170            for (int i = 0; i < cintroHosts.length; i++) {
     171                if ( (cintroKeys[i] != null) &&
     172                     (cintroPorts[i] > 0) &&
     173                     (cintroTags[i] > 0) &&
     174                     (cintroHosts[i] != null) )
    137175                    numOK++;
    138176            }
    139             if (numOK != _introHosts.length) {
    140                 String hosts[] = new String[numOK];
    141                 int ports[] = new int[numOK];
    142                 long tags[] = new long[numOK];
    143                 byte keys[][] = new byte[numOK][];
     177            if (numOK != cintroHosts.length) {
    144178                int cur = 0;
    145                 for (int i = 0; i < _introHosts.length; i++) {
    146                     if ( (_introKeys[i] != null) &&
    147                          (_introPorts[i] > 0) &&
    148                          (_introTags[i] > 0) &&
    149                          (_introHosts[i] != null) ) {
    150                         hosts[cur] = _introHosts[i];
    151                         ports[cur] = _introPorts[i];
    152                         tags[cur] = _introTags[i];
    153                         keys[cur] = _introKeys[i];
     179                for (int i = 0; i < cintroHosts.length; i++) {
     180                    if ( (cintroKeys[i] != null) &&
     181                         (cintroPorts[i] > 0) &&
     182                         (cintroTags[i] > 0) &&
     183                         (cintroHosts[i] != null) ) {
     184                        if (cur != i) {
     185                            // just shift these down
     186                            cintroHosts[cur] = cintroHosts[i];
     187                            cintroPorts[cur] = cintroPorts[i];
     188                            cintroTags[cur] = cintroTags[i];
     189                            cintroKeys[cur] = cintroKeys[i];
     190                            cintroExps[cur] = cintroExps[i];
     191                        }
     192                        cur++;
    154193                    }
    155194                }
    156                 _introKeys = keys;
    157                 _introTags = tags;
    158                 _introPorts = ports;
    159                 _introHosts = hosts;
    160                 _introAddresses = new InetAddress[numOK];
    161             }
    162         }
     195                cintroAddresses = new InetAddress[numOK];
     196            }
     197        }
     198        _introKeys = cintroKeys;
     199        _introTags = cintroTags;
     200        _introPorts = cintroPorts;
     201        _introHosts = cintroHosts;
     202        _introAddresses = cintroAddresses;
     203        _introExps = cintroExps;
    163204    }
    164205   
     
    183224    int getIntroducerCount() { return (_introAddresses == null ? 0 : _introAddresses.length); }
    184225
     226    /**
     227     *  @throws NullPointerException if getIntroducerCount() == 0
     228     *  @throws ArrayIndexOutOfBoundsException if i &lt; 0 or i &gt;= getIntroducerCount()
     229     *  @return null if invalid
     230     */
    185231    InetAddress getIntroducerHost(int i) {
    186232        if (_introAddresses[i] == null)
     
    189235    }
    190236
     237    /**
     238     *  @throws NullPointerException if getIntroducerCount() == 0
     239     *  @throws ArrayIndexOutOfBoundsException if i &lt; 0 or i &gt;= getIntroducerCount()
     240     *  @return greater than zero
     241     */
    191242    int getIntroducerPort(int i) { return _introPorts[i]; }
    192243
     244    /**
     245     *  @throws NullPointerException if getIntroducerCount() == 0
     246     *  @throws ArrayIndexOutOfBoundsException if i &lt; 0 or i &gt;= getIntroducerCount()
     247     *  @return non-null
     248     */
    193249    byte[] getIntroducerKey(int i) { return _introKeys[i]; }
    194250
     251    /**
     252     *  @throws NullPointerException if getIntroducerCount() == 0
     253     *  @throws ArrayIndexOutOfBoundsException if i &lt; 0 or i &gt;= getIntroducerCount()
     254     *  @return greater than zero
     255     */
    195256    long getIntroducerTag(int i) { return _introTags[i]; }
     257
     258    /**
     259     *  @throws NullPointerException if getIntroducerCount() == 0
     260     *  @throws ArrayIndexOutOfBoundsException if i &lt; 0 or i &gt;= getIntroducerCount()
     261     *  @return ms since epoch, zero if unset
     262     *  @since 0.9.30
     263     */
     264    long getIntroducerExpiration(int i) { return _introExps[i]; }
    196265       
    197266    /**
Note: See TracChangeset for help on using the changeset viewer.