From a26638bc9effd75135d78ef31aedce228ff1c772 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Wed, 6 May 2026 18:31:19 +0400 Subject: [PATCH] Fix minor issues --- .../private/eth/p2p/discoveryv5/messages_encoding.nim | 2 +- codexdht/private/eth/p2p/discoveryv5/transport.nim | 3 ++- tests/discv5/test_discoveryv5.nim | 10 ++++------ tests/discv5/test_discoveryv5_encoding.nim | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/codexdht/private/eth/p2p/discoveryv5/messages_encoding.nim b/codexdht/private/eth/p2p/discoveryv5/messages_encoding.nim index b0d1843..bb42e96 100644 --- a/codexdht/private/eth/p2p/discoveryv5/messages_encoding.nim +++ b/codexdht/private/eth/p2p/discoveryv5/messages_encoding.nim @@ -361,7 +361,7 @@ proc decodeMessage*(body: openArray[byte]): DecodeResult[Message] = if pb.getField(3, clientModeField).isErr: return err("Invalid clientMode field") - message.clientMode = clientModeField != 0 + message.clientMode = clientModeField == 1 case kind of unused: return err("Invalid message type") diff --git a/codexdht/private/eth/p2p/discoveryv5/transport.nim b/codexdht/private/eth/p2p/discoveryv5/transport.nim index cdeb964..d572e3b 100644 --- a/codexdht/private/eth/p2p/discoveryv5/transport.nim +++ b/codexdht/private/eth/p2p/discoveryv5/transport.nim @@ -236,7 +236,8 @@ proc receive*(t: Transport, a: Address, packet: openArray[byte]) = if packet.message.clientMode: t.client.routingTable.removeNode(node) else: - discard t.client.addNode(node) + if t.client.addNode(node): + trace "Added new node to routing table after handshake", node, tablesize=t.client.nodesDiscovered() discard t.sendPending(node) else: diff --git a/tests/discv5/test_discoveryv5.nim b/tests/discv5/test_discoveryv5.nim index ccef31f..d7ba4e4 100644 --- a/tests/discv5/test_discoveryv5.nim +++ b/tests/discv5/test_discoveryv5.nim @@ -790,7 +790,7 @@ suite "Discovery v5 Tests": await node1.closeWait() await node2.closeWait() - test "Node is removed from routing table when clientMode is enabled": + test "Node is not added to routing table when clientMode is enabled": let clientNode = initDiscoveryNode(rng, PrivateKey.example(rng), localAddress(20314)) serverNode = initDiscoveryNode(rng, PrivateKey.example(rng), localAddress(20315)) @@ -809,14 +809,12 @@ suite "Discovery v5 Tests": node1 = initDiscoveryNode(rng, PrivateKey.example(rng), localAddress(20318)) node2 = initDiscoveryNode(rng, PrivateKey.example(rng), localAddress(20319)) - # Establish session: node1 is added to node2's routing table discard await discv5_protocol.ping(node1, node2.localNode) + check node2.routingTable.len() == 1 - # node1 switches to client mode node1.clientMode = true - # Second ping uses the existing session (ordinary message, not handshake) discard await discv5_protocol.ping(node1, node2.localNode) check node2.routingTable.len() == 0 @@ -824,12 +822,12 @@ suite "Discovery v5 Tests": await node1.closeWait() await node2.closeWait() - test "Node is removed from routing table when clientMode is enabled during validation": + test "Node is removed from routing table when clientMode is enabled during re-validation": let clientNode = initDiscoveryNode(rng, PrivateKey.example(rng), localAddress(20316)) serverNode = initDiscoveryNode(rng, PrivateKey.example(rng), localAddress(20317)) - # Add client node directly to server routing table + # Add client node directly to routing table check serverNode.addNode(clientNode.localNode) check serverNode.routingTable.len() == 1 diff --git a/tests/discv5/test_discoveryv5_encoding.nim b/tests/discv5/test_discoveryv5_encoding.nim index 1d926f4..e662f3a 100644 --- a/tests/discv5/test_discoveryv5_encoding.nim +++ b/tests/discv5/test_discoveryv5_encoding.nim @@ -189,7 +189,7 @@ suite "Discovery v5.1 Protocol Message Encodings": let p = PingMessage(sprSeq: 1'u64) reqId = RequestId(id: @[1.byte]) - encoded = encodeMessage(p, reqId) # no clientMode field (legacy node) + encoded = encodeMessage(p, reqId) decoded = decodeMessage(encoded) check decoded.isOk() check decoded.get().clientMode == false