forked from I2P_Developers/i2p.i2p
* BuildHandler: Cleanups and loop checks
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
2011-02-23 zzz
|
2011-02-23 zzz
|
||||||
* BuildHandler: Lower participating throttler max limit
|
* BuildHandler:
|
||||||
|
- Lower participating throttler max limit
|
||||||
|
- Cleanups and loop checks
|
||||||
|
* Console: Fix summary bar HTML error
|
||||||
|
|
||||||
2011-02-22 zzz
|
2011-02-22 zzz
|
||||||
* BuildHandler: Prelmiinary participating tunnel throttler
|
* BuildHandler: Prelmiinary participating tunnel throttler
|
||||||
|
@@ -18,7 +18,7 @@ public class RouterVersion {
|
|||||||
/** deprecated */
|
/** deprecated */
|
||||||
public final static String ID = "Monotone";
|
public final static String ID = "Monotone";
|
||||||
public final static String VERSION = CoreVersion.VERSION;
|
public final static String VERSION = CoreVersion.VERSION;
|
||||||
public final static long BUILD = 18;
|
public final static long BUILD = 19;
|
||||||
|
|
||||||
/** for example "-test" */
|
/** for example "-test" */
|
||||||
public final static String EXTRA = "-rc";
|
public final static String EXTRA = "-rc";
|
||||||
|
@@ -501,6 +501,25 @@ class BuildHandler {
|
|||||||
boolean isInGW = req.readIsInboundGateway();
|
boolean isInGW = req.readIsInboundGateway();
|
||||||
boolean isOutEnd = req.readIsOutboundEndpoint();
|
boolean isOutEnd = req.readIsOutboundEndpoint();
|
||||||
|
|
||||||
|
// Loop checks
|
||||||
|
if ((!isOutEnd) && _context.routerHash().equals(nextPeer)) {
|
||||||
|
// We are 2 hops in a row? Drop it without a reply.
|
||||||
|
// No way to recognize if we are every other hop, but see below
|
||||||
|
_log.error("Dropping build request where we are in two consecutive hops");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((!isOutEnd) && (!isInGW)) {
|
||||||
|
Hash from = state.fromHash;
|
||||||
|
if (from == null)
|
||||||
|
from = state.from.calculateHash();
|
||||||
|
// Previous and next hop the same? Don't help somebody be evil. Drop it without a reply.
|
||||||
|
// A-B-C-A is not preventable
|
||||||
|
if (nextPeer.equals(from)) {
|
||||||
|
_log.error("Dropping build request with the same previous and next hop");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// time is in hours, and only for log below - what's the point?
|
// time is in hours, and only for log below - what's the point?
|
||||||
// tunnel-alt-creation.html specifies that this is enforced +/- 1 hour but it is not.
|
// tunnel-alt-creation.html specifies that this is enforced +/- 1 hour but it is not.
|
||||||
long time = req.readRequestTime();
|
long time = req.readRequestTime();
|
||||||
@@ -569,9 +588,9 @@ class BuildHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (response == 0 && (!isOutEnd) &&
|
if (response == 0 && (!isOutEnd) &&
|
||||||
_throttler.shouldThrottle(req.readNextIdentity())) {
|
_throttler.shouldThrottle(nextPeer)) {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
_log.warn("Rejecting tunnel (hop throttle), next hop: " + req.readNextIdentity());
|
_log.warn("Rejecting tunnel (hop throttle), next hop: " + nextPeer);
|
||||||
// no setTunnelStatus() indication
|
// no setTunnelStatus() indication
|
||||||
response = TunnelHistory.TUNNEL_REJECT_BANDWIDTH;
|
response = TunnelHistory.TUNNEL_REJECT_BANDWIDTH;
|
||||||
}
|
}
|
||||||
@@ -606,7 +625,7 @@ class BuildHandler {
|
|||||||
cfg.setSendTo(null);
|
cfg.setSendTo(null);
|
||||||
cfg.setSendTunnelId(null);
|
cfg.setSendTunnelId(null);
|
||||||
} else {
|
} else {
|
||||||
cfg.setSendTo(req.readNextIdentity());
|
cfg.setSendTo(nextPeer);
|
||||||
cfg.setSendTunnelId(DataHelper.toLong(4, nextId));
|
cfg.setSendTunnelId(DataHelper.toLong(4, nextId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -622,7 +641,7 @@ class BuildHandler {
|
|||||||
_context.tunnelDispatcher().joinParticipant(cfg);
|
_context.tunnelDispatcher().joinParticipant(cfg);
|
||||||
} else {
|
} else {
|
||||||
_context.statManager().addRateData("tunnel.reject." + response, 1, 1);
|
_context.statManager().addRateData("tunnel.reject." + response, 1, 1);
|
||||||
_context.messageHistory().tunnelRejected(state.fromHash, new TunnelId(ourId), req.readNextIdentity(),
|
_context.messageHistory().tunnelRejected(state.fromHash, new TunnelId(ourId), nextPeer,
|
||||||
"rejecting for " + response + ": " +
|
"rejecting for " + response + ": " +
|
||||||
state.msg.getUniqueId() + "/" + ourId + "/" + req.readNextTunnelId() + " delay " +
|
state.msg.getUniqueId() + "/" + ourId + "/" + req.readNextTunnelId() + " delay " +
|
||||||
recvDelay + " as " +
|
recvDelay + " as " +
|
||||||
|
Reference in New Issue
Block a user