From fdf4ecf39b1b0f566aa93f8cad023eaaa6786bb0 Mon Sep 17 00:00:00 2001 From: nathan Date: Wed, 4 Apr 2018 15:01:51 +0200 Subject: [PATCH] Removed connection timing. added protocol count connection info during handshake --- .../connection/registration/MetaChannel.java | 48 +++++++------------ 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/src/dorkbox/network/connection/registration/MetaChannel.java b/src/dorkbox/network/connection/registration/MetaChannel.java index 9adc1844..9263c63a 100644 --- a/src/dorkbox/network/connection/registration/MetaChannel.java +++ b/src/dorkbox/network/connection/registration/MetaChannel.java @@ -15,7 +15,7 @@ */ package dorkbox.network.connection.registration; -import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicInteger; import org.bouncycastle.crypto.AsymmetricCipherKeyPair; import org.bouncycastle.crypto.params.ECPublicKeyParameters; @@ -26,51 +26,35 @@ import io.netty.channel.ChannelHandler; public class MetaChannel { - // how long between receiving data over TCP. This is used to determine how long to wait before notifying the APP, - // so the registration message has time to arrive to the other endpoint. - private AtomicLong nanoSecRoundTrip = new AtomicLong(); - // used to keep track and associate TCP/UDP/etc sessions. This is always defined by the server // a sessionId if '0', means we are still figuring it out. - public int sessionId; + public volatile int sessionId; - public Channel localChannel = null; // only available for local "in jvm" channels. XOR with tcp/udp channels with CLIENT. - public Channel tcpChannel = null; - public Channel udpChannel = null; + public volatile Channel localChannel = null; // only available for local "in jvm" channels. XOR with tcp/udp channels with CLIENT, server can have all types at once + public volatile Channel tcpChannel = null; + public volatile Channel udpChannel = null; - public ChannelHandler connection; // only needed until the connection has been notified. + // keep track of how many protocols to register, so that way when we are ready to connect the SERVER sends a message to the client over + // all registered protocols and the last protocol to receive the message does the registration + // we ALWAYS start off with at least 1 protocol + public AtomicInteger totalProtocols = new AtomicInteger(1); - public ECPublicKeyParameters publicKey; // used for ECC crypto + handshake on NETWORK (remote) connections. This is the remote public key. - public AsymmetricCipherKeyPair ecdhKey; // used for ECC Diffie-Hellman-Merkle key exchanges: see http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange + public volatile ChannelHandler connection; // only needed until the connection has been notified. + + public volatile ECPublicKeyParameters publicKey; // used for ECC crypto + handshake on NETWORK (remote) connections. This is the remote public key. + public volatile AsymmetricCipherKeyPair ecdhKey; // used for ECC Diffie-Hellman-Merkle key exchanges: see http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange // since we are using AES-GCM, the aesIV here **MUST** be exactly 12 bytes - public byte[] aesKey; - public byte[] aesIV; + public volatile byte[] aesKey; + public volatile byte[] aesIV; // indicates if the remote ECC key has changed for an IP address. If the client detects this, it will not connect. // If the server detects this, it has the option for additional security (two-factor auth, perhaps?) - public boolean changedRemoteKey = false; + public volatile boolean changedRemoteKey = false; public MetaChannel(final int sessionId) { this.sessionId = sessionId; } - - - /** - * Update the network round trip time. - */ - public - void updateRoundTripOnWrite() { - this.nanoSecRoundTrip.set(System.nanoTime()); - } - - /** - * @return the difference in time from the last write - */ - public - long getRoundTripTime() { - return System.nanoTime() - this.nanoSecRoundTrip.get(); - } }