I2CP: Use EnumSets for state checking

This commit is contained in:
zzz
2019-06-17 15:46:28 +00:00
parent a8f2745169
commit 6d8431a77e

View File

@ -21,10 +21,12 @@ import java.net.Socket;
import java.net.UnknownHostException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.LinkedBlockingQueue;
@ -166,6 +168,18 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
CLOSED
}
private static final Set<State> STATES_CLOSED =
EnumSet.of(State.INIT, State.CLOSED);
private static final Set<State> STATES_OPENING =
EnumSet.of(State.INIT, State.OPENING);
private static final Set<State> STATES_CLOSED_OR_OPENING =
EnumSet.of(State.INIT, State.CLOSED, State.OPENING);
private static final Set<State> STATES_CLOSED_OR_CLOSING =
EnumSet.of(State.INIT, State.CLOSED, State.CLOSING);
protected State _state = State.INIT;
protected final Object _stateLock = new Object();
@ -850,7 +864,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
synchronized(_stateLock) {
if (_state == State.GOTDATE)
break;
if (_state != State.OPENING && _state != State.INIT)
if (!STATES_OPENING.contains(_state))
throw new IOException("Socket closed, state=" + _state);
// InterruptedException caught by caller
_stateLock.wait(1000);
@ -1165,7 +1179,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
*/
public boolean isClosed() {
synchronized (_stateLock) {
return _state == State.CLOSED || _state == State.INIT;
return STATES_CLOSED.contains(_state);
}
}
@ -1281,7 +1295,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
*/
public void destroySession(boolean sendDisconnect) {
synchronized(_stateLock) {
if (_state == State.CLOSING || _state == State.CLOSED || _state == State.INIT)
if (STATES_CLOSED_OR_CLOSING.contains(_state))
return;
changeState(State.CLOSING);
}
@ -1378,7 +1392,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
protected void disconnect() {
State oldState;
synchronized(_stateLock) {
if (_state == State.CLOSING || _state == State.CLOSED || _state == State.INIT)
if (STATES_CLOSED_OR_CLOSING.contains(_state))
return;
oldState = _state;
changeState(State.CLOSING);
@ -1606,9 +1620,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
}
synchronized (_stateLock) {
// not before GOTDATE
if (_state == State.CLOSED ||
_state == State.INIT ||
_state == State.OPENING) {
if (STATES_CLOSED_OR_OPENING.contains(_state)) {
if (_log.shouldLog(Log.INFO))
_log.info("Session closed, cannot lookup " + h);
return null;
@ -1750,9 +1762,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
public int[] bandwidthLimits() throws I2PSessionException {
synchronized (_stateLock) {
// not before GOTDATE
if (_state == State.CLOSED ||
_state == State.INIT ||
_state == State.OPENING) {
if (STATES_CLOSED_OR_OPENING.contains(_state)) {
if (_log.shouldLog(Log.INFO))
_log.info("Session closed, cannot get bw limits");
return null;