From 26b90b9d17f5e046b4b5c32a270c18e806f81717 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 8 Apr 2020 15:36:36 +0000
Subject: [PATCH] NTCP: More EnumSets

---
 .../net/i2p/router/transport/ntcp/EstablishBase.java   |  8 ++++++--
 .../src/net/i2p/router/transport/ntcp/EventPumper.java | 10 +++++-----
 .../router/transport/ntcp/InboundEstablishState.java   |  7 +++----
 3 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/router/java/src/net/i2p/router/transport/ntcp/EstablishBase.java b/router/java/src/net/i2p/router/transport/ntcp/EstablishBase.java
index de10dce689..d84a78c997 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/EstablishBase.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/EstablishBase.java
@@ -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);
         }
diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
index f5566a636d..10612b8a36 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java
@@ -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);
     }
 
     /**
diff --git a/router/java/src/net/i2p/router/transport/ntcp/InboundEstablishState.java b/router/java/src/net/i2p/router/transport/ntcp/InboundEstablishState.java
index e84400e528..067ecad53e 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/InboundEstablishState.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/InboundEstablishState.java
@@ -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());
         }
-- 
GitLab