Removed connection timing. added protocol count connection info during

handshake
This commit is contained in:
nathan 2018-04-04 15:01:51 +02:00
parent ccbe893efa
commit fdf4ecf39b

View File

@ -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();
}
}