Skip to content
This repository has been archived by the owner on Oct 23, 2022. It is now read-only.

chore: upgrade to libp2p 0.39 #472

Merged
merged 6 commits into from
Aug 18, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
chore: upgrade some of the other deps, fix tests
  • Loading branch information
CHr15F0x committed Aug 18, 2021
commit 414ccf5cbd98297e8ac33e62d235f43d5aae4c24
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ test_js_interop = []
anyhow = "1.0"
async-stream = { default-features = false, version = "0.3" }
async-trait = { default-features = false, version = "0.1" }
base64 = { default-features = false, features = ["alloc"], version = "0.12" }
base64 = { default-features = false, features = ["alloc"], version = "0.13" }
ipfs-bitswap = { version = "0.1", path = "bitswap" }
byteorder = { default-features = false, version = "1.3" }
bytes = { default-features = false, version = "1" }
Expand All @@ -32,7 +32,7 @@ futures = { default-features = false, version = "0.3.9", features = ["alloc", "s
hash_hasher = "2.0.3"
ipfs-unixfs = { version = "0.2", path = "unixfs" }
libp2p = { default-features = false, features = ["floodsub", "identify", "kad", "tcp-tokio", "mplex", "noise", "ping", "yamux", "dns-tokio"], version = "0.39" }
multibase = { default-features = false, version = "0.8" }
multibase = { default-features = false, version = "0.9" }
multihash = { default-features = false, version = "0.11" }
prost = { default-features = false, version = "0.8" }
serde = { default-features = false, features = ["derive"], version = "1.0" }
Expand All @@ -49,7 +49,7 @@ sled = "0.34"
once_cell = "1.5.2"

[build-dependencies]
prost-build = { default-features = false, version = "0.7" }
prost-build = { default-features = false, version = "0.8" }

[dev-dependencies]
criterion = { default-features = false, version = "0.3" }
Expand Down
2 changes: 1 addition & 1 deletion bitswap/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ license = "MIT OR Apache-2.0"
repository = "https://github.com/rs-ipfs/rust-ipfs"

[build-dependencies]
prost-build = { default-features = false, version = "0.7" }
prost-build = { default-features = false, version = "0.8" }

[dependencies]
cid = { default-features = false, version = "0.5" }
Expand Down
4 changes: 2 additions & 2 deletions http/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ name = "ipfs-http"
version = "0.1.0"

[build-dependencies]
prost-build = { default-features = false, version = "0.7" }
prost-build = { default-features = false, version = "0.8" }
vergen = { default-features = false, version = "3.1" }

[dependencies]
Expand All @@ -19,7 +19,7 @@ humantime = { default-features = false, version = "2.0" }
ipfs = { path = "../" }
mime = { default-features = false, version = "0.3" }
mpart-async = { default-features = false, version = "0.5" }
multibase = { default-features = false, version = "0.8" }
multibase = { default-features = false, features = ["std"], version = "0.9" }
multihash = { default-features = false, version = "0.11" }
# openssl is required for rsa keygen but not used by the rust-ipfs or its dependencies
openssl = { default-features = false, version = "0.10" }
Expand Down
1 change: 0 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1372,7 +1372,6 @@ impl<TRepoTypes: RepoTypes> Future for IpfsFuture<TRepoTypes> {
let next = self.swarm.next();
CHr15F0x marked this conversation as resolved.
Show resolved Hide resolved
futures::pin_mut!(next);
match next.poll(ctx) {
// klis:TODO handle None here?
Poll::Ready(inner) => inner,
Poll::Pending if done => return Poll::Pending,
Poll::Pending => break,
Expand Down
39 changes: 39 additions & 0 deletions src/p2p/addr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,30 @@ pub(crate) fn could_be_bound_from_ephemeral(
}
}

// Checks if two instances of multiaddr are equal comparing as many protocol segments as possible
pub(crate) fn eq_greedy(addr0: &Multiaddr, addr1: &Multiaddr) -> bool {
match (addr0.is_empty(), addr1.is_empty()) {
(true, true) => true,
(false, false) => {
let mut it1 = addr1.iter();

for i0 in addr0.iter() {
if let Some(i1) = it1.next() {
if i0 != i1 {
return false;
}
} else {
// All previous segments were equal
return true;
}
}

true
},
_ => false,
}
}

#[cfg(test)]
mod tests {
use super::*;
Expand Down Expand Up @@ -301,4 +325,19 @@ mod tests {
&build_multiaddr!(Ip4([127, 0, 0, 1]), Tcp(44444u16))
));
}

#[test]
fn greedy_multiaddr_comparison() {
assert!(eq_greedy(&Multiaddr::empty(), &Multiaddr::empty()));
assert!(eq_greedy(&build_multiaddr!(Ip4([192, 168, 0, 1])), &build_multiaddr!(Ip4([192, 168, 0, 1]))));
assert!(eq_greedy(&build_multiaddr!(Ip4([192, 168, 0, 1]), Tcp(44444u16)), &build_multiaddr!(Ip4([192, 168, 0, 1]))));
assert!(eq_greedy(&build_multiaddr!(Ip4([192, 168, 0, 1])), &build_multiaddr!(Ip4([192, 168, 0, 1]), Tcp(44444u16))));

// At least one protocol segment needs to be there
assert!(!eq_greedy(&Multiaddr::empty(), &build_multiaddr!(Ip4([192, 168, 0, 1]))));
assert!(!eq_greedy(&build_multiaddr!(Ip4([192, 168, 0, 1])), &Multiaddr::empty()));

assert!(!eq_greedy(&build_multiaddr!(Ip4([192, 168, 0, 1]), Tcp(44444u16)), &build_multiaddr!(Ip4([192, 168, 0, 2]))));
assert!(!eq_greedy(&build_multiaddr!(Ip4([192, 168, 0, 2])), &build_multiaddr!(Ip4([192, 168, 0, 1]), Tcp(44444u16))));
}
}
26 changes: 12 additions & 14 deletions src/p2p/swarm.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::p2p::{MultiaddrWithPeerId, MultiaddrWithoutPeerId};
use crate::p2p::{addr::eq_greedy, MultiaddrWithPeerId, MultiaddrWithoutPeerId};
use crate::subscription::{SubscriptionFuture, SubscriptionRegistry};
use core::task::{Context, Poll};
use libp2p::core::{connection::ConnectionId, ConnectedPoint, Multiaddr, PeerId};
Expand Down Expand Up @@ -174,7 +174,7 @@ impl NetworkBehaviour for SwarmApi {
) {
// TODO: could be that the connection is not yet fully established at this point
trace!("inject_connection_established {} {:?}", peer_id, cp);
let addr: MultiaddrWithoutPeerId = connection_point_addr(cp).to_owned().try_into().unwrap();
let addr = connection_point_addr(cp);

self.peers.insert(*peer_id);
let connections = self.connected_peers.entry(*peer_id).or_default();
Expand All @@ -194,16 +194,15 @@ impl NetworkBehaviour for SwarmApi {
match self.pending_connections.entry(*peer_id) {
Entry::Occupied(mut oe) => {
let addresses = oe.get_mut();
let just_connected = addresses.iter().position(|x| x == address);
let just_connected = addresses.iter().position(|x| eq_greedy(x, address));
if let Some(just_connected) = just_connected {
addresses.swap_remove(just_connected);
if addresses.is_empty() {
oe.remove();
}

let addr = MultiaddrWithoutPeerId::try_from(address.clone())
.expect("dialed address did not contain peerid in libp2p 0.34")
.with(*peer_id);
let addr = MultiaddrWithPeerId::try_from(address.clone())
.expect("dialed address contains peerid in libp2p 0.38");

self.connect_registry
.finish_subscription(addr.into(), Ok(()));
Expand Down Expand Up @@ -258,7 +257,7 @@ impl NetworkBehaviour for SwarmApi {
cp: &ConnectedPoint,
) {
trace!("inject_connection_closed {} {:?}", peer_id, cp);
let closed_addr = connection_point_addr(cp).to_owned().try_into().unwrap();
let closed_addr = connection_point_addr(cp);

match self.connected_peers.entry(*peer_id) {
Entry::Occupied(mut oe) => {
Expand Down Expand Up @@ -383,13 +382,12 @@ impl NetworkBehaviour for SwarmApi {
match self.pending_connections.entry(*peer_id) {
Entry::Occupied(mut oe) => {
let addresses = oe.get_mut();
let pos = addresses.iter().position(|a| a == addr);
let pos = addresses.iter().position(|a| eq_greedy(a, addr));

if let Some(pos) = pos {
addresses.swap_remove(pos);
let addr = MultiaddrWithoutPeerId::try_from(addr.clone())
.expect("multiaddr didn't contain peer id in libp2p 0.34")
.with(*peer_id);
let addr = MultiaddrWithPeerId::try_from(addr.clone())
.expect("dialed address contains peerid in libp2p 0.38");
self.connect_registry
.finish_subscription(addr.into(), Err(error.to_string()));
}
Expand All @@ -416,10 +414,10 @@ impl NetworkBehaviour for SwarmApi {
}
}

fn connection_point_addr(cp: &ConnectedPoint) -> &Multiaddr {
fn connection_point_addr(cp: &ConnectedPoint) -> MultiaddrWithoutPeerId {
match cp {
ConnectedPoint::Dialer { address } => address,
ConnectedPoint::Listener { send_back_addr, .. } => send_back_addr,
ConnectedPoint::Dialer { address } => MultiaddrWithPeerId::try_from(address.to_owned()).expect("dialed address contains peerid in libp2p 0.38").into(),
ConnectedPoint::Listener { send_back_addr, .. } => send_back_addr.to_owned().try_into().expect("send back address does not contain peerid in libp2p 0.38"),
}
}

Expand Down
4 changes: 2 additions & 2 deletions unixfs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ cid = { default-features = false, version = "0.5" }
either = { default-features = false, version = "1.5" }
filetime = { optional = true, version = "0.2.12" }
multihash = { default-features = false, version = "0.11" }
quick-protobuf = { default-features = false, features = ["std"], version = "0.7" }
quick-protobuf = { default-features = false, features = ["std"], version = "0.8" }
sha2 = { default-features = false, version = "0.9" }

[dev-dependencies]
hash_hasher = "2.0.3"
hex-literal = { default-features = false, version = "0.3" }
libc = { default-features = false, version = "0.2.71" }
multibase = { default-features = false, version = "0.8.0" }
multibase = { default-features = false, version = "0.9" }
tar = { default-features = false, version = "0.4" }
criterion = { default-features = false, version = "0.3" }

Expand Down