Changeset d89f589f


Ignore:
Timestamp:
Sep 16, 2005 4:12:24 AM (15 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
6ca3f010
Parents:
8c1895e
git-author:
jrandom <jrandom> (09/16/05 04:12:24)
git-committer:
zzz <zzz@…> (09/16/05 04:12:24)
Message:

2005-09-16 jrandom

  • Added the i2p.exe and i2pinstall.exe for windows users, using launch4j.
  • Added runplain.sh for *nix/osx users having problems using the java service wrapper (called from the install dir as: sh runplain.sh)
  • Bundle susidns and syndie, with links on the top nav
  • Have I2PTunnelHTTPClient and I2PTunnelHTTPServer use the x-i2p-gzip content-encoding (if offered), reducing the payload size before it reaches the streaming lib. The existing compression is at the i2cp level, so we've been packetizing 4KB of uncompressed data and then compressing those messages, rather than compressing and then packetizing 4KB of compressed data. This should reduce the number of round trips to fetch web pages substantially.
  • Adjust the startup and timing of the addressbook so that susidns always has config to work off, and expose a method for susidns to tell it to reload its config and rerun.
Files:
4 added
13 edited

Legend:

Unmodified
Added
Removed
  • apps/addressbook/java/src/addressbook/Daemon.java

    r8c1895e rd89f589f  
    3737public class Daemon {
    3838    public static final String VERSION = "2.0.3";
     39    private static final Daemon _instance = new Daemon();
    3940   
    4041    /**
     
    5758     *            The log to write changes and conflicts to.
    5859     */
    59     public static void update(AddressBook master, AddressBook router,
     60    public void update(AddressBook master, AddressBook router,
    6061            File published, SubscriptionList subscriptions, Log log) {
    6162        router.merge(master, true, null);
     
    7879     *            The directory containing addressbook's configuration files.
    7980     */
    80     public static void update(Map settings, String home) {
     81    public void update(Map settings, String home) {
    8182        File masterFile = new File(home, (String) settings
    8283                .get("master_addressbook"));
     
    105106        Log log = new Log(logFile);
    106107
    107         Daemon.update(master, router, published, subscriptions, log);
     108        update(master, router, published, subscriptions, log);
    108109    }
    109110
     
    119120     */
    120121    public static void main(String[] args) {
     122        _instance.run(args);
     123    }
     124   
     125    public void run(String[] args) {
    121126        String settingsLocation = "config.txt";
    122127        Map settings = new HashMap();
     
    152157        File settingsFile = new File(homeFile, settingsLocation);
    153158       
     159        settings = ConfigParser.parse(settingsFile, defaultSettings);
     160        // wait
     161        try {
     162            Thread.currentThread().sleep(5*60*1000);
     163        } catch (InterruptedException ie) {}
     164       
    154165        while (true) {
    155             settings = ConfigParser.parse(settingsFile, defaultSettings);
    156 
    157166            long delay = Long.parseLong((String) settings.get("update_delay"));
    158167            if (delay < 1) {
     
    160169            }
    161170           
    162             Daemon.update(settings, home);
     171            update(settings, home);
    163172            try {
    164                 Thread.sleep(delay * 60 * 60 * 1000);
     173                synchronized (this) {
     174                    wait(delay * 60 * 60 * 1000);
     175                }
    165176            } catch (InterruptedException exp) {
    166177            }
     178            settings = ConfigParser.parse(settingsFile, defaultSettings);
     179        }
     180    }
     181 
     182    /**
     183     * Call this to get the addressbook to reread its config and
     184     * refetch its subscriptions.
     185     */
     186    public static void wakeup() {
     187        synchronized (_instance) {
     188            _instance.notifyAll();
    167189        }
    168190    }
  • apps/addressbook/java/src/addressbook/DaemonThread.java

    r8c1895e rd89f589f  
    4545     */
    4646    public void run() {
    47         try {
    48             Thread.sleep(5 * 60 * 1000);
    49         } catch (InterruptedException exp) {
    50         }
     47        //try {
     48        //    Thread.sleep(5 * 60 * 1000);
     49        //} catch (InterruptedException exp) {
     50        //}
    5151        Daemon.main(this.args);
    5252    }
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java

    r8c1895e rd89f589f  
    99 */
    1010
    11 import java.io.ByteArrayOutputStream;
    12 import java.io.IOException;
    13 import java.io.FilterOutputStream;
    14 import java.io.OutputStream;
     11import java.io.*;
    1512import java.util.ArrayList;
    1613import java.util.HashMap;
    1714import java.util.Iterator;
     15import java.util.zip.GZIPInputStream;
     16import net.i2p.I2PAppContext;
    1817import net.i2p.data.ByteArray;
    1918import net.i2p.util.ByteCache;
     19import net.i2p.util.I2PThread;
    2020import net.i2p.util.Log;
    2121
     
    2323 * Simple stream for delivering an HTTP response to
    2424 * the client, trivially filtered to make sure "Connection: close"
    25  * is always in the response.
     25 * is always in the response.  Perhaps add transparent handling of the
     26 * Content-encoding: x-i2p-gzip, adjusting the headers to say Content-encoding: identity?
     27 * Content-encoding: gzip is trivial as well, but Transfer-encoding: chunked makes it
     28 * more work than is worthwhile at the moment.
    2629 *
    2730 */
    2831class HTTPResponseOutputStream extends FilterOutputStream {
    29     private static final Log _log = new Log(HTTPResponseOutputStream.class);
     32    private I2PAppContext _context;
     33    private Log _log;
    3034    private ByteCache _cache;
    3135    protected ByteArray _headerBuffer;
    3236    private boolean _headerWritten;
    3337    private byte _buf1[];
     38    protected boolean _gzip;
     39    private long _dataWritten;
    3440    private static final int CACHE_SIZE = 8*1024;
    3541   
    3642    public HTTPResponseOutputStream(OutputStream raw) {
    3743        super(raw);
     44        _context = I2PAppContext.getGlobalContext();
     45        _context.statManager().createRateStat("i2ptunnel.http.compressionRatio", "ratio of compressed size to decompressed size after transfer", "i2ptunnel", new long[] { 60*1000, 30*60*1000 });
     46        _context.statManager().createRateStat("i2ptunnel.http.compressed", "compressed size transferred", "i2ptunnel", new long[] { 60*1000, 30*60*1000 });
     47        _context.statManager().createRateStat("i2ptunnel.http.expanded", "size transferred after expansion", "i2ptunnel", new long[] { 60*1000, 30*60*1000 });
     48        _log = _context.logManager().getLog(getClass());
    3849        _cache = ByteCache.getInstance(8, CACHE_SIZE);
    3950        _headerBuffer = _cache.acquire();
    4051        _headerWritten = false;
     52        _gzip = false;
     53        _dataWritten = 0;
    4154        _buf1 = new byte[1];
    4255    }
     
    5265        if (_headerWritten) {
    5366            out.write(buf, off, len);
     67            _dataWritten += len;
    5468            return;
    5569        }
     
    6377                writeHeader();
    6478                _headerWritten = true;
    65                 if (i + 1 < len) // write out the remaining
     79                if (i + 1 < len) {
     80                    // write out the remaining
    6681                    out.write(buf, off+i+1, len-i-1);
     82                    _dataWritten += len-i-1;
     83                }
    6784                return;
    6885            }
     
    129146                                throw new IOException("Invalid header @ " + j);
    130147                            String key = new String(_headerBuffer.getData(), lastEnd+1, keyLen);
    131                             String val = new String(_headerBuffer.getData(), j+2, valLen);
     148                            String val = new String(_headerBuffer.getData(), j+2, valLen).trim();
     149                           
     150                            if (_log.shouldLog(Log.INFO))
     151                                _log.info("Response header [" + key + "] = [" + val + "]");
    132152                           
    133153                            if ("Connection".equalsIgnoreCase(key)) {
     
    137157                                out.write("Proxy-Connection: close\n".getBytes());
    138158                                proxyConnectionSent = true;
     159                            } else if ( ("Content-encoding".equalsIgnoreCase(key)) && ("x-i2p-gzip".equalsIgnoreCase(val)) ) {
     160                                _gzip = true;
    139161                            } else {
    140162                                out.write((key.trim() + ": " + val.trim() + "\n").getBytes());
     
    153175            out.write("Proxy-Connection: close\n".getBytes());
    154176           
    155         out.write("\n".getBytes()); // end of the headers
     177        finishHeaders();
    156178       
    157179        // done, shove off
     
    160182        else
    161183            _headerBuffer = null;
     184        if (_log.shouldLog(Log.INFO))
     185            _log.info("After headers: gzip? " + _gzip);
     186        if (shouldCompress()) {
     187            beginProcessing();
     188        }
     189    }
     190   
     191    protected boolean shouldCompress() { return _gzip; }
     192   
     193    protected void finishHeaders() throws IOException {
     194        out.write("\n".getBytes()); // end of the headers
     195    }
     196   
     197    protected void beginProcessing() throws IOException {
     198        out.flush();
     199        PipedInputStream pi = new PipedInputStream();
     200        PipedOutputStream po = new PipedOutputStream(pi);
     201        new I2PThread(new Pusher(pi, out), "HTTP decompresser").start();
     202        out = po;
     203    }
     204   
     205    private class Pusher implements Runnable {
     206        private InputStream _in;
     207        private OutputStream _out;
     208        public Pusher(InputStream in, OutputStream out) {
     209            _in = in;
     210            _out = out;
     211        }
     212        public void run() {
     213            OutputStream to = null;
     214            InternalGZIPInputStream in = null;
     215            try {
     216                long start = System.currentTimeMillis();
     217                in = new InternalGZIPInputStream(_in);
     218                byte buf[] = new byte[8192];
     219                int read = -1;
     220                while ( (read = in.read(buf)) != -1) {
     221                    if (_log.shouldLog(Log.INFO))
     222                        _log.info("Read " + read + " and writing it to the browser/streams");
     223                    _out.write(buf, 0, read);
     224                }
     225                if (_log.shouldLog(Log.INFO))
     226                    _log.info("Decompressed: " + _dataWritten + ", " + in.getTotalRead() + "/" + in.getTotalExpanded());
     227                long end = System.currentTimeMillis();
     228                long compressed = in.getTotalRead();
     229                long expanded = in.getTotalExpanded();
     230                double ratio = 0;
     231                if (expanded > 0)
     232                    ratio = compressed/expanded;
     233               
     234                _context.statManager().addRateData("i2ptunnel.http.compressionRatio", (int)(100d*ratio), end-start);
     235                _context.statManager().addRateData("i2ptunnel.http.compressed", compressed, end-start);
     236                _context.statManager().addRateData("i2ptunnel.http.expanded", expanded, end-start);
     237            } catch (IOException ioe) {
     238                if (_log.shouldLog(Log.WARN))
     239                    _log.warn("Error decompressing: " + _dataWritten + ", " + in.getTotalRead() + "/" + in.getTotalExpanded(), ioe);
     240            } finally {
     241                if (_out != null) try { _out.close(); } catch (IOException ioe) {}
     242            }
     243        }
     244    }
     245    private class InternalGZIPInputStream extends GZIPInputStream {
     246        public InternalGZIPInputStream(InputStream in) throws IOException {
     247            super(in);
     248        }
     249        public long getTotalRead() { return super.inf.getTotalIn(); }
     250        public long getTotalExpanded() { return super.inf.getTotalOut(); }
    162251    }
    163252   
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java

    r8c1895e rd89f589f  
    370370               
    371371                if (line.length() == 0) {
     372                   
     373                    String ok = getTunnel().getContext().getProperty("i2ptunnel.gzip");
     374                    boolean gzip = true;
     375                    if (ok != null)
     376                        gzip = Boolean.valueOf(ok).booleanValue();
     377                    if (gzip)
     378                        newRequest.append("Accept-Encoding: x-i2p-gzip\r\n");
    372379                    newRequest.append("User-Agent: MYOB/6.66 (AN/ON)\r\n");
    373380                    newRequest.append("Connection: close\r\n\r\n");
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java

    r8c1895e rd89f589f  
    44package net.i2p.i2ptunnel;
    55
    6 import java.io.File;
    7 import java.io.IOException;
    8 import java.io.InputStream;
     6import java.io.*;
    97import java.net.InetAddress;
    108import java.net.Socket;
     
    1210import java.util.Iterator;
    1311import java.util.Properties;
     12import java.util.zip.GZIPOutputStream;
    1413
    1514import net.i2p.I2PAppContext;
     
    2524 * Simple extension to the I2PTunnelServer that filters the HTTP
    2625 * headers sent from the client to the server, replacing the Host
    27  * header with whatever this instance has been configured with.
     26 * header with whatever this instance has been configured with, and
     27 * if the browser set Accept-encoding: x-i2p-gzip, gzip the http
     28 * message body and set Content-encoding: x-i2p-gzip.
    2829 *
    2930 */
     
    6364            // give them 5 seconds to send in the HTTP request
    6465            socket.setReadTimeout(5*1000);
    65             String modifiedHeader = getModifiedHeader(socket);
     66
     67            InputStream in = socket.getInputStream();
     68
     69            StringBuffer command = new StringBuffer(128);
     70            Properties headers = readHeaders(in, command);
     71            headers.setProperty("Host", _spoofHost);
     72            headers.setProperty("Connection", "close");
     73            String modifiedHeader = formatHeaders(headers, command);
     74           
     75            //String modifiedHeader = getModifiedHeader(socket);
    6676            if (_log.shouldLog(Log.DEBUG))
    6777                _log.debug("Modified header: [" + modifiedHeader + "]");
     
    7080            Socket s = new Socket(remoteHost, remotePort);
    7181            afterSocket = getTunnel().getContext().clock().now();
    72             new I2PTunnelRunner(s, socket, slock, null, modifiedHeader.getBytes(), null);
     82            // instead of i2ptunnelrunner, use something that reads the HTTP
     83            // request from the socket, modifies the headers, sends the request to the
     84            // server, reads the response headers, rewriting to include Content-encoding: x-i2p-gzip
     85            // if it was one of the Accept-encoding: values, and gzip the payload       
     86            String enc = headers.getProperty("Accept-encoding");
     87            if (_log.shouldLog(Log.INFO))
     88                _log.info("HTTP server encoding header: " + enc);
     89            if ( (enc != null) && (enc.indexOf("x-i2p-gzip") >= 0) ) {
     90                I2PThread req = new I2PThread(new CompressedRequestor(s, socket, modifiedHeader), "http compressor");
     91                req.start();
     92            } else {
     93                new I2PTunnelRunner(s, socket, slock, null, modifiedHeader.getBytes(), null);
     94            }
    7395        } catch (SocketException ex) {
    7496            try {
     
    89111            _log.warn("Took a while to handle the request [" + timeToHandle + ", socket create: " + (afterSocket-afterAccept) + "]");
    90112    }
    91 
    92     private String getModifiedHeader(I2PSocket handleSocket) throws IOException {
    93         InputStream in = handleSocket.getInputStream();
    94 
    95         StringBuffer command = new StringBuffer(128);
    96         Properties headers = readHeaders(in, command);
    97         headers.setProperty("Host", _spoofHost);
    98         headers.setProperty("Connection", "close");
    99         return formatHeaders(headers, command);
    100     }
    101113   
     114    private class CompressedRequestor implements Runnable {
     115        private Socket _webserver;
     116        private I2PSocket _browser;
     117        private String _headers;
     118        public CompressedRequestor(Socket webserver, I2PSocket browser, String headers) {
     119            _webserver = webserver;
     120            _browser = browser;
     121            _headers = headers;
     122        }
     123        public void run() {
     124            if (_log.shouldLog(Log.INFO))
     125                _log.info("Compressed requestor running");
     126            OutputStream serverout = null;
     127            OutputStream browserout = null;
     128            InputStream browserin = null;
     129            InputStream serverin = null;
     130            try {
     131                serverout = _webserver.getOutputStream();
     132               
     133                if (_log.shouldLog(Log.INFO))
     134                    _log.info("request headers: " + _headers);
     135                serverout.write(_headers.getBytes());
     136                browserin = _browser.getInputStream();
     137                I2PThread sender = new I2PThread(new Sender(serverout, browserin, "server: browser to server"), "http compressed sender");
     138                sender.start();
     139               
     140                browserout = _browser.getOutputStream();
     141                serverin = _webserver.getInputStream();
     142                Sender s = new Sender(new CompressedResponseOutputStream(browserout), serverin, "server: server to browser");
     143                if (_log.shouldLog(Log.INFO))
     144                    _log.info("Before pumping the compressed response");
     145                s.run(); // same thread
     146                if (_log.shouldLog(Log.INFO))
     147                    _log.info("After pumping the compressed response");
     148            } catch (IOException ioe) {
     149                if (_log.shouldLog(Log.WARN))
     150                    _log.warn("error compressing", ioe);
     151            } finally {
     152                if (browserout != null) try { browserout.close(); } catch (IOException ioe) {}
     153                if (serverout != null) try { serverout.close(); } catch (IOException ioe) {}
     154                if (browserin != null) try { browserin.close(); } catch (IOException ioe) {}
     155                if (serverin != null) try { serverin.close(); } catch (IOException ioe) {}
     156            }
     157        }
     158    }
     159    private class Sender implements Runnable {
     160        private OutputStream _out;
     161        private InputStream _in;
     162        private String _name;
     163        public Sender(OutputStream out, InputStream in, String name) {
     164            _out = out;
     165            _in = in;
     166            _name = name;
     167        }
     168        public void run() {
     169            if (_log.shouldLog(Log.INFO))
     170                _log.info(_name + ": Begin sending");
     171            try {
     172                byte buf[] = new byte[4096];
     173                int read = 0;
     174                int total = 0;
     175                while ( (read = _in.read(buf)) != -1) {
     176                    if (_log.shouldLog(Log.INFO))
     177                        _log.info(_name + ": read " + read + " and sending through the stream");
     178                    _out.write(buf, 0, read);
     179                    total += read;
     180                }
     181                if (_log.shouldLog(Log.INFO))
     182                    _log.info(_name + ": Done sending: " + total);
     183                _out.flush();
     184            } catch (IOException ioe) {
     185                if (_log.shouldLog(Log.WARN))
     186                    _log.warn("Error sending", ioe);
     187            } finally {
     188                if (_in != null) try { _in.close(); } catch (IOException ioe) {}
     189                if (_out != null) try { _out.close(); } catch (IOException ioe) {}
     190            }
     191        }
     192    }
     193    private class CompressedResponseOutputStream extends HTTPResponseOutputStream {
     194        public CompressedResponseOutputStream(OutputStream o) {
     195            super(o);
     196        }
     197       
     198        protected boolean shouldCompress() { return true; }
     199        protected void finishHeaders() throws IOException {
     200            if (_log.shouldLog(Log.INFO))
     201                _log.info("Including x-i2p-gzip as the content encoding in the response");
     202            out.write("Content-encoding: x-i2p-gzip\n".getBytes());
     203            super.finishHeaders();
     204        }
     205
     206        protected void beginProcessing() throws IOException {
     207            if (_log.shouldLog(Log.INFO))
     208                _log.info("Beginning compression processing");
     209            out.flush();
     210            out = new GZIPOutputStream(out);
     211        }
     212    }
     213
    102214    private String formatHeaders(Properties headers, StringBuffer command) {
    103215        StringBuffer buf = new StringBuffer(command.length() + headers.size() * 64);
     
    134246                String name = buf.substring(0, split);
    135247                String value = buf.substring(split+2); // ": "
     248                if ("Accept-encoding".equalsIgnoreCase(name))
     249                    name = "Accept-encoding";
    136250                headers.setProperty(name, value);
    137251                if (_log.shouldLog(Log.DEBUG))
  • apps/routerconsole/jsp/help.jsp

    r8c1895e rd89f589f  
    4646which other client applications (such the <a href="http://duck.i2p/i2p-bt/">bittorrent port</a>) can use. 
    4747There is also an optimized library for doing large number calculations - jbigi - which in turn uses the
    48 LGPL licensed <a href="http://swox.com/gmp/">GMP</a> library, tuned for various PC architectures.  For
     48LGPL licensed <a href="http://swox.com/gmp/">GMP</a> library, tuned for various PC architectures.  Launchers for windows users are built with <a href="http://launch4j.sourceforge.net/">Launch4J</a>, and the installer is built with <a href="http://www.izforge.com/izpack/">IzPack</a>.  For
    4949details on other applications available, as well as their licenses, please see the
    5050<a href="http://www.i2p.net/licenses">license policy</a>.  Source for the I2P code and most bundled
  • apps/routerconsole/jsp/nav.jsp

    r8c1895e rd89f589f  
    1616
    1717<h4>
     18 <a href="susimail/susimail">Susimail</a> |
     19 <a href="susidns/">SusiDNS</a> |
     20 <a href="syndie/">Syndie</a> |
     21 <a href="i2ptunnel/">I2PTunnel</a> |
    1822 <a href="tunnels.jsp">Tunnels</a> |
    1923 <a href="profiles.jsp">Profiles</a> |
    2024 <a href="netdb.jsp">NetDB</a> |
    2125 <a href="logs.jsp">Logs</a> |
    22  <a href="oldconsole.jsp">Internals</a> |
    2326 <a href="oldstats.jsp">Stats</a> |
    24  <a href="i2ptunnel/" target="_blank">I2PTunnel</a> |
    25  <a href="susimail/susimail" target="_blank">Susimail</a>
     27 <a href="oldconsole.jsp">Internals</a>
    2628 <jsp:useBean class="net.i2p.router.web.NavHelper" id="navhelper" scope="request" />
    2729 <jsp:setProperty name="navhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
  • build.xml

    r8c1895e rd89f589f  
    1313    <target name="dist" depends="pkg, javadoc">
    1414    </target>
    15     <target name="build" depends="builddep, jar, buildWEB" />
     15    <target name="build" depends="builddep, jar, buildWEB, buildexe" />
    1616    <target name="buildclean" depends="distclean, build" />
    1717    <target name="builddep">
     
    2929        <ant dir="apps/addressbook/" target="war" />
    3030        <ant dir="apps/susimail/" target="war" />
     31        <ant dir="apps/susidns/src" target="all" />
    3132        <ant dir="apps/syndie/java/" target="jar" /> <!-- not pushed in the update... yet -->
    3233    </target>
     
    4445        <copy file="apps/jetty/jettylib/xercesImpl.jar" todir="build/" />
    4546        <copy file="apps/jetty/jettylib/javax.servlet.jar" todir="build/" />
     47    </target>
     48    <target name="buildexe">
     49        <jar destfile="./build/launchi2p.jar">
     50            <manifest>
     51             <attribute name="Main-Class" value="net.i2p.router.RouterLaunch" />
     52             <attribute name="Class-Path" value="lib/i2p.jar lib/router.jar lib/jbigi.jar lib/sam.jar lib/mstreaming.jar lib/streaming.jar lib/routerconsole.jar lib/i2ptunnel.jar lib/org.mortbay.jetty.jar lib/javax.servlet.jar lib/jasper-compiler.jar lib/jasper-runtime.jar lib/commons-logging.jar lib/commons-el.jar lib/ant.jar lib/xercesImpl.jar lib/wrapper.jar lib/systray.jar lib/systray4j.jar" />
     53            </manifest>
     54        </jar>
     55        <!-- now the standalone launcher exe -->
     56        <taskdef name="launch4j"
     57                 classname="net.sf.launch4j.ant.Launch4jTask"
     58                 classpath="${basedir}/installer/lib/launch4j/launch4j.jar:${basedir}/installer/lib/launch4j/lib/xstream.jar" />
     59        <launch4j configFile="./installer/i2pstandalone.xml" />
     60        <!-- thazzit -->
    4661    </target>
    4762    <target name="compile" />
     
    6075        <copy file="apps/addressbook/dist/addressbook.war" todir="build/" />
    6176        <copy file="apps/susimail/susimail.war" todir="build/" />
     77        <copy file="apps/susidns/src/susidns.war" todir="build/" />
    6278        <copy file="apps/syndie/syndie.war" todir="build/" />
    6379        <copy file="apps/syndie/java/build/syndie.jar" todir="build/" />
     
    100116    <target name="clean" depends="pkgclean" >
    101117        <delete dir="./build" />
     118        <delete file="i2pinstall.exe" />       
     119        <delete file="i2p.exe" />       
    102120    </target>
    103121    <target name="distclean" depends="clean">
     
    113131        <ant dir="apps/addressbook/" target="distclean" />
    114132        <ant dir="apps/susimail/" target="distclean" />
     133        <ant dir="apps/susidns/src/" target="distclean" />
    115134        <ant dir="apps/systray/java/" target="distclean" />
    116135        <ant dir="installer/java/" target="distclean" />
     
    181200        <copy file="build/sam.jar" todir="pkg-temp/lib/" />
    182201        <copy file="build/systray.jar" todir="pkg-temp/lib" />
     202        <copy file="i2p.exe" todir="pkg-temp/" />
     203        <copy file="installer/resources/runplain.sh" todir="pkg-temp/" />
    183204        <copy file="apps/systray/java/lib/systray4j.jar" todir="pkg-temp/lib" />
    184205        <copy file="apps/systray/java/lib/systray4j.dll" todir="pkg-temp/lib" />
     
    190211        <copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
    191212        <copy file="build/susimail.war" todir="pkg-temp/webapps/" />
     213        <copy file="build/susidns.war" todir="pkg-temp/webapps/" />
    192214        <copy file="build/syndie.war" todir="pkg-temp/webapps/" />
    193215        <copy file="installer/resources/clients.config" todir="pkg-temp/" />
     
    269291        <copy file="build/router.jar" todir="pkg-temp/lib/" />
    270292        <copy file="build/routerconsole.jar" todir="pkg-temp/lib/" />
     293        <copy file="i2p.exe" todir="pkg-temp/" />
     294        <copy file="installer/resources/runplain.sh" todir="pkg-temp/" />
    271295       
    272296        <!-- for the i2p 0.5 release, push jetty 5.2.1 -->
     
    289313        <copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
    290314        <copy file="build/susimail.war" todir="pkg-temp/webapps/" />
     315        <copy file="build/susidns.war" todir="pkg-temp/webapps/" />
    291316        <copy file="build/syndie.war" todir="pkg-temp/webapps/" />
    292317        <copy file="history.txt" todir="pkg-temp/" />
     
    314339        </jar>
    315340        <izpack input="${basedir}/installer/install.xml" output="${basedir}/install.jar" installerType="standard" basedir="${basedir}" />
     341
     342        <ant target="installerexe" />
     343    </target>
     344    <target name="installerexe">
     345        <!-- now the installer exe -->
     346        <taskdef name="launch4j"
     347                 classname="net.sf.launch4j.ant.Launch4jTask"
     348                 classpath="${basedir}/installer/lib/launch4j/launch4j.jar:${basedir}/installer/lib/launch4j/lib/xstream.jar" />
     349        <launch4j configFile="./installer/i2pinstaller.xml" />
     350        <launch4j configFile="./installer/i2pstandalone.xml" />
     351        <!-- thazzit -->
    316352    </target>
    317353    <target name="test">
  • history.txt

    r8c1895e rd89f589f  
    1 $Id: history.txt,v 1.249 2005/09/13 18:02:44 jrandom Exp $
     1$Id: history.txt,v 1.250 2005/09/15 00:39:31 jrandom Exp $
     2
     32005-09-16  jrandom
     4    * Added the i2p.exe and i2pinstall.exe for windows users, using launch4j.
     5    * Added runplain.sh for *nix/osx users having problems using the java
     6      service wrapper (called from the install dir as: sh runplain.sh)
     7    * Bundle susidns and syndie, with links on the top nav
     8    * Have I2PTunnelHTTPClient and I2PTunnelHTTPServer use the x-i2p-gzip
     9      content-encoding (if offered), reducing the payload size before it
     10      reaches the streaming lib.  The existing compression is at the i2cp
     11      level, so we've been packetizing 4KB of uncompressed data and then
     12      compressing those messages, rather than compressing and then packetizing
     13      4KB of compressed data.  This should reduce the number of round trips
     14      to fetch web pages substantially.
     15    * Adjust the startup and timing of the addressbook so that susidns always
     16      has config to work off, and expose a method for susidns to tell it to
     17      reload its config and rerun.
    218
    3192005-09-15  jrandom
  • installer/install.xml

    r8c1895e rd89f589f  
    55    <info>
    66        <appname>i2p</appname>
    7         <appversion>0.6.0.4</appversion>
     7        <appversion>0.6.0.5</appversion>
    88        <authors>
    99            <author name="I2P" email="support@i2p.net"/>
  • installer/resources/postinstall.sh

    r8c1895e rd89f589f  
    6565rm -f ./lib/*.dll
    6666rm -f ./*.bat
     67rm -f ./*.exe
    6768./i2prouter start
    6869exit 0
  • router/java/src/net/i2p/router/RouterVersion.java

    r8c1895e rd89f589f  
    1616 */
    1717public class RouterVersion {
    18     public final static String ID = "$Revision: 1.235 $ $Date: 2005/09/13 18:02:40 $";
     18    public final static String ID = "$Revision: 1.236 $ $Date: 2005/09/15 00:39:31 $";
    1919    public final static String VERSION = "0.6.0.5";
    20     public final static long BUILD = 10;
     20    public final static long BUILD = 11;
    2121    public static void main(String args[]) {
    2222        System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
  • router/java/src/net/i2p/router/transport/udp/PeerTestState.java

    r8c1895e rd89f589f  
    3434    public synchronized long getNonce() { return _testNonce; }
    3535    public synchronized void setNonce(long nonce) { _testNonce = nonce; }
    36     /** who are we?  Alice, bob, or charlie? */
     36    /** Are we Alice, bob, or Charlie. */
    3737    public synchronized short getOurRole() { return _ourRole; }
    3838    public synchronized void setOurRole(short role) { _ourRole = role; }
Note: See TracChangeset for help on using the changeset viewer.