Changeset 186f2bc


Ignore:
Timestamp:
Mar 24, 2009 9:30:28 PM (11 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
2695461
Parents:
41718b4 (diff), 0da964e4 (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.test' (head c92ec83848e87e27921bada8ee24fd108050a50a)

to branch 'i2p.i2p' (head efebdaa0f53b9bc0234d18a7a934cc0f4fa6231e)

Files:
9 edited

Legend:

Unmodified
Added
Removed
  • apps/BOB/src/net/i2p/BOB/DoCMDS.java

    r41718b4 r186f2bc  
    4747        // FIX ME
    4848        // I need a better way to do versioning, but this will do for now.
    49         public static final String BMAJ = "00",  BMIN = "00",  BREV = "03",  BEXT = "";
     49        public static final String BMAJ = "00",  BMIN = "00",  BREV = "04",  BEXT = "";
    5050        public static final String BOBversion = BMAJ + "." + BMIN + "." + BREV + BEXT;
    5151        private Socket server;
  • apps/BOB/src/net/i2p/BOB/I2Plistener.java

    r41718b4 r186f2bc  
    7171                I2PSocket sessSocket = null;
    7272
    73                 serverSocket.setSoTimeout(100);
     73                serverSocket.setSoTimeout(50);
    7474                database.getReadLock();
    7575                info.getReadLock();
  • apps/BOB/src/net/i2p/BOB/MUXlisten.java

    r41718b4 r186f2bc  
    174174                                        while(spin) {
    175175                                                try {
    176                                                         Thread.sleep(1000); //sleep for 1000 ms (One second)
     176                                                        Thread.sleep(200); //sleep for 200 ms (Two thenths second)
    177177                                                } catch(InterruptedException e) {
    178178                                                        // nop
     
    214214                                } // die
    215215
     216                                try {
     217                                        Thread.sleep(500); //sleep for 500 ms (One half second)
     218                                } catch(InterruptedException ex) {
     219                                        // nop
     220                                }
    216221                                // wait for child threads and thread groups to die
    217222                                // System.out.println("MUXlisten: waiting for children");
    218                                 while(tg.activeCount() + tg.activeGroupCount() != 0) {
     223                                if(tg.activeCount() + tg.activeGroupCount() != 0) {
    219224                                        tg.interrupt(); // unwedge any blocking threads.
    220                                         try {
    221                                                 Thread.sleep(100); //sleep for 100 ms (One tenth second)
    222                                         } catch(InterruptedException ex) {
    223                                                 // nop
     225                                        while(tg.activeCount() + tg.activeGroupCount() != 0) {
     226                                                try {
     227                                                        Thread.sleep(100); //sleep for 100 ms (One tenth second)
     228                                                } catch(InterruptedException ex) {
     229                                                        // nop
     230                                                }
    224231                                        }
    225232                                }
     
    261268                // This is here to catch when something fucks up REALLY bad.
    262269                if(tg != null) {
    263                         while(tg.activeCount() + tg.activeGroupCount() != 0) {
     270                        if(tg.activeCount() + tg.activeGroupCount() != 0) {
    264271                                        tg.interrupt(); // unwedge any blocking threads.
     272                                while(tg.activeCount() + tg.activeGroupCount() != 0) {
    265273                                        try {
    266274                                                Thread.sleep(100); //sleep for 100 ms (One tenth second)
     
    268276                                                // nop
    269277                                        }
     278                                }
    270279                        }
    271280                        tg.destroy();
     
    273282                        tg = null;
    274283                }
     284
     285                // Lastly try to close things again.
     286                if(this.come_in) {
     287                        try {
     288                                listener.close();
     289                        } catch(IOException e) {
     290                        }
     291                }
     292                try {
     293                        socketManager.destroySocketManager();
     294                } catch(Exception e) {
     295                        // nop
     296                }
     297
    275298        }
    276299}
  • apps/BOB/src/net/i2p/BOB/TCPio.java

    r41718b4 r186f2bc  
    5757         * and yes, we are totally OK to block here on writes,
    5858         * The OS has buffers, and I intend to use them.
     59         * We send an interrupt signal to the threadgroup to
     60         * unwedge any pending writes.
    5961         *
    6062         */
    6163        public void run() {
     64                /*
     65                 * NOTE:
     66                 * The write method of OutputStream calls the write method of
     67                 * one argument on each of the bytes to be written out.
     68                 * Subclasses are encouraged to override this method and provide
     69                 * a more efficient implementation.
     70                 *
     71                 * So, is this really a performance problem?
     72                 * Should we expand to several bytes?
     73                 * I don't believe there would be any gain, since read method
     74                 * has the same reccomendations. If anyone has a better way to
     75                 * do this, I'm interested in performance improvements.
     76                 *
     77                 * --Sponge
     78                 *
     79                 */
     80
    6281                int b;
    6382                byte a[] = new byte[1];
  • apps/BOB/src/net/i2p/BOB/TCPlistener.java

    r41718b4 r186f2bc  
    7878                try {
    7979                        Socket server = new Socket();
    80                         listener.setSoTimeout(1000);
     80                        listener.setSoTimeout(50); // Half of the expected time from MUXlisten
    8181                        info.releaseReadLock();
    8282                        database.releaseReadLock();
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelIRCServer.java

    r41718b4 r186f2bc  
    1717import net.i2p.data.Destination;
    1818import net.i2p.data.Hash;
     19import net.i2p.data.Base32;
    1920import net.i2p.util.EventDispatcher;
    2021import net.i2p.util.I2PThread;
     
    3738 *   - ircserver.cloakKey unset:          Cloak with a random value that is persistent for
    3839 *                                        the life of this tunnel. This is the default.
    39  *   - ircserver.cloakKey=none:           Don't cloak. Users may be correlated with their
    40  *                                        (probably) shared clients destination.
    41  *                                        Of course if the ircd does cloaking than this is ok.
    4240 *   - ircserver.cloakKey=somepassphrase: Cloak with the hash of the passphrase. Use this to
    4341 *                                        have consistent mangling across restarts, or to
     
    4644 *                                        Note: don't quote or put spaces in the passphrase,
    4745 *                                        the i2ptunnel gui can't handle it.
     46 *   - ircserver.fakeHostname=%f.b32.i2p: Set the fake hostname sent by I2PTunnel,
     47 *                                        %f is the full B32 destination hash
     48 *                                        %c is the cloaked hash.
    4849 *
    4950 * There is no outbound filtering.
     
    5253 */
    5354public class I2PTunnelIRCServer extends I2PTunnelServer implements Runnable {
    54 
     55    public static final String PROP_CLOAK="ircserver.cloakKey";
     56    public static final String PROP_HOSTNAME="ircserver.fakeHostname";
     57    public static final String PROP_HOSTNAME_DEFAULT="%f.b32.i2p";
     58   
    5559    private static final Log _log = new Log(I2PTunnelIRCServer.class);
    56     private static final String PROP_CLOAK="ircserver.cloakKey";
    57     private boolean _cloak;
    58     private byte[] _cloakKey; // 32 bytes of stuff to scramble the dest with
     60   
    5961   
    6062    /**
     
    7274        Properties opts = tunnel.getClientOptions();
    7375        String passphrase = opts.getProperty(PROP_CLOAK);
    74         _cloak = passphrase == null || !"none".equals(passphrase);
    75         if (_cloak) {
    76             if (passphrase == null) {
    77                 _cloakKey = new byte[Hash.HASH_LENGTH];
    78                 tunnel.getContext().random().nextBytes(_cloakKey);
    79             } else {
    80                 _cloakKey = SHA256Generator.getInstance().calculateHash(passphrase.trim().getBytes()).getData();
    81             }
     76        if (passphrase == null) {
     77            this.cloakKey = new byte[Hash.HASH_LENGTH];
     78            tunnel.getContext().random().nextBytes(this.cloakKey);
     79        } else {
     80            this.cloakKey = SHA256Generator.getInstance().calculateHash(passphrase.trim().getBytes()).getData();
    8281        }
     82       
     83        this.hostname = opts.getProperty(PROP_HOSTNAME, PROP_HOSTNAME_DEFAULT);
    8384    }
    8485   
     
    123124     */
    124125    String cloakDest(Destination d) {
    125         Hash h;
    126         if (_cloak) {
    127             byte[] b = new byte[d.size() + _cloakKey.length];
    128             System.arraycopy(b, 0, d.toByteArray(), 0, d.size());
    129             System.arraycopy(b, d.size(), _cloakKey, 0, _cloakKey.length);
    130             h = SHA256Generator.getInstance().calculateHash(b);
    131         } else {
    132             h = d.calculateHash();
    133         }
    134         return h.toBase64().substring(0, 8) + ".i2p";
     126        String hf;
     127        String hc;
     128       
     129        byte[] b = new byte[d.size() + this.cloakKey.length];
     130        System.arraycopy(b, 0, d.toByteArray(), 0, d.size());
     131        System.arraycopy(b, d.size(), this.cloakKey, 0, this.cloakKey.length);
     132        hc = Base32.encode(SHA256Generator.getInstance().calculateHash(b).getData());
     133       
     134        hf = Base32.encode(d.calculateHash().getData());
     135       
     136        return this.hostname.replace("%f", hf).replace("%c", hc);
    135137    }
    136138
     
    157159                idx++;
    158160
    159             try { command = field[idx++]; }
    160              catch (IndexOutOfBoundsException ioobe) // wtf, server sent borked command?
    161             {
     161            try {
     162                command = field[idx++];
     163            } catch (IndexOutOfBoundsException ioobe) {
     164                // wtf, server sent borked command?
    162165               throw new IOException("Dropping defective message: index out of bounds while extracting command.");
    163166            }
     
    170173                // USER zzz1 abcd1234.i2p localhost :zzz
    171174                // this whole class is for these two lines...
    172                 buf.append("USER ").append(field[idx]).append(' ').append(newHostname).append(".i2p ");
     175                buf.append("USER ").append(field[idx]).append(' ').append(newHostname);
     176                buf.append(' ');
    173177                buf.append(field[idx+2]).append(' ').append(field[idx+3]).append("\r\n");
    174178                break;
     
    182186        return buf.toString();
    183187    }
     188   
     189    private byte[] cloakKey; // 32 bytes of stuff to scramble the dest with
     190    private String hostname;
    184191}
  • core/java/src/net/i2p/data/PrivateKeyFile.java

    r41718b4 r186f2bc  
    262262        StringBuffer s = new StringBuffer(128);
    263263        s.append("Dest: ");
    264         s.append(this.dest.toBase64());
     264        s.append(this.dest != null ? this.dest.toBase64() : "null");
    265265        s.append("\nContains: ");
    266266        s.append(this.dest);
  • history.txt

    r41718b4 r186f2bc  
     12009-03-16 zzz
     2    * help.jsp: Add some
     3    * I2PTunnel: Cleanup
     4    * I2PTunnelHTTPClient: Fix NPE on delayed open
     5    * I2PTunnelHTTPServer: Maybe catch an NPE
     6    * SOCKS: Allow .onion addresses for onioncat testing
     7    * Tunnel: Catch a rare AIOOB
     8
     92009-03-09 zzz
     10    * Client:
     11      - Clean up retry code
     12      - Bring I2CP listen error to the summary bar
     13        http://forum.i2p/viewtopic.php?t=3133
     14    * I2PSnark: Remove the http from the add torrent box
     15    * I2PTunnel:
     16      - Add persistent key option for standard and IRC clients
     17      - Add delay-open option for clients
     18      - Get regenerate-dest-on-reconnect working
     19      - Add default key file name
     20      - Add link to addressbook
     21      - I2PSink: Send protocol byte
     22    * OCMOSJ:
     23      - Change from 5% reply requests to at least
     24        once per minute, in hopes of reducing IRC drops
     25      - More clean up of the cache cleaning
     26    * Routerconsole: Don't OOM configpeer.jsp on huge blocklists
     27
     282009-02-26 zzz
     29    * I2CP Client: Add support for muxing
     30    * I2PTunnel:
     31      - Add new IRCServer tunnel type
     32      - Add SOCKS 4/4a support
     33      - Catch OOMs in HTTPServer
     34      - Name the IRCClient filter threads
     35      - Port Streamr to I2PTunnel
     36      - The beginnings of SOCKS UDP support
     37    * Naming: Add reverse lookup by hash
     38    * OCMOSJ: Clean up the cache cleaning
     39    * Router: Move addShutdownTask from Router to I2PAppContext
     40      so that apps can register more easily
     41    * Routerconsole:
     42      - Thread hard shutdown and restart requests from the routerconsole,
     43        and add a delay even if no tunnels, to allow time for a UI response
     44      - Sort the summary bar destinations
     45      - Move dest-to-hash converter to new helper class so we can
     46        use it in i2ptunnel
     47
     482009-02-22 sponge
     49    * BOB: Orphan tunnel issue fix, bump BOB version
     50    * bump to Build 6
     51
    1522009-02-16 zzz
    253    * Streaming lib: Plug timer leak, don't send keepalives
  • router/java/src/net/i2p/router/RouterVersion.java

    r41718b4 r186f2bc  
    1818    public final static String ID = "$Revision: 1.548 $ $Date: 2008-06-07 23:00:00 $";
    1919    public final static String VERSION = CoreVersion.VERSION;
    20     public final static long BUILD = 5;
     20    public final static long BUILD = 9;
    2121    public static void main(String args[]) {
    2222        System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
Note: See TracChangeset for help on using the changeset viewer.