2004-10-05 jrandom
* Don't go into a fast busy if an I2PTunnel 'server' is explicitly killed (thanks mule!) * Handle some more error conditions regarding abruptly closing sockets (thanks Jonva!)
This commit is contained in:
@ -148,6 +148,7 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
|
|||||||
I2PServerSocket i2pss = sockMgr.getServerSocket();
|
I2PServerSocket i2pss = sockMgr.getServerSocket();
|
||||||
while (true) {
|
while (true) {
|
||||||
I2PSocket i2ps = i2pss.accept();
|
I2PSocket i2ps = i2pss.accept();
|
||||||
|
if (i2ps == null) throw new I2PException("I2PServerSocket closed");
|
||||||
I2PThread t = new I2PThread(new Handler(i2ps));
|
I2PThread t = new I2PThread(new Handler(i2ps));
|
||||||
t.start();
|
t.start();
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,10 @@
|
|||||||
$Id: history.txt,v 1.31 2004/10/03 15:48:43 jrandom Exp $
|
$Id: history.txt,v 1.32 2004/10/04 12:30:23 jrandom Exp $
|
||||||
|
|
||||||
|
2004-10-05 jrandom
|
||||||
|
* Don't go into a fast busy if an I2PTunnel 'server' is explicitly killed
|
||||||
|
(thanks mule!)
|
||||||
|
* Handle some more error conditions regarding abruptly closing sockets
|
||||||
|
(thanks Jonva!)
|
||||||
|
|
||||||
2004-10-04 jrandom
|
2004-10-04 jrandom
|
||||||
* Update the shitlist to reject a peer for an exponentially increasing
|
* Update the shitlist to reject a peer for an exponentially increasing
|
||||||
|
@ -43,7 +43,20 @@ public class I2NPMessageHandler {
|
|||||||
int type = (int)DataHelper.readLong(in, 1);
|
int type = (int)DataHelper.readLong(in, 1);
|
||||||
_lastReadBegin = System.currentTimeMillis();
|
_lastReadBegin = System.currentTimeMillis();
|
||||||
I2NPMessage msg = createMessage(in, type);
|
I2NPMessage msg = createMessage(in, type);
|
||||||
|
try {
|
||||||
msg.readBytes(in, type);
|
msg.readBytes(in, type);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
throw ioe;
|
||||||
|
} catch (I2NPMessageException ime) {
|
||||||
|
throw ime;
|
||||||
|
} catch (DataFormatException dfe) {
|
||||||
|
throw dfe;
|
||||||
|
} catch (Exception e) {
|
||||||
|
if (_log.shouldLog(Log.WARN))
|
||||||
|
_log.warn("Error reading the stream", e);
|
||||||
|
throw new IOException("Unknown error reading the " + msg.getClass().getName()
|
||||||
|
+ ": " + e.getMessage());
|
||||||
|
}
|
||||||
_lastReadEnd = System.currentTimeMillis();
|
_lastReadEnd = System.currentTimeMillis();
|
||||||
return msg;
|
return msg;
|
||||||
} catch (DataFormatException dfe) {
|
} catch (DataFormatException dfe) {
|
||||||
|
@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class RouterVersion {
|
public class RouterVersion {
|
||||||
public final static String ID = "$Revision: 1.41 $ $Date: 2004/10/03 15:48:43 $";
|
public final static String ID = "$Revision: 1.42 $ $Date: 2004/10/04 12:30:23 $";
|
||||||
public final static String VERSION = "0.4.1.1";
|
public final static String VERSION = "0.4.1.1";
|
||||||
public final static long BUILD = 7;
|
public final static long BUILD = 8;
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Router version: " + VERSION);
|
System.out.println("I2P Router version: " + VERSION);
|
||||||
System.out.println("Router ID: " + RouterVersion.ID);
|
System.out.println("Router ID: " + RouterVersion.ID);
|
||||||
|
@ -88,16 +88,21 @@ public class Shitlist {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void unshitlistRouter(Hash peer) {
|
public void unshitlistRouter(Hash peer) {
|
||||||
|
unshitlistRouter(peer, true);
|
||||||
|
}
|
||||||
|
private void unshitlistRouter(Hash peer, boolean realUnshitlist) {
|
||||||
if (peer == null) return;
|
if (peer == null) return;
|
||||||
_log.info("Unshitlisting router " + peer.toBase64());
|
_log.info("Unshitlisting router " + peer.toBase64());
|
||||||
synchronized (_shitlist) {
|
synchronized (_shitlist) {
|
||||||
_shitlist.remove(peer);
|
_shitlist.remove(peer);
|
||||||
_shitlistCause.remove(peer);
|
_shitlistCause.remove(peer);
|
||||||
}
|
}
|
||||||
|
if (realUnshitlist) {
|
||||||
PeerProfile prof = _context.profileOrganizer().getProfile(peer);
|
PeerProfile prof = _context.profileOrganizer().getProfile(peer);
|
||||||
if (prof != null)
|
if (prof != null)
|
||||||
prof.unshitlist();
|
prof.unshitlist();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isShitlisted(Hash peer) {
|
public boolean isShitlisted(Hash peer) {
|
||||||
Date shitlistDate = null;
|
Date shitlistDate = null;
|
||||||
@ -110,7 +115,7 @@ public class Shitlist {
|
|||||||
if (shitlistDate.getTime() > _context.clock().now()) {
|
if (shitlistDate.getTime() > _context.clock().now()) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
unshitlistRouter(peer);
|
unshitlistRouter(peer, false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,7 +138,7 @@ public class Shitlist {
|
|||||||
Hash key = (Hash)iter.next();
|
Hash key = (Hash)iter.next();
|
||||||
Date shitDate = (Date)shitlist.get(key);
|
Date shitDate = (Date)shitlist.get(key);
|
||||||
if (shitDate.getTime() < limit) {
|
if (shitDate.getTime() < limit) {
|
||||||
unshitlistRouter(key);
|
unshitlistRouter(key, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ public class ConnectionBuilder {
|
|||||||
try {
|
try {
|
||||||
return doEstablishConnection();
|
return doEstablishConnection();
|
||||||
} catch (Exception e) { // catchall in case the timeout gets us flat footed
|
} catch (Exception e) { // catchall in case the timeout gets us flat footed
|
||||||
_log.error("Error connecting", e);
|
fail("Error connecting", e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,8 @@ class ConnectionRunner implements Runnable {
|
|||||||
if (msg == null) {
|
if (msg == null) {
|
||||||
if (_keepRunning)
|
if (_keepRunning)
|
||||||
_log.error("next message is null but we should keep running?");
|
_log.error("next message is null but we should keep running?");
|
||||||
|
_con.closeConnection();
|
||||||
|
return;
|
||||||
} else {
|
} else {
|
||||||
sendMessage(msg);
|
sendMessage(msg);
|
||||||
}
|
}
|
||||||
@ -88,6 +90,7 @@ class ConnectionRunner implements Runnable {
|
|||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
_log.warn("Error writing out the message", ioe);
|
_log.warn("Error writing out the message", ioe);
|
||||||
|
_con.closeConnection();
|
||||||
}
|
}
|
||||||
_con.sent(msg, ok, after - before);
|
_con.sent(msg, ok, after - before);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user