From e02c40db803c75dd7a92f3b142cffc8098292a0e Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Thu, 8 Apr 2021 10:09:59 +0200 Subject: [PATCH] Add handler for payment messages --- dagger/bitswap/network.nim | 12 ++++++++++++ dagger/bitswap/protobuf/payments.nim | 1 + tests/dagger/bitswap/testnetwork.nim | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/dagger/bitswap/network.nim b/dagger/bitswap/network.nim index 659da963..2e294cb0 100644 --- a/dagger/bitswap/network.nim +++ b/dagger/bitswap/network.nim @@ -34,12 +34,14 @@ type BlocksHandler* = proc(peer: PeerID, blocks: seq[bt.Block]) {.gcsafe.} BlockPresenceHandler* = proc(peer: PeerID, precense: seq[BlockPresence]) {.gcsafe.} PricingHandler* = proc(peer: PeerID, pricing: Pricing) {.gcsafe.} + PaymentHandler* = proc(peer: PeerID, payment: SignedState) {.gcsafe.} BitswapHandlers* = object onWantList*: WantListHandler onBlocks*: BlocksHandler onPresence*: BlockPresenceHandler onPricing*: PricingHandler + onPayment*: PaymentHandler WantListBroadcaster* = proc( id: PeerID, @@ -206,6 +208,13 @@ proc handlePricing(network: BitswapNetwork, return network.handlers.onPricing(peer.id, pricing) +proc handlePayment(network: BitswapNetwork, + peer: NetworkPeer, + payment: SignedState) = + if network.handlers.onPayment.isNil: + return + network.handlers.onPayment(peer.id, payment) + proc rpcHandler(b: BitswapNetwork, peer: NetworkPeer, msg: Message) {.async.} = try: if msg.wantlist.entries.len > 0: @@ -223,6 +232,9 @@ proc rpcHandler(b: BitswapNetwork, peer: NetworkPeer, msg: Message) {.async.} = if pricing =? Pricing.init(msg.pricing): b.handlePricing(peer, pricing) + if payment =? SignedState.init(msg.payment): + b.handlePayment(peer, payment) + except CatchableError as exc: trace "Exception in bitswap rpc handler", exc = exc.msg diff --git a/dagger/bitswap/protobuf/payments.nim b/dagger/bitswap/protobuf/payments.nim index e300af9e..045dbb1e 100644 --- a/dagger/bitswap/protobuf/payments.nim +++ b/dagger/bitswap/protobuf/payments.nim @@ -1,4 +1,5 @@ import pkg/protobuf_serialization +import pkg/stew/byteutils import pkg/nitro import pkg/questionable import pkg/upraises diff --git a/tests/dagger/bitswap/testnetwork.nim b/tests/dagger/bitswap/testnetwork.nim index 903319bb..685686a3 100644 --- a/tests/dagger/bitswap/testnetwork.nim +++ b/tests/dagger/bitswap/testnetwork.nim @@ -118,6 +118,20 @@ suite "Bitswap network": await done.wait(100.millis) + test "handles payment messages": + let payment = SignedState.example + + proc handlePayment(peer: PeerID, received: SignedState) = + check received == payment + done.complete() + + network.handlers.onPayment = handlePayment + + let message = Message(payment: StateChannelUpdate.init(payment)) + await buffer.pushData(lenPrefix(Protobuf.encode(message))) + + await done.wait(100.millis) + suite "Bitswap Network - e2e": let chunker = newRandomChunker(Rng.instance(), size = 1024, chunkSize = 256)