2026-06-25 00:40:02 +02:00
|
|
|
import std/[strutils, tables, json]
|
|
|
|
|
import chronicles, chronos, results, ffi
|
|
|
|
|
import logos_delivery, library/declare_lib
|
2025-12-19 17:00:43 +01:00
|
|
|
|
|
|
|
|
type PeerInfo = object
|
|
|
|
|
protocols: seq[string]
|
|
|
|
|
addresses: seq[string]
|
|
|
|
|
|
|
|
|
|
proc waku_get_peerids_from_peerstore(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
|
2025-12-19 17:00:43 +01:00
|
|
|
) {.ffi.} =
|
|
|
|
|
## returns a comma-separated string of peerIDs
|
2026-06-25 00:40:02 +02:00
|
|
|
let peerIds = (await ctx.myLib[].waku.peerIdsFromPeerstore()).valueOr:
|
|
|
|
|
return err(error)
|
|
|
|
|
return ok(peerIds.join(","))
|
2025-12-19 17:00:43 +01:00
|
|
|
|
|
|
|
|
proc waku_connect(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery],
|
2025-12-19 17:00:43 +01:00
|
|
|
callback: FFICallBack,
|
|
|
|
|
userData: pointer,
|
|
|
|
|
peerMultiAddr: cstring,
|
|
|
|
|
timeoutMs: cuint,
|
|
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
let peers = ($peerMultiAddr).split(",")
|
|
|
|
|
(await ctx.myLib[].waku.connect(peers, uint32(timeoutMs))).isOkOr:
|
|
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok("")
|
|
|
|
|
|
|
|
|
|
proc waku_disconnect_peer_by_id(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery],
|
|
|
|
|
callback: FFICallBack,
|
|
|
|
|
userData: pointer,
|
|
|
|
|
peerId: cstring,
|
2025-12-19 17:00:43 +01:00
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
(await ctx.myLib[].waku.disconnectPeerById($peerId)).isOkOr:
|
|
|
|
|
error "DISCONNECT_PEER_BY_ID failed", error = error
|
|
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok("")
|
|
|
|
|
|
|
|
|
|
proc waku_disconnect_all_peers(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
|
2025-12-19 17:00:43 +01:00
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
(await ctx.myLib[].waku.disconnectAllPeers()).isOkOr:
|
|
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok("")
|
|
|
|
|
|
|
|
|
|
proc waku_dial_peer(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery],
|
2025-12-19 17:00:43 +01:00
|
|
|
callback: FFICallBack,
|
|
|
|
|
userData: pointer,
|
|
|
|
|
peerMultiAddr: cstring,
|
|
|
|
|
protocol: cstring,
|
|
|
|
|
timeoutMs: cuint,
|
|
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
(await ctx.myLib[].waku.dialPeer($peerMultiAddr, $protocol, int(timeoutMs))).isOkOr:
|
|
|
|
|
error "DIAL_PEER failed", error = error
|
|
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok("")
|
|
|
|
|
|
|
|
|
|
proc waku_dial_peer_by_id(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery],
|
2025-12-19 17:00:43 +01:00
|
|
|
callback: FFICallBack,
|
|
|
|
|
userData: pointer,
|
|
|
|
|
peerId: cstring,
|
|
|
|
|
protocol: cstring,
|
|
|
|
|
timeoutMs: cuint,
|
|
|
|
|
) {.ffi.} =
|
2026-06-25 00:40:02 +02:00
|
|
|
(await ctx.myLib[].waku.dialPeerById($peerId, $protocol, int(timeoutMs))).isOkOr:
|
|
|
|
|
error "DIAL_PEER_BY_ID failed", error = error
|
|
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
return ok("")
|
|
|
|
|
|
|
|
|
|
proc waku_get_connected_peers_info(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
|
2025-12-19 17:00:43 +01:00
|
|
|
) {.ffi.} =
|
|
|
|
|
## returns a JSON string mapping peerIDs to objects with protocols and addresses
|
2026-06-25 00:40:02 +02:00
|
|
|
let peers = (await ctx.myLib[].waku.connectedPeersInfo()).valueOr:
|
|
|
|
|
return err(error)
|
2025-12-19 17:00:43 +01:00
|
|
|
|
|
|
|
|
var peersMap = initTable[string, PeerInfo]()
|
|
|
|
|
for peer in peers:
|
2026-06-25 00:40:02 +02:00
|
|
|
peersMap[peer.peerId] =
|
|
|
|
|
PeerInfo(protocols: peer.protocols, addresses: peer.addresses)
|
2025-12-19 17:00:43 +01:00
|
|
|
|
2026-06-25 00:40:02 +02:00
|
|
|
return ok($(%*peersMap))
|
2025-12-19 17:00:43 +01:00
|
|
|
|
|
|
|
|
proc waku_get_connected_peers(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery], callback: FFICallBack, userData: pointer
|
2025-12-19 17:00:43 +01:00
|
|
|
) {.ffi.} =
|
|
|
|
|
## returns a comma-separated string of peerIDs
|
2026-06-25 00:40:02 +02:00
|
|
|
let peerIds = (await ctx.myLib[].waku.connectedPeers()).valueOr:
|
|
|
|
|
return err(error)
|
|
|
|
|
return ok(peerIds.join(","))
|
2025-12-19 17:00:43 +01:00
|
|
|
|
|
|
|
|
proc waku_get_peerids_by_protocol(
|
2026-06-23 01:20:09 +02:00
|
|
|
ctx: ptr FFIContext[LogosDelivery],
|
2025-12-19 17:00:43 +01:00
|
|
|
callback: FFICallBack,
|
|
|
|
|
userData: pointer,
|
|
|
|
|
protocol: cstring,
|
|
|
|
|
) {.ffi.} =
|
|
|
|
|
## returns a comma-separated string of peerIDs that mount the given protocol
|
2026-06-25 00:40:02 +02:00
|
|
|
let peerIds = (await ctx.myLib[].waku.peerIdsByProtocol($protocol)).valueOr:
|
|
|
|
|
return err(error)
|
|
|
|
|
return ok(peerIds.join(","))
|