diff --git a/apps/wakucanary/README.md b/apps/wakucanary/README.md index 11408234b..30e1c2504 100644 --- a/apps/wakucanary/README.md +++ b/apps/wakucanary/README.md @@ -32,21 +32,31 @@ $ make wakucanary And used as follows. A reachable node that supports both `store` and `filter` protocols. ```console -$ ./build/wakucanary --address=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV --protocol=store --protocol=filter +$ ./build/wakucanary \ + --address=/dns4/store-01.do-ams3.status.staging.status.im/tcp/30303/p2p/16Uiu2HAm3xVDaz6SRJ6kErwC21zBJEZjavVXg7VSkoWzaV1aMA3F \ + --protocol=store \ + --protocol=filter \ + --cluster-id=16 \ + --shard=64 $ echo $? 0 ``` A node that can't be reached. ```console -$ ./build/wakucanary --address=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/1000/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV --protocol=store --protocol=filter +$ ./build/wakucanary \ + --address=/dns4/store-01.do-ams3.status.staging.status.im/tcp/1000/p2p/16Uiu2HAm3xVDaz6SRJ6kErwC21zBJEZjavVXg7VSkoWzaV1aMA3F \ + --protocol=store \ + --protocol=filter \ + --cluster-id=16 \ + --shard=64 $ echo $? 1 ``` Note that a domain name can also be used. ```console -$ ./build/wakucanary --address=/dns4/node-01.do-ams3.status.test.status.im/tcp/30303/p2p/16Uiu2HAkukebeXjTQ9QDBeNDWuGfbaSg79wkkhK4vPocLgR6QFDf --protocol=store --protocol=filter +--- not defined yet $ echo $? 0 ``` diff --git a/apps/wakucanary/scripts/run_waku_canary.sh b/apps/wakucanary/scripts/run_waku_canary.sh new file mode 100755 index 000000000..ad74b0192 --- /dev/null +++ b/apps/wakucanary/scripts/run_waku_canary.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +#this script build the canary app and make basic run to connect to well-known peer via TCP . +set -e + +PEER_ADDRESS="/dns4/store-01.do-ams3.status.staging.status.im/tcp/30303/p2p/16Uiu2HAm3xVDaz6SRJ6kErwC21zBJEZjavVXg7VSkoWzaV1aMA3F" +PROTOCOL="relay" +LOG_DIR="logs" +CLUSTER="16" +SHARD="64" +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +LOG_FILE="$LOG_DIR/canary_run_$TIMESTAMP.log" + +mkdir -p "$LOG_DIR" + +echo "Building Waku Canary app..." +( cd ../../../ && make wakucanary ) >> "$LOG_FILE" 2>&1 + +echo "Running Waku Canary against:" +echo " Peer : $PEER_ADDRESS" +echo " Protocol: $PROTOCOL" +echo "Log file : $LOG_FILE" +echo "-----------------------------------" + +{ + echo "=== Canary Run: $TIMESTAMP ===" + echo "Peer : $PEER_ADDRESS" + echo "Protocol : $PROTOCOL" + echo "LogLevel : DEBUG" + echo "-----------------------------------" + ../../../build/wakucanary \ + --address="$PEER_ADDRESS" \ + --protocol="$PROTOCOL" \ + --cluster-id="$CLUSTER"\ + --shard="$SHARD"\ + --log-level=DEBUG + echo "-----------------------------------" + echo "Exit code: $?" +} 2>&1 | tee "$LOG_FILE" + +EXIT_CODE=${PIPESTATUS[0]} + + +if [ $EXIT_CODE -eq 0 ]; then + echo "SUCCESS: Connected to peer and protocol '$PROTOCOL' is supported." +else + echo "FAILURE: Could not connect or protocol '$PROTOCOL' is unsupported." +fi + +exit $EXIT_CODE diff --git a/apps/wakucanary/scripts/test_protocols.sh b/apps/wakucanary/scripts/test_protocols.sh new file mode 100755 index 000000000..599ea729e --- /dev/null +++ b/apps/wakucanary/scripts/test_protocols.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# === Configuration === +WAKUCANARY_BINARY="../../../build/wakucanary" +PEER_ADDRESS="/dns4/store-01.do-ams3.status.staging.status.im/tcp/30303/p2p/16Uiu2HAm3xVDaz6SRJ6kErwC21zBJEZjavVXg7VSkoWzaV1aMA3F" +TIMEOUT=5 +LOG_LEVEL="info" +PROTOCOLS=("store" "relay" "lightpush" "filter") + +# === Logging Setup === +LOG_DIR="logs" +mkdir -p "$LOG_DIR" +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +LOG_FILE="$LOG_DIR/ping_test_$TIMESTAMP.log" + +echo "Building Waku Canary app..." +( cd ../../../ && make wakucanary ) >> "$LOG_FILE" 2>&1 + +echo "Protocol Support Test - $TIMESTAMP" | tee -a "$LOG_FILE" +echo "Peer: $PEER_ADDRESS" | tee -a "$LOG_FILE" +echo "---------------------------------------" | tee -a "$LOG_FILE" + +# === Protocol Testing Loop === +for PROTOCOL in "${PROTOCOLS[@]}"; do + TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") + LOG_FILE="$LOG_DIR/ping_test_${PROTOCOL}_$TIMESTAMP.log" + + { + echo "=== Canary Run: $TIMESTAMP ===" + echo "Peer : $PEER_ADDRESS" + echo "Protocol : $PROTOCOL" + echo "LogLevel : DEBUG" + echo "-----------------------------------" + $WAKUCANARY_BINARY \ + --address="$PEER_ADDRESS" \ + --protocol="$PROTOCOL" \ + --log-level=DEBUG + echo "-----------------------------------" + echo "Exit code: $?" + } 2>&1 | tee "$LOG_FILE" + + echo "✅ Log saved to: $LOG_FILE" + echo "" +done + +echo "All protocol checks completed. Log saved to: $LOG_FILE" diff --git a/apps/wakucanary/scripts/web_socket.sh b/apps/wakucanary/scripts/web_socket.sh new file mode 100755 index 000000000..59b609da5 --- /dev/null +++ b/apps/wakucanary/scripts/web_socket.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +#this script build the canary app and make basic run to connect to well-known peer via TCP . +set -e + +PEER_ADDRESS="/ip4/127.0.0.1/tcp/7777/ws/p2p/16Uiu2HAm4ng2DaLPniRoZtMQbLdjYYWnXjrrJkGoXWCoBWAdn1tu" +PROTOCOL="relay" +LOG_DIR="logs" +CLUSTER="16" +SHARD="64" +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +LOG_FILE="$LOG_DIR/canary_run_$TIMESTAMP.log" + +mkdir -p "$LOG_DIR" + +echo "Building Waku Canary app..." +( cd ../../../ && make wakucanary ) >> "$LOG_FILE" 2>&1 + + +echo "Running Waku Canary against:" +echo " Peer : $PEER_ADDRESS" +echo " Protocol: $PROTOCOL" +echo "Log file : $LOG_FILE" +echo "-----------------------------------" + +{ + echo "=== Canary Run: $TIMESTAMP ===" + echo "Peer : $PEER_ADDRESS" + echo "Protocol : $PROTOCOL" + echo "LogLevel : DEBUG" + echo "-----------------------------------" + ../../../build/wakucanary \ + --address="$PEER_ADDRESS" \ + --protocol="$PROTOCOL" \ + --cluster-id="$CLUSTER"\ + --shard="$SHARD"\ + --log-level=DEBUG + echo "-----------------------------------" + echo "Exit code: $?" +} 2>&1 | tee "$LOG_FILE" + +EXIT_CODE=${PIPESTATUS[0]} + + +if [ $EXIT_CODE -eq 0 ]; then + echo "SUCCESS: Connected to peer and protocol '$PROTOCOL' is supported." +else + echo "FAILURE: Could not connect or protocol '$PROTOCOL' is unsupported." +fi + +exit $EXIT_CODE diff --git a/apps/wakucanary/scripts/web_socket_certitficate.sh b/apps/wakucanary/scripts/web_socket_certitficate.sh new file mode 100644 index 000000000..4a26cfd09 --- /dev/null +++ b/apps/wakucanary/scripts/web_socket_certitficate.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +WAKUCANARY_BINARY="../../../build/wakucanary" +NODE_PORT=60000 +WSS_PORT=$((NODE_PORT + 1000)) +PEER_ID="16Uiu2HAmB6JQpewXScGoQ2syqmimbe4GviLxRwfsR8dCpwaGBPSE" +PROTOCOL="relay" +KEY_PATH="./certs/client.key" +CERT_PATH="./certs/client.crt" +LOG_DIR="logs" +mkdir -p "$LOG_DIR" + +PEER_ADDRESS="/ip4/127.0.0.1/tcp/$WSS_PORT/wss/p2p/$PEER_ID" +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +LOG_FILE="$LOG_DIR/wss_cert_test_$TIMESTAMP.log" + +echo "Building Waku Canary app..." +( cd ../../../ && make wakucanary ) >> "$LOG_FILE" 2>&1 + +{ + echo "=== Canary WSS + Cert Test ===" + echo "Timestamp : $TIMESTAMP" + echo "Node Port : $NODE_PORT" + echo "WSS Port : $WSS_PORT" + echo "Peer ID : $PEER_ID" + echo "Protocol : $PROTOCOL" + echo "Key Path : $KEY_PATH" + echo "Cert Path : $CERT_PATH" + echo "Address : $PEER_ADDRESS" + echo "------------------------------------------" + + $WAKUCANARY_BINARY \ + --address="$PEER_ADDRESS" \ + --protocol="$PROTOCOL" \ + --log-level=DEBUG \ + --websocket-secure-key-path="$KEY_PATH" \ + --websocket-secure-cert-path="$CERT_PATH" + + echo "------------------------------------------" + echo "Exit code: $?" +} 2>&1 | tee "$LOG_FILE" + +echo "✅ Log saved to: $LOG_FILE" diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index 1f6f0256a..35ac8a2e2 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -298,6 +298,7 @@ int main(int argc, char** argv) { snprintf(jsonConfig, 5000, "{ \ \"clusterId\": 16, \ \"shards\": [ 1, 32, 64, 128, 256 ], \ + \"numShardsInNetwork\": 257, \ \"listenAddress\": \"%s\", \ \"tcpPort\": %d, \ \"relay\": %s, \ diff --git a/examples/waku_example.nim b/examples/waku_example.nim index 03964ca7c..ebac0b466 100644 --- a/examples/waku_example.nim +++ b/examples/waku_example.nim @@ -16,7 +16,9 @@ when isMainModule: if (args.ethRpcEndpoint == ""): # Create a basic configuration for the Waku node # No RLN as we don't have an ETH RPC Endpoint - NodeConfig.init(wakuConfig = WakuConfig.init(entryNodes = @[], clusterId = 42)) + NodeConfig.init( + protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 42) + ) else: # Connect to TWN, use ETH RPC Endpoint for RLN NodeConfig.init(ethRpcEndpoints = @[args.ethRpcEndpoint]) diff --git a/library/waku_context.nim b/library/waku_context.nim index 6716013c9..c227551be 100644 --- a/library/waku_context.nim +++ b/library/waku_context.nim @@ -5,6 +5,7 @@ import std/[options, atomics, os, net, locks] import chronicles, chronos, chronos/threadsync, taskpools/channels_spsc_single, results import + waku/common/logging, waku/factory/waku, waku/node/peer_manager, waku/waku_relay/[protocol, topic_health], @@ -155,6 +156,8 @@ proc watchdogThreadBody(ctx: ptr WakuContext) {.thread.} = proc wakuThreadBody(ctx: ptr WakuContext) {.thread.} = ## Waku thread that attends library user requests (stop, connect_to, etc.) + logging.setupLog(logging.LogLevel.DEBUG, logging.LogFormat.TEXT) + let wakuRun = proc(ctx: ptr WakuContext) {.async.} = var waku: Waku while true: diff --git a/tests/api/test_node_conf.nim b/tests/api/test_node_conf.nim index c9b256d42..232ffc7d2 100644 --- a/tests/api/test_node_conf.nim +++ b/tests/api/test_node_conf.nim @@ -23,9 +23,9 @@ suite "LibWaku Conf - toWakuConf": test "Core mode configuration": ## Given - let wakuConfig = WakuConfig.init(entryNodes = @[], clusterId = 1) + let protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 1) - let nodeConfig = NodeConfig.init(mode = Core, wakuConfig = wakuConfig) + let nodeConfig = NodeConfig.init(mode = Core, protocolsConfig = protocolsConfig) ## When let wakuConfRes = toWakuConf(nodeConfig) @@ -44,7 +44,7 @@ suite "LibWaku Conf - toWakuConf": ## Given let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[], staticStoreNodes = @[], clusterId = 42, @@ -72,8 +72,9 @@ suite "LibWaku Conf - toWakuConf": ] let libConf = NodeConfig.init( mode = Core, - wakuConfig = - WakuConfig.init(entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1), + protocolsConfig = ProtocolsConfig.init( + entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1 + ), ) ## When @@ -95,7 +96,7 @@ suite "LibWaku Conf - toWakuConf": "/ip4/192.168.1.1/tcp/60001/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYd", ] let nodeConf = NodeConfig.init( - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[], staticStoreNodes = staticStoreNodes, clusterId = 1 ) ) @@ -113,7 +114,7 @@ suite "LibWaku Conf - toWakuConf": test "Message validation with max message size": ## Given let nodeConfig = NodeConfig.init( - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[], staticStoreNodes = @[], clusterId = 1, @@ -135,7 +136,7 @@ suite "LibWaku Conf - toWakuConf": test "Message validation with RLN config": ## Given let nodeConfig = NodeConfig.init( - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[], clusterId = 1, messageValidation = MessageValidation( @@ -174,7 +175,7 @@ suite "LibWaku Conf - toWakuConf": ## Given let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[ "enr:-QESuEC1p_s3xJzAC_XlOuuNrhVUETmfhbm1wxRGis0f7DlqGSw2FM-p2Vn7gmfkTTnAe8Ys2cgGBN8ufJnvzKQFZqFMBgmlkgnY0iXNlY3AyNTZrMaEDS8-D878DrdbNwcuY-3p1qdDp5MOoCurhdsNPJTXZ3c5g3RjcIJ2X4N1ZHCCd2g" @@ -254,8 +255,9 @@ suite "LibWaku Conf - toWakuConf": let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = - WakuConfig.init(entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1), + protocolsConfig = ProtocolsConfig.init( + entryNodes = entryNodes, staticStoreNodes = @[], clusterId = 1 + ), ) ## When diff --git a/tests/test_waku.nim b/tests/test_waku.nim index defec1222..b8e2b26b1 100644 --- a/tests/test_waku.nim +++ b/tests/test_waku.nim @@ -7,8 +7,9 @@ import waku suite "Waku API - Create node": asyncTest "Create node with minimal configuration": ## Given - let nodeConfig = - NodeConfig.init(wakuConfig = WakuConfig.init(entryNodes = @[], clusterId = 1)) + let nodeConfig = NodeConfig.init( + protocolsConfig = ProtocolsConfig.init(entryNodes = @[], clusterId = 1) + ) # This is the actual minimal config but as the node auto-start, it is not suitable for tests # NodeConfig.init(ethRpcEndpoints = @["http://someaddress"]) @@ -27,7 +28,7 @@ suite "Waku API - Create node": ## Given let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[ "enr:-QESuEC1p_s3xJzAC_XlOuuNrhVUETmfhbm1wxRGis0f7DlqGSw2FM-p2Vn7gmfkTTnAe8Ys2cgGBN8ufJnvzKQFZqFMBgmlkgnY0iXNlY3AyNTZrMaEDS8-D878DrdbNwcuY-3p1qdDp5MOoCurhdsNPJTXZ3c5g3RjcIJ2X4N1ZHCCd2g" @@ -63,7 +64,7 @@ suite "Waku API - Create node": ## Given let nodeConfig = NodeConfig.init( mode = Core, - wakuConfig = WakuConfig.init( + protocolsConfig = ProtocolsConfig.init( entryNodes = @[ "enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im", diff --git a/waku/api/api_conf.nim b/waku/api/api_conf.nim index 360c397af..155554dfd 100644 --- a/waku/api/api_conf.nim +++ b/waku/api/api_conf.nim @@ -26,7 +26,7 @@ type MessageValidation* {.requiresInit.} = object maxMessageSize*: string # Accepts formats like "150 KiB", "1500 B" rlnConfig*: Option[RlnConfig] -type WakuConfig* {.requiresInit.} = object +type ProtocolsConfig* {.requiresInit.} = object entryNodes: seq[string] staticStoreNodes: seq[string] clusterId: uint16 @@ -42,7 +42,7 @@ const DefaultMessageValidation* = MessageValidation(maxMessageSize: "150 KiB", rlnConfig: none(RlnConfig)) proc init*( - T: typedesc[WakuConfig], + T: typedesc[ProtocolsConfig], entryNodes: seq[string], staticStoreNodes: seq[string] = @[], clusterId: uint16, @@ -57,7 +57,7 @@ proc init*( messageValidation: messageValidation, ) -const TheWakuNetworkPreset* = WakuConfig( +const TheWakuNetworkPreset* = ProtocolsConfig( entryNodes: @[ "enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im" @@ -83,20 +83,20 @@ type WakuMode* {.pure.} = enum type NodeConfig* {.requiresInit.} = object mode: WakuMode - wakuConfig: WakuConfig + protocolsConfig: ProtocolsConfig networkingConfig: NetworkingConfig ethRpcEndpoints: seq[string] proc init*( T: typedesc[NodeConfig], mode: WakuMode = WakuMode.Core, - wakuConfig: WakuConfig = TheWakuNetworkPreset, + protocolsConfig: ProtocolsConfig = TheWakuNetworkPreset, networkingConfig: NetworkingConfig = DefaultNetworkingConfig, ethRpcEndpoints: seq[string] = @[], ): T = return T( mode: mode, - wakuConfig: wakuConfig, + protocolsConfig: protocolsConfig, networkingConfig: networkingConfig, ethRpcEndpoints: ethRpcEndpoints, ) @@ -134,20 +134,20 @@ proc toWakuConf*(nodeConfig: NodeConfig): Result[WakuConf, string] = return err("Edge mode is not implemented") ## Network Conf - let wakuConfig = nodeConfig.wakuConfig + let protocolsConfig = nodeConfig.protocolsConfig # Set cluster ID - b.withClusterId(wakuConfig.clusterId) + b.withClusterId(protocolsConfig.clusterId) # Set sharding configuration b.withShardingConf(ShardingConfKind.AutoSharding) - let autoShardingConfig = wakuConfig.autoShardingConfig + let autoShardingConfig = protocolsConfig.autoShardingConfig b.withNumShardsInCluster(autoShardingConfig.numShardsInCluster) # Process entry nodes - supports enrtree:, enr:, and multiaddress formats - if wakuConfig.entryNodes.len > 0: + if protocolsConfig.entryNodes.len > 0: let (enrTreeUrls, bootstrapEnrs, staticNodesFromEntry) = processEntryNodes( - wakuConfig.entryNodes + protocolsConfig.entryNodes ).valueOr: return err("Failed to process entry nodes: " & error) @@ -169,11 +169,11 @@ proc toWakuConf*(nodeConfig: NodeConfig): Result[WakuConf, string] = # TODO: verify behaviour # Set static store nodes - if wakuConfig.staticStoreNodes.len > 0: - b.withStaticNodes(wakuConfig.staticStoreNodes) + if protocolsConfig.staticStoreNodes.len > 0: + b.withStaticNodes(protocolsConfig.staticStoreNodes) # Set message validation - let msgValidation = wakuConfig.messageValidation + let msgValidation = protocolsConfig.messageValidation let maxSizeBytes = parseMsgSize(msgValidation.maxMessageSize).valueOr: return err("Failed to parse max message size: " & error) b.withMaxMessageSize(maxSizeBytes) diff --git a/waku/waku_filter_v2/client.nim b/waku/waku_filter_v2/client.nim index 2ad275a94..a1899764c 100644 --- a/waku/waku_filter_v2/client.nim +++ b/waku/waku_filter_v2/client.nim @@ -58,6 +58,9 @@ proc sendSubscribeRequest( let connection = connOpt.get() + defer: + await connection.closeWithEOF() + try: await connection.writeLP(filterSubscribeRequest.encode().buffer) except CatchableError: diff --git a/waku/waku_filter_v2/protocol.nim b/waku/waku_filter_v2/protocol.nim index 8b419c300..9b4fe812e 100644 --- a/waku/waku_filter_v2/protocol.nim +++ b/waku/waku_filter_v2/protocol.nim @@ -293,6 +293,9 @@ proc initProtocolHandler(wf: WakuFilter) = var response: FilterSubscribeResponse + defer: + await conn.closeWithEOF() + wf.peerRequestRateLimiter.checkUsageLimit(WakuFilterSubscribeCodec, conn): var buf: seq[byte] try: diff --git a/waku/waku_lightpush/client.nim b/waku/waku_lightpush/client.nim index 2d5ba4899..4d0c49a84 100644 --- a/waku/waku_lightpush/client.nim +++ b/waku/waku_lightpush/client.nim @@ -43,6 +43,9 @@ proc sendPushRequest( dialFailure & ": " & $peer & " is not accessible", ) + defer: + await connection.closeWithEOF() + await connection.writeLP(req.encode().buffer) var buffer: seq[byte] diff --git a/waku/waku_lightpush/protocol.nim b/waku/waku_lightpush/protocol.nim index 955b1ade5..e7e66d618 100644 --- a/waku/waku_lightpush/protocol.nim +++ b/waku/waku_lightpush/protocol.nim @@ -107,6 +107,9 @@ proc handleRequest*( proc initProtocolHandler(wl: WakuLightPush) = proc handler(conn: Connection, proto: string) {.async: (raises: [CancelledError]).} = var rpc: LightPushResponse + defer: + await conn.closeWithEOF() + wl.requestRateLimiter.checkUsageLimit(WakuLightPushCodec, conn): var buffer: seq[byte] try: diff --git a/waku/waku_lightpush_legacy/client.nim b/waku/waku_lightpush_legacy/client.nim index 503cbe1eb..ee234c996 100644 --- a/waku/waku_lightpush_legacy/client.nim +++ b/waku/waku_lightpush_legacy/client.nim @@ -40,6 +40,9 @@ proc sendPushRequest( return err(dialFailure) let connection = connOpt.get() + defer: + await connection.closeWithEOF() + let rpc = PushRPC(requestId: generateRequestId(wl.rng), request: some(req)) await connection.writeLP(rpc.encode().buffer) diff --git a/waku/waku_lightpush_legacy/protocol.nim b/waku/waku_lightpush_legacy/protocol.nim index 75bededaf..e60913f0f 100644 --- a/waku/waku_lightpush_legacy/protocol.nim +++ b/waku/waku_lightpush_legacy/protocol.nim @@ -67,6 +67,9 @@ proc handleRequest*( proc initProtocolHandler(wl: WakuLegacyLightPush) = proc handler(conn: Connection, proto: string) {.async: (raises: [CancelledError]).} = var rpc: PushRPC + defer: + await conn.closeWithEOF() + wl.requestRateLimiter.checkUsageLimit(WakuLegacyLightPushCodec, conn): var buffer: seq[byte] try: diff --git a/waku/waku_peer_exchange/protocol.nim b/waku/waku_peer_exchange/protocol.nim index f3f8629c8..9d5a02ddc 100644 --- a/waku/waku_peer_exchange/protocol.nim +++ b/waku/waku_peer_exchange/protocol.nim @@ -176,8 +176,8 @@ proc initProtocolHandler(wpx: WakuPeerExchange) = return let enrs = wpx.getEnrsFromCache(decBuf.get().request.numPeers) - debug "peer exchange request received", enrs = $enrs - + debug "peer exchange request received" + trace "px enrs to respond", enrs = $enrs try: (await wpx.respond(enrs, conn)).isErrOr: waku_px_peers_sent.inc(enrs.len().int64()) diff --git a/waku/waku_store/client.nim b/waku/waku_store/client.nim index 27e92ab86..308d7f98e 100644 --- a/waku/waku_store/client.nim +++ b/waku/waku_store/client.nim @@ -25,6 +25,9 @@ proc sendStoreRequest( ): Future[StoreQueryResult] {.async, gcsafe.} = var req = request + defer: + await connection.closeWithEof() + if req.requestId == "": req.requestId = generateRequestId(self.rng) diff --git a/waku/waku_store/protocol.nim b/waku/waku_store/protocol.nim index 5e13c9a77..5ec9d507b 100644 --- a/waku/waku_store/protocol.nim +++ b/waku/waku_store/protocol.nim @@ -92,6 +92,10 @@ proc initProtocolHandler(self: WakuStore) = var successfulQuery = false ## only consider the correct queries in metrics var resBuf: StoreResp var queryDuration: float + + defer: + await conn.closeWithEof() + self.requestRateLimiter.checkUsageLimit(WakuStoreCodec, conn): let readRes = catch: await conn.readLp(DefaultMaxRpcSize.int) diff --git a/waku/waku_store_legacy/client.nim b/waku/waku_store_legacy/client.nim index f26906e9e..7d7fbb601 100644 --- a/waku/waku_store_legacy/client.nim +++ b/waku/waku_store_legacy/client.nim @@ -43,6 +43,9 @@ proc sendHistoryQueryRPC( let connection = connOpt.get() + defer: + await connection.closeWithEof() + let requestId = if req.requestId != "": req.requestId diff --git a/waku/waku_store_legacy/protocol.nim b/waku/waku_store_legacy/protocol.nim index 79d0f03a1..9b1e328b7 100644 --- a/waku/waku_store_legacy/protocol.nim +++ b/waku/waku_store_legacy/protocol.nim @@ -114,6 +114,10 @@ proc initProtocolHandler(ws: WakuStore) = var successfulQuery = false ## only consider the correct queries in metrics var resBuf: StoreResp var queryDuration: float + + defer: + await conn.closeWithEof() + ws.requestRateLimiter.checkUsageLimit(WakuLegacyStoreCodec, conn): let readRes = catch: await conn.readLp(DefaultMaxRpcSize.int)