diff --git a/library/libwaku.h b/library/libwaku.h index 7a16c9d65..a95cbda90 100644 --- a/library/libwaku.h +++ b/library/libwaku.h @@ -150,6 +150,10 @@ int waku_disconnect_peer_by_id(void* ctx, WakuCallBack callback, void* userData); +int waku_disconnect_all_peers(void* ctx, + WakuCallBack callback, + void* userData); + int waku_dial_peer(void* ctx, const char* peerMultiAddr, const char* protocol, diff --git a/library/libwaku.nim b/library/libwaku.nim index 5d8252225..69d523d14 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -580,6 +580,20 @@ proc waku_disconnect_peer_by_id( userData, ) +proc waku_disconnect_all_peers( + ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer +): cint {.dynlib, exportc.} = + initializeLibrary() + checkLibwakuParams(ctx, callback, userData) + + handleRequest( + ctx, + RequestType.PEER_MANAGER, + PeerManagementRequest.createShared(op = PeerManagementMsgType.DISCONNECT_ALL_PEERS), + callback, + userData, + ) + proc waku_dial_peer( ctx: ptr WakuContext, peerMultiAddr: cstring, diff --git a/library/waku_thread/inter_thread_communication/requests/peer_manager_request.nim b/library/waku_thread/inter_thread_communication/requests/peer_manager_request.nim index e68e66afe..55728780f 100644 --- a/library/waku_thread/inter_thread_communication/requests/peer_manager_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/peer_manager_request.nim @@ -12,6 +12,7 @@ type PeerManagementMsgType* {.pure.} = enum GET_CONNECTED_PEERS_INFO GET_PEER_IDS_BY_PROTOCOL DISCONNECT_PEER_BY_ID + DISCONNECT_ALL_PEERS DIAL_PEER DIAL_PEER_BY_ID GET_CONNECTED_PEERS @@ -121,6 +122,16 @@ proc process*( return err($error) await waku.node.peerManager.disconnectNode(peerId) return ok("") + of DISCONNECT_ALL_PEERS: + let connectedPeers = waku.node.peerManager.switch.peerStore.peers().filterIt( + it.connectedness == Connected + ) + + var futs: seq[Future[void]] + for peer in connectedPeers: + futs.add(waku.node.peerManager.disconnectNode(peer)) + await allFutures(futs) + return ok("") of DIAL_PEER: let remotePeerInfo = parsePeerInfo($self[].peerMultiAddr).valueOr: error "DIAL_PEER failed", error = $error