From f8e216e98e319f2223a36c8af986f3d7a041f029 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Wed, 31 May 2023 23:09:08 +0200 Subject: [PATCH 1/9] test --- Cargo.lock | 4 ++++ examples/file-sharing/Cargo.toml | 9 ++++++++- examples/file-sharing/src/network.rs | 6 +++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 29b30f03cf4..5d57454094f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1563,7 +1563,11 @@ dependencies = [ "env_logger 0.10.0", "futures", "libp2p", + "libp2p-request-response", + "libp2p-swarm", "multiaddr", + "serde", + "serde_cbor", "void", ] diff --git a/examples/file-sharing/Cargo.toml b/examples/file-sharing/Cargo.toml index 83f26db6179..9c546c7f46b 100644 --- a/examples/file-sharing/Cargo.toml +++ b/examples/file-sharing/Cargo.toml @@ -6,12 +6,19 @@ publish = false license = "MIT" [dependencies] +libp2p-request-response = { workspace = true, features = ["cbor"] } +libp2p-swarm = { workspace = true } +serde = { version = "1.0", optional = true} +serde_cbor = { version = "0.11.2", optional = true } async-std = { version = "1.12", features = ["attributes"] } async-trait = "0.1" clap = { version = "4.3.0", features = ["derive"] } either = "1.8" env_logger = "0.10" futures = "0.3.28" -libp2p = { path = "../../libp2p", features = ["async-std", "dns", "kad", "noise", "macros", "request-response", "tcp", "websocket", "yamux"] } +libp2p = { path = "../../libp2p", features = ["async-std", "dns", "kad", "noise", "macros", "request-response", "tcp", "websocket", "yamux"]} multiaddr = { version = "0.17.1" } void = "1.0.2" + +[features] +cbor = ["dep:serde", "dep:serde_cbor", "libp2p-swarm/macros"] diff --git a/examples/file-sharing/src/network.rs b/examples/file-sharing/src/network.rs index f497d0ce299..b69094d3bad 100644 --- a/examples/file-sharing/src/network.rs +++ b/examples/file-sharing/src/network.rs @@ -15,11 +15,15 @@ use libp2p::{ }, multiaddr::Protocol, noise, - request_response::{self, ProtocolSupport, RequestId, ResponseChannel}, + request_response::{self, cbor::Behaviour, ProtocolSupport, RequestId, ResponseChannel}, swarm::{NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent}, tcp, yamux, PeerId, Transport, }; +// use libp2p_request_response::cbor; + +// use libp2p::request_response::cbor::codec::Codec; + use libp2p::core::upgrade::Version; use libp2p::StreamProtocol; use std::collections::{hash_map, HashMap, HashSet}; From 2aef2825ddddeeb47871e35780a054f5f76f593a Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 6 Jun 2023 12:59:10 +0200 Subject: [PATCH 2/9] add cbor::Behaviour in file-sharing test network --- examples/file-sharing/Cargo.toml | 3 +- examples/file-sharing/src/network.rs | 98 +++------------------------- 2 files changed, 12 insertions(+), 89 deletions(-) diff --git a/examples/file-sharing/Cargo.toml b/examples/file-sharing/Cargo.toml index 9c546c7f46b..0edb36b8de1 100644 --- a/examples/file-sharing/Cargo.toml +++ b/examples/file-sharing/Cargo.toml @@ -8,7 +8,7 @@ license = "MIT" [dependencies] libp2p-request-response = { workspace = true, features = ["cbor"] } libp2p-swarm = { workspace = true } -serde = { version = "1.0", optional = true} +serde = { version = "1.0", optional = true, features = ["derive"] } serde_cbor = { version = "0.11.2", optional = true } async-std = { version = "1.12", features = ["attributes"] } async-trait = "0.1" @@ -21,4 +21,5 @@ multiaddr = { version = "0.17.1" } void = "1.0.2" [features] +default = ["cbor"] cbor = ["dep:serde", "dep:serde_cbor", "libp2p-swarm/macros"] diff --git a/examples/file-sharing/src/network.rs b/examples/file-sharing/src/network.rs index b69094d3bad..e6adccf9dbe 100644 --- a/examples/file-sharing/src/network.rs +++ b/examples/file-sharing/src/network.rs @@ -1,14 +1,10 @@ use async_std::io; -use async_trait::async_trait; use either::Either; use futures::channel::{mpsc, oneshot}; use futures::prelude::*; use libp2p::{ - core::{ - upgrade::{read_length_prefixed, write_length_prefixed}, - Multiaddr, - }, + core::Multiaddr, identity, kad::{ record::store::MemoryStore, GetProvidersOk, Kademlia, KademliaEvent, QueryId, QueryResult, @@ -20,15 +16,12 @@ use libp2p::{ tcp, yamux, PeerId, Transport, }; -// use libp2p_request_response::cbor; - -// use libp2p::request_response::cbor::codec::Codec; - use libp2p::core::upgrade::Version; use libp2p::StreamProtocol; +#[cfg(feature = "cbor")] +use serde::{Deserialize, Serialize}; use std::collections::{hash_map, HashMap, HashSet}; use std::error::Error; -use std::iter; /// Creates the network components, namely: /// @@ -64,13 +57,12 @@ pub(crate) async fn new( transport, ComposedBehaviour { kademlia: Kademlia::new(peer_id, MemoryStore::new(peer_id)), - request_response: request_response::Behaviour::with_codec( - FileExchangeCodec(), - iter::once(( + request_response: Behaviour::::new( + [( StreamProtocol::new("/file-exchange/1"), ProtocolSupport::Full, - )), - Default::default(), + )], + request_response::Config::default(), ), }, peer_id, @@ -417,7 +409,7 @@ impl EventLoop { #[derive(NetworkBehaviour)] #[behaviour(to_swarm = "ComposedEvent")] struct ComposedBehaviour { - request_response: request_response::Behaviour, + request_response: Behaviour, kademlia: Kademlia, } @@ -478,77 +470,7 @@ pub(crate) enum Event { } // Simple file exchange protocol - -#[derive(Clone)] -struct FileExchangeCodec(); -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] struct FileRequest(String); -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub(crate) struct FileResponse(Vec); - -#[async_trait] -impl request_response::Codec for FileExchangeCodec { - type Protocol = StreamProtocol; - type Request = FileRequest; - type Response = FileResponse; - - async fn read_request(&mut self, _: &StreamProtocol, io: &mut T) -> io::Result - where - T: AsyncRead + Unpin + Send, - { - let vec = read_length_prefixed(io, 1_000_000).await?; - - if vec.is_empty() { - return Err(io::ErrorKind::UnexpectedEof.into()); - } - - Ok(FileRequest(String::from_utf8(vec).unwrap())) - } - - async fn read_response( - &mut self, - _: &StreamProtocol, - io: &mut T, - ) -> io::Result - where - T: AsyncRead + Unpin + Send, - { - let vec = read_length_prefixed(io, 500_000_000).await?; // update transfer maximum - - if vec.is_empty() { - return Err(io::ErrorKind::UnexpectedEof.into()); - } - - Ok(FileResponse(vec)) - } - - async fn write_request( - &mut self, - _: &StreamProtocol, - io: &mut T, - FileRequest(data): FileRequest, - ) -> io::Result<()> - where - T: AsyncWrite + Unpin + Send, - { - write_length_prefixed(io, data).await?; - io.close().await?; - - Ok(()) - } - - async fn write_response( - &mut self, - _: &StreamProtocol, - io: &mut T, - FileResponse(data): FileResponse, - ) -> io::Result<()> - where - T: AsyncWrite + Unpin + Send, - { - write_length_prefixed(io, data).await?; - io.close().await?; - - Ok(()) - } -} From 5e45bd0eca448a5054436fd301d83afcffcb2065 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 6 Jun 2023 16:54:02 +0200 Subject: [PATCH 3/9] reference Behaviour type by module --- examples/file-sharing/src/network.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/file-sharing/src/network.rs b/examples/file-sharing/src/network.rs index e6adccf9dbe..662e0550fb9 100644 --- a/examples/file-sharing/src/network.rs +++ b/examples/file-sharing/src/network.rs @@ -11,7 +11,7 @@ use libp2p::{ }, multiaddr::Protocol, noise, - request_response::{self, cbor::Behaviour, ProtocolSupport, RequestId, ResponseChannel}, + request_response::{self, ProtocolSupport, RequestId, ResponseChannel}, swarm::{NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent}, tcp, yamux, PeerId, Transport, }; @@ -57,7 +57,7 @@ pub(crate) async fn new( transport, ComposedBehaviour { kademlia: Kademlia::new(peer_id, MemoryStore::new(peer_id)), - request_response: Behaviour::::new( + request_response: request_response::cbor::Behaviour::::new( [( StreamProtocol::new("/file-exchange/1"), ProtocolSupport::Full, @@ -409,7 +409,7 @@ impl EventLoop { #[derive(NetworkBehaviour)] #[behaviour(to_swarm = "ComposedEvent")] struct ComposedBehaviour { - request_response: Behaviour, + request_response: request_response::cbor::Behaviour, kademlia: Kademlia, } From f6fdb802f7f5550d988fb2584233ca40c455867b Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 6 Jun 2023 17:01:07 +0200 Subject: [PATCH 4/9] remove feature flag in file-sharing example --- examples/file-sharing/Cargo.toml | 8 ++------ examples/file-sharing/src/network.rs | 1 - 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/examples/file-sharing/Cargo.toml b/examples/file-sharing/Cargo.toml index be6d9759b64..ea9678cca03 100644 --- a/examples/file-sharing/Cargo.toml +++ b/examples/file-sharing/Cargo.toml @@ -8,8 +8,8 @@ license = "MIT" [dependencies] libp2p-request-response = { workspace = true, features = ["cbor"] } libp2p-swarm = { workspace = true } -serde = { version = "1.0", optional = true, features = ["derive"] } -serde_cbor = { version = "0.11.2", optional = true } +serde = { version = "1.0", features = ["derive"] } +serde_cbor = { version = "0.11.2" } async-std = { version = "1.12", features = ["attributes"] } async-trait = "0.1" clap = { version = "4.3.1", features = ["derive"] } @@ -19,7 +19,3 @@ futures = "0.3.28" libp2p = { path = "../../libp2p", features = ["async-std", "dns", "kad", "noise", "macros", "request-response", "tcp", "websocket", "yamux"]} multiaddr = { version = "0.17.1" } void = "1.0.2" - -[features] -default = ["cbor"] -cbor = ["dep:serde", "dep:serde_cbor", "libp2p-swarm/macros"] diff --git a/examples/file-sharing/src/network.rs b/examples/file-sharing/src/network.rs index 662e0550fb9..066e7cac1f1 100644 --- a/examples/file-sharing/src/network.rs +++ b/examples/file-sharing/src/network.rs @@ -18,7 +18,6 @@ use libp2p::{ use libp2p::core::upgrade::Version; use libp2p::StreamProtocol; -#[cfg(feature = "cbor")] use serde::{Deserialize, Serialize}; use std::collections::{hash_map, HashMap, HashSet}; use std::error::Error; From 9f1320ff1eec35b3ce6593c48f7f8ca80b1840a4 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 6 Jun 2023 19:50:56 +0200 Subject: [PATCH 5/9] infer --- examples/file-sharing/src/network.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/file-sharing/src/network.rs b/examples/file-sharing/src/network.rs index 066e7cac1f1..d8ecfb42a1c 100644 --- a/examples/file-sharing/src/network.rs +++ b/examples/file-sharing/src/network.rs @@ -56,7 +56,7 @@ pub(crate) async fn new( transport, ComposedBehaviour { kademlia: Kademlia::new(peer_id, MemoryStore::new(peer_id)), - request_response: request_response::cbor::Behaviour::::new( + request_response: request_response::cbor::Behaviour::new( [( StreamProtocol::new("/file-exchange/1"), ProtocolSupport::Full, From 69dc6eebc96864a5c743759095aacc543b826f72 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 6 Jun 2023 19:51:57 +0200 Subject: [PATCH 6/9] remove small diff in cargo.toml --- examples/file-sharing/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/file-sharing/Cargo.toml b/examples/file-sharing/Cargo.toml index ea9678cca03..ce2a0279244 100644 --- a/examples/file-sharing/Cargo.toml +++ b/examples/file-sharing/Cargo.toml @@ -16,6 +16,6 @@ clap = { version = "4.3.1", features = ["derive"] } either = "1.8" env_logger = "0.10" futures = "0.3.28" -libp2p = { path = "../../libp2p", features = ["async-std", "dns", "kad", "noise", "macros", "request-response", "tcp", "websocket", "yamux"]} +libp2p = { path = "../../libp2p", features = ["async-std", "dns", "kad", "noise", "macros", "request-response", "tcp", "websocket", "yamux"] } multiaddr = { version = "0.17.1" } void = "1.0.2" From 65c07f0a478a55093abc4a1731ee5e90b4b8108f Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 6 Jun 2023 19:54:29 +0200 Subject: [PATCH 7/9] remove unused in cargo.toml --- Cargo.lock | 2 -- examples/file-sharing/Cargo.toml | 2 -- 2 files changed, 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index defe2cd4856..43c6da757d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1541,10 +1541,8 @@ dependencies = [ "futures", "libp2p", "libp2p-request-response", - "libp2p-swarm", "multiaddr", "serde", - "serde_cbor", "void", ] diff --git a/examples/file-sharing/Cargo.toml b/examples/file-sharing/Cargo.toml index ce2a0279244..818af9e32fd 100644 --- a/examples/file-sharing/Cargo.toml +++ b/examples/file-sharing/Cargo.toml @@ -7,9 +7,7 @@ license = "MIT" [dependencies] libp2p-request-response = { workspace = true, features = ["cbor"] } -libp2p-swarm = { workspace = true } serde = { version = "1.0", features = ["derive"] } -serde_cbor = { version = "0.11.2" } async-std = { version = "1.12", features = ["attributes"] } async-trait = "0.1" clap = { version = "4.3.1", features = ["derive"] } From d7f56390f11cec83379a6757d77d6ce1c37ddcd4 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 6 Jun 2023 19:56:02 +0200 Subject: [PATCH 8/9] remove async-trait in cargo.toml --- Cargo.lock | 1 - examples/file-sharing/Cargo.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 43c6da757d3..662f6d49af4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1534,7 +1534,6 @@ name = "file-sharing" version = "0.1.0" dependencies = [ "async-std", - "async-trait", "clap", "either", "env_logger 0.10.0", diff --git a/examples/file-sharing/Cargo.toml b/examples/file-sharing/Cargo.toml index 818af9e32fd..e41618b2f5e 100644 --- a/examples/file-sharing/Cargo.toml +++ b/examples/file-sharing/Cargo.toml @@ -9,7 +9,6 @@ license = "MIT" libp2p-request-response = { workspace = true, features = ["cbor"] } serde = { version = "1.0", features = ["derive"] } async-std = { version = "1.12", features = ["attributes"] } -async-trait = "0.1" clap = { version = "4.3.1", features = ["derive"] } either = "1.8" env_logger = "0.10" From 4a332258aa7f1d85cca6a25d92489bbef3bc3a79 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 6 Jun 2023 21:07:03 +0200 Subject: [PATCH 9/9] remove libp2p-request-response dependency in file-sharing --- Cargo.lock | 1 - examples/file-sharing/Cargo.toml | 3 +-- libp2p/Cargo.toml | 2 ++ 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index be619f5f50e..f63915d88d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1539,7 +1539,6 @@ dependencies = [ "env_logger 0.10.0", "futures", "libp2p", - "libp2p-request-response", "multiaddr", "serde", "void", diff --git a/examples/file-sharing/Cargo.toml b/examples/file-sharing/Cargo.toml index e41618b2f5e..aae3d4c3f65 100644 --- a/examples/file-sharing/Cargo.toml +++ b/examples/file-sharing/Cargo.toml @@ -6,13 +6,12 @@ publish = false license = "MIT" [dependencies] -libp2p-request-response = { workspace = true, features = ["cbor"] } serde = { version = "1.0", features = ["derive"] } async-std = { version = "1.12", features = ["attributes"] } clap = { version = "4.3.1", features = ["derive"] } either = "1.8" env_logger = "0.10" futures = "0.3.28" -libp2p = { path = "../../libp2p", features = ["async-std", "dns", "kad", "noise", "macros", "request-response", "tcp", "websocket", "yamux"] } +libp2p = { path = "../../libp2p", features = ["async-std", "cbor", "dns", "kad", "noise", "macros", "request-response", "tcp", "websocket", "yamux"] } multiaddr = { version = "0.17.1" } void = "1.0.2" diff --git a/libp2p/Cargo.toml b/libp2p/Cargo.toml index 0a144c32982..3c80ddc07ce 100644 --- a/libp2p/Cargo.toml +++ b/libp2p/Cargo.toml @@ -14,6 +14,7 @@ categories = ["network-programming", "asynchronous"] full = [ "async-std", "autonat", + "cbor", "dcutr", "deflate", "dns", @@ -49,6 +50,7 @@ full = [ async-std = ["libp2p-swarm/async-std", "libp2p-mdns?/async-io", "libp2p-tcp?/async-io", "libp2p-dns?/async-std"] autonat = ["dep:libp2p-autonat"] +cbor = ["libp2p-request-response?/cbor"] dcutr = ["dep:libp2p-dcutr", "libp2p-metrics?/dcutr"] deflate = ["dep:libp2p-deflate"] dns = ["dep:libp2p-dns"]