From 935ee560bb5eb6c806a3d6c08c66a0bf7e576824 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Tue, 24 Jun 2025 18:32:53 +0300 Subject: [PATCH 1/3] Fix Bitswap protocol implementation --- src/protocol/libp2p/bitswap/mod.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/protocol/libp2p/bitswap/mod.rs b/src/protocol/libp2p/bitswap/mod.rs index 6a75c4df..8cf3fc8f 100644 --- a/src/protocol/libp2p/bitswap/mod.rs +++ b/src/protocol/libp2p/bitswap/mod.rs @@ -178,6 +178,13 @@ impl Bitswap { let mut response = schema::bitswap::Message::default(); + // `Wantlist` field must always be present. This is what the official Kubo IPFS + // implementation does. + response.wantlist = Some(schema::bitswap::Wantlist { + entries: Vec::new(), + full: false, + }); + for entry in entries { match entry { ResponseType::Block { cid, block } => { @@ -205,6 +212,8 @@ impl Bitswap { let message = response.encode_to_vec().into(); let _ = tokio::time::timeout(WRITE_TIMEOUT, substream.send_framed(message)).await; + + substream.close().await; } /// Handle bitswap response. From a4a195290593cc15565d0238f8d18d217ee2b32a Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Tue, 24 Jun 2025 19:23:03 +0300 Subject: [PATCH 2/3] minor: make clippy happy --- src/protocol/libp2p/bitswap/mod.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/protocol/libp2p/bitswap/mod.rs b/src/protocol/libp2p/bitswap/mod.rs index 8cf3fc8f..b3d2f4e7 100644 --- a/src/protocol/libp2p/bitswap/mod.rs +++ b/src/protocol/libp2p/bitswap/mod.rs @@ -176,14 +176,15 @@ impl Bitswap { return; }; - let mut response = schema::bitswap::Message::default(); - - // `Wantlist` field must always be present. This is what the official Kubo IPFS - // implementation does. - response.wantlist = Some(schema::bitswap::Wantlist { - entries: Vec::new(), - full: false, - }); + let mut response = schema::bitswap::Message { + // `Wantlist` field must always be present. This is what the official Kubo IPFS + // implementation does. + wantlist: Some(schema::bitswap::Wantlist { + entries: Vec::new(), + full: false, + }), + ..Default::default() + }; for entry in entries { match entry { From f4c9a7ee9e07346afbfde71df3ea85dfe6bb1d5f Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Wed, 25 Jun 2025 09:15:59 +0300 Subject: [PATCH 3/3] minor: simplify a bit with `Default::default()` --- src/protocol/libp2p/bitswap/mod.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/protocol/libp2p/bitswap/mod.rs b/src/protocol/libp2p/bitswap/mod.rs index b3d2f4e7..3dd620ae 100644 --- a/src/protocol/libp2p/bitswap/mod.rs +++ b/src/protocol/libp2p/bitswap/mod.rs @@ -177,12 +177,9 @@ impl Bitswap { }; let mut response = schema::bitswap::Message { - // `Wantlist` field must always be present. This is what the official Kubo IPFS + // `wantlist` field must always be present. This is what the official Kubo IPFS // implementation does. - wantlist: Some(schema::bitswap::Wantlist { - entries: Vec::new(), - full: false, - }), + wantlist: Some(Default::default()), ..Default::default() };