forked from I2P_Developers/i2p.i2p
Router: Ensure nonzero tunnel IDs
This commit is contained in:
@ -18,6 +18,10 @@ import java.io.OutputStream;
|
|||||||
* the tunnel (otherwise they would get confused and send messages down the
|
* the tunnel (otherwise they would get confused and send messages down the
|
||||||
* wrong one).
|
* wrong one).
|
||||||
*
|
*
|
||||||
|
* Note that a TunnelId must be greater than zero,
|
||||||
|
* as the DatabaseStoreMessage uses a zero ID to request
|
||||||
|
* a direct reply.
|
||||||
|
*
|
||||||
* @author jrandom
|
* @author jrandom
|
||||||
*/
|
*/
|
||||||
public class TunnelId extends DataStructureImpl {
|
public class TunnelId extends DataStructureImpl {
|
||||||
@ -29,6 +33,10 @@ public class TunnelId extends DataStructureImpl {
|
|||||||
_tunnelId = -1;
|
_tunnelId = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param id 1 to 0xffffffff
|
||||||
|
* @throws IllegalArgumentException if less than or equal to zero
|
||||||
|
*/
|
||||||
public TunnelId(long id) {
|
public TunnelId(long id) {
|
||||||
if (id <= 0) throw new IllegalArgumentException("wtf, tunnelId " + id);
|
if (id <= 0) throw new IllegalArgumentException("wtf, tunnelId " + id);
|
||||||
_tunnelId = id;
|
_tunnelId = id;
|
||||||
@ -36,6 +44,10 @@ public class TunnelId extends DataStructureImpl {
|
|||||||
|
|
||||||
public long getTunnelId() { return _tunnelId; }
|
public long getTunnelId() { return _tunnelId; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param id 1 to 0xffffffff
|
||||||
|
* @throws IllegalArgumentException if less than or equal to zero
|
||||||
|
*/
|
||||||
public void setTunnelId(long id) {
|
public void setTunnelId(long id) {
|
||||||
_tunnelId = id;
|
_tunnelId = id;
|
||||||
if (id <= 0) throw new IllegalArgumentException("wtf, tunnelId " + id);
|
if (id <= 0) throw new IllegalArgumentException("wtf, tunnelId " + id);
|
||||||
|
@ -389,7 +389,7 @@ public class TunnelDispatcher implements Service {
|
|||||||
long rv;
|
long rv;
|
||||||
TunnelId tid;
|
TunnelId tid;
|
||||||
do {
|
do {
|
||||||
rv = _context.random().nextLong(TunnelId.MAX_ID_VALUE);
|
rv = 1 + _context.random().nextLong(TunnelId.MAX_ID_VALUE - 1);
|
||||||
tid = new TunnelId(rv);
|
tid = new TunnelId(rv);
|
||||||
} while (_outboundGateways.containsKey(tid));
|
} while (_outboundGateways.containsKey(tid));
|
||||||
return rv;
|
return rv;
|
||||||
@ -406,7 +406,7 @@ public class TunnelDispatcher implements Service {
|
|||||||
long rv;
|
long rv;
|
||||||
TunnelId tid;
|
TunnelId tid;
|
||||||
do {
|
do {
|
||||||
rv = _context.random().nextLong(TunnelId.MAX_ID_VALUE);
|
rv = 1 + _context.random().nextLong(TunnelId.MAX_ID_VALUE - 1);
|
||||||
tid = new TunnelId(rv);
|
tid = new TunnelId(rv);
|
||||||
} while (_participants.containsKey(tid));
|
} while (_participants.containsKey(tid));
|
||||||
return rv;
|
return rv;
|
||||||
@ -423,7 +423,7 @@ public class TunnelDispatcher implements Service {
|
|||||||
long rv;
|
long rv;
|
||||||
TunnelId tid;
|
TunnelId tid;
|
||||||
do {
|
do {
|
||||||
rv = _context.random().nextLong(TunnelId.MAX_ID_VALUE);
|
rv = 1 + _context.random().nextLong(TunnelId.MAX_ID_VALUE - 1);
|
||||||
tid = new TunnelId(rv);
|
tid = new TunnelId(rv);
|
||||||
} while (_inboundGateways.containsKey(tid));
|
} while (_inboundGateways.containsKey(tid));
|
||||||
return rv;
|
return rv;
|
||||||
@ -612,7 +612,7 @@ public class TunnelDispatcher implements Service {
|
|||||||
* endpoint.
|
* endpoint.
|
||||||
*
|
*
|
||||||
* @param msg raw message to deliver to the target peer
|
* @param msg raw message to deliver to the target peer
|
||||||
* @param outboundTunnel tunnel to send the message out
|
* @param outboundTunnel tunnel to send the message out, or null for direct
|
||||||
* @param targetPeer peer to receive the message
|
* @param targetPeer peer to receive the message
|
||||||
*/
|
*/
|
||||||
public void dispatchOutbound(I2NPMessage msg, TunnelId outboundTunnel, Hash targetPeer) {
|
public void dispatchOutbound(I2NPMessage msg, TunnelId outboundTunnel, Hash targetPeer) {
|
||||||
@ -626,7 +626,7 @@ public class TunnelDispatcher implements Service {
|
|||||||
*
|
*
|
||||||
* @param msg raw message to deliver to the targetTunnel on the targetPeer
|
* @param msg raw message to deliver to the targetTunnel on the targetPeer
|
||||||
* @param outboundTunnel tunnel to send the message out
|
* @param outboundTunnel tunnel to send the message out
|
||||||
* @param targetTunnel tunnel on the targetPeer to deliver the message to
|
* @param targetTunnel tunnel on the targetPeer to deliver the message to, or null for direct
|
||||||
* @param targetPeer gateway to the tunnel to receive the message
|
* @param targetPeer gateway to the tunnel to receive the message
|
||||||
*/
|
*/
|
||||||
public void dispatchOutbound(I2NPMessage msg, TunnelId outboundTunnel, TunnelId targetTunnel, Hash targetPeer) {
|
public void dispatchOutbound(I2NPMessage msg, TunnelId outboundTunnel, TunnelId targetTunnel, Hash targetPeer) {
|
||||||
|
@ -81,7 +81,7 @@ abstract class BuildRequestor {
|
|||||||
else if (isIB && i == len - 1)
|
else if (isIB && i == len - 1)
|
||||||
id = ctx.tunnelDispatcher().getNewIBEPID();
|
id = ctx.tunnelDispatcher().getNewIBEPID();
|
||||||
else
|
else
|
||||||
id = ctx.random().nextLong(TunnelId.MAX_ID_VALUE);
|
id = 1 + ctx.random().nextLong(TunnelId.MAX_ID_VALUE - 1);
|
||||||
cfg.getConfig(i).setReceiveTunnelId(DataHelper.toLong(4, id));
|
cfg.getConfig(i).setReceiveTunnelId(DataHelper.toLong(4, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user