diff --git a/src/dorkbox/network/Client.java b/src/dorkbox/network/Client.java index 0d3da89b..2995d8a0 100644 --- a/src/dorkbox/network/Client.java +++ b/src/dorkbox/network/Client.java @@ -65,7 +65,7 @@ class Client extends EndPointClient implements Connecti */ public static String getVersion() { - return "2.4"; + return "2.5"; } private final String localChannelName; diff --git a/src/dorkbox/network/Server.java b/src/dorkbox/network/Server.java index a8cdae86..cda523e5 100644 --- a/src/dorkbox/network/Server.java +++ b/src/dorkbox/network/Server.java @@ -18,8 +18,6 @@ package dorkbox.network; import java.io.IOException; import java.net.Socket; -import org.slf4j.Logger; - import dorkbox.network.connection.Connection; import dorkbox.network.connection.EndPointServer; import dorkbox.network.connection.registration.local.RegistrationLocalHandlerServer; @@ -66,7 +64,7 @@ class Server extends EndPointServer { */ public static String getVersion() { - return "2.4"; + return "2.5"; } /** @@ -305,22 +303,21 @@ class Server extends EndPointServer { ChannelFuture future; // LOCAL - Logger logger2 = logger; if (localBootstrap != null) { try { future = localBootstrap.bind(); future.await(); } catch (InterruptedException e) { - String errorMessage = stopWithErrorMessage(logger2, "Could not bind to LOCAL address on the server.", e); + String errorMessage = stopWithErrorMessage(logger, "Could not bind to LOCAL address on the server.", e); throw new IllegalArgumentException(errorMessage); } if (!future.isSuccess()) { - String errorMessage = stopWithErrorMessage(logger2, "Could not bind to LOCAL address on the server.", future.cause()); + String errorMessage = stopWithErrorMessage(logger, "Could not bind to LOCAL address on the server.", future.cause()); throw new IllegalArgumentException(errorMessage); } - logger2.info("Listening on LOCAL address: '{}'", localChannelName); + logger.info("Listening on LOCAL address: '{}'", localChannelName); manageForShutdown(future); } @@ -332,7 +329,7 @@ class Server extends EndPointServer { future = tcpBootstrap.bind(); future.await(); } catch (Exception e) { - String errorMessage = stopWithErrorMessage(logger2, + String errorMessage = stopWithErrorMessage(logger, "Could not bind to address " + hostName + " TCP port " + tcpPort + " on the server.", e); @@ -340,14 +337,14 @@ class Server extends EndPointServer { } if (!future.isSuccess()) { - String errorMessage = stopWithErrorMessage(logger2, + String errorMessage = stopWithErrorMessage(logger, "Could not bind to address " + hostName + " TCP port " + tcpPort + " on the server.", future.cause()); throw new IllegalArgumentException(errorMessage); } - logger2.info("Listening on address {} at TCP port: {}", hostName, tcpPort); + logger.info("Listening on address {} at TCP port: {}", hostName, tcpPort); manageForShutdown(future); } @@ -358,7 +355,7 @@ class Server extends EndPointServer { future = udpBootstrap.bind(); future.await(); } catch (Exception e) { - String errorMessage = stopWithErrorMessage(logger2, + String errorMessage = stopWithErrorMessage(logger, "Could not bind to address " + hostName + " UDP port " + udpPort + " on the server.", e); @@ -366,14 +363,14 @@ class Server extends EndPointServer { } if (!future.isSuccess()) { - String errorMessage = stopWithErrorMessage(logger2, + String errorMessage = stopWithErrorMessage(logger, "Could not bind to address " + hostName + " UDP port " + udpPort + " on the server.", future.cause()); throw new IllegalArgumentException(errorMessage); } - logger2.info("Listening on address {} at UDP port: {}", hostName, udpPort); + logger.info("Listening on address {} at UDP port: {}", hostName, udpPort); manageForShutdown(future); } diff --git a/src/dorkbox/network/connection/EndPoint.java b/src/dorkbox/network/connection/EndPoint.java index 510210e1..f6404564 100644 --- a/src/dorkbox/network/connection/EndPoint.java +++ b/src/dorkbox/network/connection/EndPoint.java @@ -105,10 +105,10 @@ class EndPoint { .getThreadGroup(), type.getSimpleName() + " " + THREADGROUP_NAME); threadGroup.setDaemon(true); - this.logger = org.slf4j.LoggerFactory.getLogger(type.getSimpleName()); + logger = org.slf4j.LoggerFactory.getLogger(type.getSimpleName()); - this.shutdownHook = new Thread() { + shutdownHook = new Thread() { @Override public void run() { @@ -117,10 +117,10 @@ class EndPoint { } } }; - this.shutdownHook.setName(shutdownHookName); + shutdownHook.setName(shutdownHookName); try { Runtime.getRuntime() - .addShutdownHook(this.shutdownHook); + .addShutdownHook(shutdownHook); } catch (Throwable ignored) { // if we are in the middle of shutdown, we cannot do this. } @@ -131,8 +131,8 @@ class EndPoint { */ protected final void manageForShutdown(ChannelFuture future) { - synchronized (this.shutdownChannelList) { - this.shutdownChannelList.add(future); + synchronized (shutdownChannelList) { + shutdownChannelList.add(future); } } @@ -141,8 +141,8 @@ class EndPoint { */ protected final void manageForShutdown(EventLoopGroup loopGroup) { - synchronized (this.eventLoopGroups) { - this.eventLoopGroups.add(loopGroup); + synchronized (eventLoopGroups) { + eventLoopGroups.add(loopGroup); } } @@ -150,7 +150,7 @@ class EndPoint { void shutdownChannels() { synchronized (shutdownChannelList) { // now we stop all of our channels - for (ChannelFuture f : this.shutdownChannelList) { + for (ChannelFuture f : shutdownChannelList) { Channel channel = f.channel(); if (channel.isOpen()) { channel.close() @@ -160,19 +160,19 @@ class EndPoint { } // we have to clear the shutdown list. ( - this.shutdownChannelList.clear(); + shutdownChannelList.clear(); } } protected final - String stopWithErrorMessage(Logger logger2, String errorMessage, Throwable throwable) { - if (logger2.isDebugEnabled() && throwable != null) { + String stopWithErrorMessage(Logger logger, String errorMessage, Throwable throwable) { + if (logger.isDebugEnabled() && throwable != null) { // extra info if debug is enabled - logger2.error(errorMessage, throwable.getCause()); + logger.error(errorMessage, throwable.getCause()); } else { - logger2.error(errorMessage); + logger.error(errorMessage); } stop(); @@ -199,7 +199,7 @@ class EndPoint { public final void stop() { // only permit us to "stop" once! - if (!this.stopCalled.compareAndSet(false, true)) { + if (!stopCalled.compareAndSet(false, true)) { return; } @@ -220,7 +220,7 @@ class EndPoint { // we have to make sure always run this from within it's OWN thread -- because if it's run from within // a client/server thread executor, it will deadlock while waiting for the threadpool to terminate. boolean isInEventLoop = false; - for (EventLoopGroup loopGroup : this.eventLoopGroups) { + for (EventLoopGroup loopGroup : eventLoopGroups) { Iterator iterator = loopGroup.iterator(); while (iterator.hasNext()) { EventExecutor next = iterator.next(); @@ -276,11 +276,11 @@ class EndPoint { void stopInThread() { // make sure we are not trying to stop during a startup procedure. // This will wait until we have finished starting up/shutting down. - synchronized (this.shutdownInProgress) { + synchronized (shutdownInProgress) { // we want to WAIT until after the event executors have completed shutting down. List> shutdownThreadList = new LinkedList>(); - for (EventLoopGroup loopGroup : this.eventLoopGroups) { + for (EventLoopGroup loopGroup : eventLoopGroups) { shutdownThreadList.add(loopGroup.shutdownGracefully(maxShutdownWaitTimeInMilliSeconds, maxShutdownWaitTimeInMilliSeconds * 4, TimeUnit.MILLISECONDS)); @@ -298,7 +298,7 @@ class EndPoint { shutdownChannels(); - this.logger.info("Stopping endpoint."); + logger.info("Stopping endpoint."); // there is no need to call "stop" again if we close the connection. // however, if this is called WHILE from the shutdown hook, blammo! problems! @@ -310,7 +310,7 @@ class EndPoint { .equals(shutdownHookName)) { try { Runtime.getRuntime() - .removeShutdownHook(this.shutdownHook); + .removeShutdownHook(shutdownHook); } catch (Exception e) { // ignore } @@ -326,7 +326,7 @@ class EndPoint { } // tell the blocked "bind" method that it may continue (and exit) - this.blockUntilDone.countDown(); + blockUntilDone.countDown(); } /** @@ -336,9 +336,9 @@ class EndPoint { void waitForShutdown() { // we now BLOCK until the stop method is called. try { - this.blockUntilDone.await(); + blockUntilDone.await(); } catch (InterruptedException e) { - this.logger.error("Thread interrupted while waiting for stop!"); + logger.error("Thread interrupted while waiting for stop!"); } } @@ -350,6 +350,6 @@ class EndPoint { public String getName() { - return this.type.getSimpleName(); + return type.getSimpleName(); } } diff --git a/src/dorkbox/network/connection/EndPointBase.java b/src/dorkbox/network/connection/EndPointBase.java index 524d584a..e5c76977 100644 --- a/src/dorkbox/network/connection/EndPointBase.java +++ b/src/dorkbox/network/connection/EndPointBase.java @@ -133,9 +133,9 @@ class EndPointBase extends EndPoint { // serialization stuff if (config.serialization != null) { - this.serializationManager = config.serialization; + serializationManager = config.serialization; } else { - this.serializationManager = CryptoSerializationManager.DEFAULT(); + serializationManager = CryptoSerializationManager.DEFAULT(); } // setup our RMI serialization managers. Can only be called once @@ -146,31 +146,31 @@ class EndPointBase extends EndPoint { // The registration wrapper permits the registration process to access protected/package fields/methods, that we don't want // to expose to external code. "this" escaping can be ignored, because it is benign. //noinspection ThisEscapedInObjectConstruction - this.registrationWrapper = new RegistrationWrapper(this, - this.logger, - new KryoEncoder(this.serializationManager), - new KryoEncoderCrypto(this.serializationManager)); + registrationWrapper = new RegistrationWrapper(this, + logger, + new KryoEncoder(serializationManager), + new KryoEncoderCrypto(serializationManager)); // we have to be able to specify WHAT property store we want to use, since it can change! if (config.settingsStore == null) { - this.propertyStore = new PropertyStore(); + propertyStore = new PropertyStore(); } else { - this.propertyStore = config.settingsStore; + propertyStore = config.settingsStore; } - this.propertyStore.init(this.serializationManager, null); + propertyStore.init(serializationManager, null); // null it out, since it is sensitive! config.settingsStore = null; - if (!(this.propertyStore instanceof NullSettingsStore)) { + if (!(propertyStore instanceof NullSettingsStore)) { // initialize the private/public keys used for negotiating ECC handshakes // these are ONLY used for IP connections. LOCAL connections do not need a handshake! - ECPrivateKeyParameters privateKey = this.propertyStore.getPrivateKey(); - ECPublicKeyParameters publicKey = this.propertyStore.getPublicKey(); + ECPrivateKeyParameters privateKey = propertyStore.getPrivateKey(); + ECPublicKeyParameters publicKey = propertyStore.getPublicKey(); if (privateKey == null || publicKey == null) { try { @@ -179,20 +179,20 @@ class EndPointBase extends EndPoint { SecureRandom secureRandom = new SecureRandom(seedBytes); secureRandom.nextBytes(seedBytes); - this.logger.debug("Now generating ECC (" + CryptoECC.curve25519 + ") keys. Please wait!"); + logger.debug("Now generating ECC (" + CryptoECC.curve25519 + ") keys. Please wait!"); AsymmetricCipherKeyPair generateKeyPair = CryptoECC.generateKeyPair(CryptoECC.curve25519, secureRandom); privateKey = (ECPrivateKeyParameters) generateKeyPair.getPrivate(); publicKey = (ECPublicKeyParameters) generateKeyPair.getPublic(); // save to properties file - this.propertyStore.savePrivateKey(privateKey); - this.propertyStore.savePublicKey(publicKey); + propertyStore.savePrivateKey(privateKey); + propertyStore.savePublicKey(publicKey); - this.logger.debug("Done with ECC keys!"); + logger.debug("Done with ECC keys!"); } catch (Exception e) { String message = "Unable to initialize/generate ECC keys. FORCED SHUTDOWN."; - this.logger.error(message); + logger.error(message); throw new InitializationException(message); } } @@ -206,21 +206,21 @@ class EndPointBase extends EndPoint { } - this.secureRandom = new SecureRandom(this.propertyStore.getSalt()); + secureRandom = new SecureRandom(propertyStore.getSalt()); // we don't care about un-instantiated/constructed members, since the class type is the only interest. - this.connectionManager = new ConnectionManager(type.getSimpleName(), connection0(null).getClass()); + connectionManager = new ConnectionManager(type.getSimpleName(), connection0(null).getClass()); // add the ping listener (internal use only!) - this.connectionManager.add(new PingSystemListener()); + connectionManager.add(new PingSystemListener()); - if (this.rmiEnabled) { + if (rmiEnabled) { // these register the listener for registering a class implementation for RMI (internal use only) - this.connectionManager.add(new RegisterRmiSystemListener()); - this.globalRmiBridge = new RmiBridge(logger, config.rmiExecutor, true); + connectionManager.add(new RegisterRmiSystemListener()); + globalRmiBridge = new RmiBridge(logger, config.rmiExecutor, true); } else { - this.globalRmiBridge = null; + globalRmiBridge = null; } serializationManager.finishInit(); @@ -231,14 +231,12 @@ class EndPointBase extends EndPoint { */ public void disableRemoteKeyValidation() { - Logger logger2 = this.logger; - if (isConnected()) { - logger2.error("Cannot disable the remote key validation after this endpoint is connected!"); + logger.error("Cannot disable the remote key validation after this endpoint is connected!"); } else { - logger2.info("WARNING: Disabling remote key validation is a security risk!!"); - this.disableRemoteKeyValidation = true; + logger.info("WARNING: Disabling remote key validation is a security risk!!"); + disableRemoteKeyValidation = true; } } @@ -249,7 +247,7 @@ class EndPointBase extends EndPoint { @SuppressWarnings("unchecked") public S getPropertyStore() { - return (S) this.propertyStore; + return (S) propertyStore; } /** @@ -267,7 +265,7 @@ class EndPointBase extends EndPoint { */ public int getIdleTimeout() { - return this.idleTimeoutMs; + return idleTimeoutMs; } /** @@ -278,7 +276,7 @@ class EndPointBase extends EndPoint { */ public void setIdleTimeout(int idleTimeoutMs) { - this.idleTimeoutMs = idleTimeoutMs; + idleTimeoutMs = idleTimeoutMs; } /** @@ -288,7 +286,7 @@ class EndPointBase extends EndPoint { */ public final boolean isConnected() { - return this.isConnected.get(); + return isConnected.get(); } /** @@ -296,7 +294,7 @@ class EndPointBase extends EndPoint { */ public dorkbox.network.util.CryptoSerializationManager getSerialization() { - return this.serializationManager; + return serializationManager; } /** @@ -344,7 +342,7 @@ class EndPointBase extends EndPoint { } else { if (this instanceof EndPointServer) { - wrapper = new ChannelNetworkWrapper(metaChannel, this.registrationWrapper); + wrapper = new ChannelNetworkWrapper(metaChannel, registrationWrapper); } else { wrapper = new ChannelNetworkWrapper(metaChannel, null); @@ -352,7 +350,7 @@ class EndPointBase extends EndPoint { } // now initialize the connection channels with whatever extra info they might need. - connection.init(wrapper, (ConnectionManager) this.connectionManager); + connection.init(wrapper, (ConnectionManager) connectionManager); if (rmiBridge != null) { // notify our remote object space that it is able to receive method calls. @@ -378,12 +376,12 @@ class EndPointBase extends EndPoint { */ @SuppressWarnings("unchecked") void connectionConnected0(ConnectionImpl connection) { - this.isConnected.set(true); + isConnected.set(true); // prep the channel wrapper connection.prep(); - this.connectionManager.onConnected((C) connection); + connectionManager.onConnected((C) connection); } /** @@ -391,7 +389,7 @@ class EndPointBase extends EndPoint { */ public final Listeners listeners() { - return this.connectionManager; + return connectionManager; } /** @@ -399,7 +397,7 @@ class EndPointBase extends EndPoint { */ public List getConnections() { - return this.connectionManager.getConnections(); + return connectionManager.getConnections(); } /** @@ -408,7 +406,7 @@ class EndPointBase extends EndPoint { @SuppressWarnings("unchecked") public Collection getConnectionsAs() { - return this.connectionManager.getConnections(); + return connectionManager.getConnections(); } /** @@ -430,12 +428,12 @@ class EndPointBase extends EndPoint { Thread.yield(); // stop does the same as this + more - this.connectionManager.closeConnections(); + connectionManager.closeConnections(); // Sometimes there might be "lingering" connections (ie, halfway though registration) that need to be closed. - this.registrationWrapper.closeChannels(maxShutdownWaitTimeInMilliSeconds); + registrationWrapper.closeChannels(maxShutdownWaitTimeInMilliSeconds); - this.isConnected.set(false); + isConnected.set(false); } /** @@ -447,7 +445,7 @@ class EndPointBase extends EndPoint { protected boolean shouldShutdownHookRun() { // connectionManager.shutdown accurately reflects the state of the app. Safe to use here - return (this.connectionManager != null && !this.connectionManager.shutdown.get()); + return (connectionManager != null && !connectionManager.shutdown.get()); } @Override @@ -456,14 +454,14 @@ class EndPointBase extends EndPoint { closeConnections(); // this does a closeConnections + clear_listeners - this.connectionManager.stop(); + connectionManager.stop(); } @Override protected void stopExtraActionsInternal() { // shutdown the database store - this.propertyStore.close(); + propertyStore.close(); } @Override @@ -471,8 +469,8 @@ class EndPointBase extends EndPoint { int hashCode() { final int prime = 31; int result = 1; - result = prime * result + (this.privateKey == null ? 0 : this.privateKey.hashCode()); - result = prime * result + (this.publicKey == null ? 0 : this.publicKey.hashCode()); + result = prime * result + (privateKey == null ? 0 : privateKey.hashCode()); + result = prime * result + (publicKey == null ? 0 : publicKey.hashCode()); return result; } @@ -491,20 +489,20 @@ class EndPointBase extends EndPoint { } EndPointBase other = (EndPointBase) obj; - if (this.privateKey == null) { + if (privateKey == null) { if (other.privateKey != null) { return false; } } - else if (!CryptoECC.compare(this.privateKey, other.privateKey)) { + else if (!CryptoECC.compare(privateKey, other.privateKey)) { return false; } - if (this.publicKey == null) { + if (publicKey == null) { if (other.publicKey != null) { return false; } } - else if (!CryptoECC.compare(this.publicKey, other.publicKey)) { + else if (!CryptoECC.compare(publicKey, other.publicKey)) { return false; } return true; diff --git a/src/dorkbox/network/connection/EndPointClient.java b/src/dorkbox/network/connection/EndPointClient.java index 82dfff83..b0f5620d 100644 --- a/src/dorkbox/network/connection/EndPointClient.java +++ b/src/dorkbox/network/connection/EndPointClient.java @@ -20,8 +20,6 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import org.slf4j.Logger; - import dorkbox.network.Client; import dorkbox.network.Configuration; import dorkbox.network.connection.bridge.ConnectionBridge; @@ -95,7 +93,6 @@ class EndPointClient extends EndPointBase implements Ru bootstrapWrapper.bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, this.connectionTimeout); } - Logger logger2 = this.logger; try { // UDP : When this is CONNECT, a udp socket will ONLY accept UDP traffic from the remote address (ip/port combo). // If the reply isn't from the correct port, then the other end will receive a "Port Unreachable" exception. @@ -103,7 +100,7 @@ class EndPointClient extends EndPointBase implements Ru future = bootstrapWrapper.bootstrap.connect(); future.await(); } catch (Exception e) { - String errorMessage = stopWithErrorMessage(logger2, + String errorMessage = stopWithErrorMessage(this.logger, "Could not connect to the " + bootstrapWrapper.type + " server at " + bootstrapWrapper.address + " on port: " + bootstrapWrapper.port, e); @@ -111,15 +108,15 @@ class EndPointClient extends EndPointBase implements Ru } if (!future.isSuccess()) { - String errorMessage = stopWithErrorMessage(logger2, + String errorMessage = stopWithErrorMessage(this.logger, "Could not connect to the " + bootstrapWrapper.type + " server at " + bootstrapWrapper.address + " on port: " + bootstrapWrapper.port, future.cause()); throw new IllegalArgumentException(errorMessage); } - if (logger2.isTraceEnabled()) { - logger2.trace("Waiting for registration from server."); + if (this.logger.isTraceEnabled()) { + this.logger.trace("Waiting for registration from server."); } manageForShutdown(future); } @@ -144,9 +141,8 @@ class EndPointClient extends EndPointBase implements Ru } - Logger logger2 = this.logger; - if (logger2.isTraceEnabled()) { - logger2.trace("Registered protocol from server."); + if (this.logger.isTraceEnabled()) { + this.logger.trace("Registered protocol from server."); } // only let us continue with connections (this starts up the client/server implementations) once ALL of the