diff --git a/src/main/java/org/qortal/network/RNSNetwork.java b/src/main/java/org/qortal/network/RNSNetwork.java index e1412545..5a3bf28f 100644 --- a/src/main/java/org/qortal/network/RNSNetwork.java +++ b/src/main/java/org/qortal/network/RNSNetwork.java @@ -599,9 +599,10 @@ public class RNSNetwork { return activePeers; } - public List getImmutableLinkedPeers() { - return this.immutableLinkedPeers; - } + // note: we already have a lobok getter for this + //public List getImmutableLinkedPeers() { + // return this.immutableLinkedPeers; + //} public void addLinkedPeer(RNSPeer peer) { this.linkedPeers.add(peer); @@ -615,16 +616,17 @@ public class RNSNetwork { if (nonNull(peer.getPeerLink())) { peer.getPeerLink().teardown(); } - this.linkedPeers.remove(this.linkedPeers.indexOf(peer)); // thread safe + var p = this.linkedPeers.remove(this.linkedPeers.indexOf(peer)); // thread safe this.immutableLinkedPeers = List.copyOf(this.linkedPeers); } - public List getLinkedPeers() { - //synchronized(this.linkedPeers) { - //return new ArrayList<>(this.linkedPeers); - return this.linkedPeers; - //} - } + // note: we already have a lobok getter for this + //public List getLinkedPeers() { + // //synchronized(this.linkedPeers) { + // //return new ArrayList<>(this.linkedPeers); + // return this.linkedPeers; + // //} + //} public void addIncomingPeer(RNSPeer peer) { this.incomingPeers.add(peer); @@ -635,17 +637,17 @@ public class RNSNetwork { if (nonNull(peer.getPeerLink())) { peer.getPeerLink().teardown(); } - this.incomingPeers.remove(this.incomingPeers.indexOf(peer)); + var p = this.incomingPeers.remove(this.incomingPeers.indexOf(peer)); this.immutableIncomingPeers = List.copyOf(this.incomingPeers); } - public List getIncomingPeers() { - return this.incomingPeers; - } - - public List getImmutableIncomingPeers() { - return this.immutableIncomingPeers; - } + // note: we already have a lobok getter for this + //public List getIncomingPeers() { + // return this.incomingPeers; + //} + //public List getImmutableIncomingPeers() { + // return this.immutableIncomingPeers; + //} // TODO, methods for: getAvailablePeer @@ -813,6 +815,14 @@ public class RNSNetwork { return Settings.getInstance().isTestNet() ? TESTNET_MESSAGE_MAGIC : MAINNET_MESSAGE_MAGIC; } + public String getOurNodeId() { + return this.serverIdentity.toString(); + } + + protected byte[] getOurPublicKey() { + return this.serverIdentity.getPublicKey(); + } + // Network methods Reticulum implementation /** Builds either (legacy) HeightV2Message or (newer) BlockSummariesV2Message, depending on peer version. diff --git a/src/main/java/org/qortal/network/RNSPeer.java b/src/main/java/org/qortal/network/RNSPeer.java index 179946b8..a9de972e 100644 --- a/src/main/java/org/qortal/network/RNSPeer.java +++ b/src/main/java/org/qortal/network/RNSPeer.java @@ -116,6 +116,7 @@ public class RNSPeer { private LinkedBlockingQueue pendingMessages; private boolean syncInProgress = false; private RNSPeerData peerData = null; + private long linkEstablishedTime = -1L; // equivalent of (tcpip) Peer 'handshakeComplete' // Versioning public static final Pattern VERSION_PATTERN = Pattern.compile(Controller.VERSION_PREFIX + "(\\d{1,3})\\.(\\d{1,5})\\.(\\d{1,5})"); @@ -281,6 +282,7 @@ public class RNSPeer { /** Link callbacks */ public void linkEstablished(Link link) { + this.linkEstablishedTime = System.currentTimeMillis(); link.setLinkClosedCallback(this::linkClosed); log.info("peerLink {} established (link: {}) with peer: hash - {}, link destination hash: {}", encodeHexString(peerLink.getLinkId()), encodeHexString(link.getLinkId()), encodeHexString(destinationHash), @@ -374,7 +376,7 @@ public class RNSPeer { //log.info("***> creating message from {} bytes", data.length); Message message = Message.fromByteBuffer(bb); //log.info("*=> type {} message received ({} bytes): {}", message.getType(), data.length, message); - log.info("*=> type {} message received ({} bytes, id: {}", message.getType(), data.length, message.getId()); + log.info("*=> type {} message received ({} bytes, id: {})", message.getType(), data.length, message.getId()); // Handle message based on type switch (message.getType()) { @@ -565,8 +567,6 @@ public class RNSPeer { /** Utility methods */ public void pingRemote() { var link = this.peerLink; - //if (nonNull(link) & (isFalse(link.isInitiator()))) { - //if (nonNull(link) & link.isInitiator()) { if (nonNull(link)) { if (peerLink.getStatus() == ACTIVE) { log.info("pinging remote (direct, 1 packet): {}", encodeHexString(link.getLinkId())); @@ -879,4 +879,16 @@ public class RNSPeer { public List getPendingSignatureRequests() { return this.pendingSignatureRequests; } + + // Details used by API + public long getConnectionEstablishedTime() { + return linkEstablishedTime; + } + + public long getConnectionAge() { + if (linkEstablishedTime > 0L) { + return System.currentTimeMillis() - linkEstablishedTime; + } + return linkEstablishedTime; + } }