NTCP: More EnumSets

This commit is contained in:
zzz
2020-04-08 15:36:36 +00:00
parent c8647fc3a5
commit 26b90b9d17
3 changed files with 14 additions and 11 deletions

View File

@ -1,6 +1,8 @@
package net.i2p.router.transport.ntcp;
import java.nio.ByteBuffer;
import java.util.EnumSet;
import java.util.Set;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
@ -173,6 +175,8 @@ abstract class EstablishBase implements EstablishState {
CORRUPT
}
protected static final Set<State> STATES_DONE = EnumSet.of(State.VERIFIED, State.CORRUPT);
private EstablishBase() {
_context = null;
_log = null;
@ -228,7 +232,7 @@ abstract class EstablishBase implements EstablishState {
*/
public synchronized void receive(ByteBuffer src) {
synchronized(_stateLock) {
if (_state == State.VERIFIED || _state == State.CORRUPT)
if (STATES_DONE.contains(_state))
throw new IllegalStateException(prefix() + "received unexpected data on " + _con);
}
if (_log.shouldLog(Log.DEBUG))
@ -287,7 +291,7 @@ abstract class EstablishBase implements EstablishState {
/** Caller must synch. */
protected void fail(String reason, Exception e, boolean bySkew) {
synchronized(_stateLock) {
if (_state == State.CORRUPT || _state == State.VERIFIED)
if (STATES_DONE.contains(_state))
return;
changeState(State.CORRUPT);
}

View File

@ -16,6 +16,7 @@ import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.channels.UnresolvedAddressException;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.Queue;
import java.util.Set;
@ -112,6 +113,9 @@ class EventPumper implements Runnable {
private static final TryCache<ByteBuffer> _bufferCache = new TryCache<>(new BufferFactory(), MIN_BUFS);
private static final Set<Status> STATUS_OK =
EnumSet.of(Status.OK, Status.IPV4_OK_IPV6_UNKNOWN, Status.IPV4_OK_IPV6_FIREWALLED);
public EventPumper(RouterContext ctx, NTCPTransport transport) {
_context = ctx;
_log = ctx.logManager().getLog(getClass());
@ -576,11 +580,7 @@ class EventPumper implements Runnable {
if (chan.socket().getInetAddress() instanceof Inet6Address)
return false;
Status status = _context.commSystem().getStatus();
if (status == Status.OK ||
status == Status.IPV4_OK_IPV6_UNKNOWN ||
status == Status.IPV4_OK_IPV6_FIREWALLED)
return false;
return true;
return !STATUS_OK.contains(status);
}
/**

View File

@ -88,6 +88,7 @@ class InboundEstablishState extends EstablishBase implements NTCP2Payload.Payloa
private static final Set<State> STATES_NTCP2 =
EnumSet.of(State.IB_NTCP2_INIT, State.IB_NTCP2_GOT_X, State.IB_NTCP2_GOT_PADDING,
State.IB_NTCP2_SENT_Y, State.IB_NTCP2_GOT_RI, State.IB_NTCP2_READ_RANDOM);
private static final Set<State> STATES_MSG3 = EnumSet.of(State.IB_SENT_Y, State.IB_GOT_RI_SIZE, State.IB_GOT_RI);
public InboundEstablishState(RouterContext ctx, NTCPTransport transport, NTCPConnection con) {
@ -270,9 +271,7 @@ class InboundEstablishState extends EstablishBase implements NTCP2Payload.Payloa
}
// ok, we are onto the encrypted area, i.e. Message #3
while ((_state == State.IB_SENT_Y ||
_state == State.IB_GOT_RI_SIZE ||
_state == State.IB_GOT_RI) && src.hasRemaining()) {
while (STATES_MSG3.contains(_state) && src.hasRemaining()) {
// Collect a 16-byte block
if (_received < AES_SIZE && src.hasRemaining()) {
@ -370,7 +369,7 @@ class InboundEstablishState extends EstablishBase implements NTCP2Payload.Payloa
}
// check for remaining data
if ((_state == State.VERIFIED || _state == State.CORRUPT) && src.hasRemaining()) {
if (STATES_DONE.contains(_state) && src.hasRemaining()) {
if (_log.shouldWarn())
_log.warn("Received unexpected " + src.remaining() + " on " + this, new Exception());
}