mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-06-26 11:29:28 +00:00
* Move waku.nim from waku/factory to under waku/ * remove unused * Realize Kernel API in scope of Waku class * Refactor waku/api into messaging_client, waku/api/types and api_conf into logos_delivery/api * Make liblogosdelivery and wakunode2 compile, remove waku/api.nim as it was just a import orchestrator * make test compile and run * Reconcile master's new send tests to LogosDelivery API after rebase master commits #3965/#3669-followup added two test cases (Edge lightpush delivery #3847, store-validation timeout) written against the removed waku/api.nim createNode helper. Rewrite them to the LogosDelivery shape: createNode -> LogosDelivery.new, node.node -> node.waku.node, node.brokerCtx -> node.waku.brokerCtx, node.send -> node.messagingClient.send, and drop the now-implicit mountMessagingClient calls (LogosDelivery.new mounts the client internally).
45 lines
1.5 KiB
Nim
45 lines
1.5 KiB
Nim
import std/[json, strutils]
|
|
import chronos, results, ffi
|
|
import libp2p/[protocols/ping, switch, multiaddress, multicodec]
|
|
import logos_delivery/waku/[waku, waku_core/peers, node/waku_node], library/declare_lib
|
|
|
|
proc waku_ping_peer(
|
|
ctx: ptr FFIContext[LogosDelivery],
|
|
callback: FFICallBack,
|
|
userData: pointer,
|
|
peerAddr: cstring,
|
|
timeoutMs: cuint,
|
|
) {.ffi.} =
|
|
let peerInfo = peers.parsePeerInfo(($peerAddr).split(",")).valueOr:
|
|
return err("PingRequest failed to parse peer addr: " & $error)
|
|
|
|
let timeout = chronos.milliseconds(timeoutMs)
|
|
proc ping(): Future[Result[Duration, string]] {.async, gcsafe.} =
|
|
try:
|
|
let conn = await ctx.myLib[].waku.node.switch.dial(
|
|
peerInfo.peerId, peerInfo.addrs, PingCodec
|
|
)
|
|
defer:
|
|
await conn.close()
|
|
|
|
let pingRTT = await ctx.myLib[].waku.node.libp2pPing.ping(conn)
|
|
if pingRTT == 0.nanos:
|
|
return err("could not ping peer: rtt-0")
|
|
return ok(pingRTT)
|
|
except CatchableError as exc:
|
|
return err("could not ping peer: " & exc.msg)
|
|
|
|
let pingFuture = ping()
|
|
let pingRTT: Duration =
|
|
if timeout == chronos.milliseconds(0): # No timeout expected
|
|
(await pingFuture).valueOr:
|
|
return err("ping failed, no timeout expected: " & error)
|
|
else:
|
|
let timedOut = not (await pingFuture.withTimeout(timeout))
|
|
if timedOut:
|
|
return err("ping timed out")
|
|
pingFuture.read().valueOr:
|
|
return err("failed to read ping future: " & error)
|
|
|
|
return ok($(pingRTT.nanos))
|