Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(dcutr): rename error types to bypass cargo-semver-checks hickup #3213

Merged
merged 12 commits into from
Dec 13, 2022
Merged
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@

# `libp2p` facade crate

# 0.50.1

- Update individual crates.
- Update to [`libp2p-dcutr` `v0.8.1`](protocols/dcutr/CHANGELOG.md#081).

# 0.50.0

This is a large release. After > 4 years, rust-libp2p ships with an [(alpha) QUIC
Expand Down
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "libp2p"
edition = "2021"
rust-version = "1.62.0"
description = "Peer-to-peer networking library"
version = "0.50.0"
version = "0.50.1"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand Down Expand Up @@ -94,7 +94,7 @@ instant = "0.1.11" # Explicit dependency to be used in `wasm-bindgen` feature

libp2p-autonat = { version = "0.9.0", path = "protocols/autonat", optional = true }
libp2p-core = { version = "0.38.0", path = "core" }
libp2p-dcutr = { version = "0.8.0", path = "protocols/dcutr", optional = true }
libp2p-dcutr = { version = "0.8.1", path = "protocols/dcutr", optional = true }
libp2p-floodsub = { version = "0.41.0", path = "protocols/floodsub", optional = true }
libp2p-identify = { version = "0.41.0", path = "protocols/identify", optional = true }
libp2p-kad = { version = "0.42.0", path = "protocols/kad", optional = true }
Expand Down
4 changes: 4 additions & 0 deletions misc/metrics/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 0.11.1 [unreleased]

- Update to `libp2p-dcutr` `v0.8.1`.

# 0.11.0

- Update to `libp2p-dcutr` `v0.8.0`.
Expand Down
4 changes: 2 additions & 2 deletions misc/metrics/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "libp2p-metrics"
edition = "2021"
rust-version = "1.62.0"
description = "Metrics for libp2p"
version = "0.11.0"
version = "0.11.1"
authors = ["Max Inden <mail@max-inden.de>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand All @@ -20,7 +20,7 @@ dcutr = ["libp2p-dcutr"]

[dependencies]
libp2p-core = { version = "0.38.0", path = "../../core" }
libp2p-dcutr = { version = "0.8.0", path = "../../protocols/dcutr", optional = true }
libp2p-dcutr = { version = "0.8.1", path = "../../protocols/dcutr", optional = true }
libp2p-identify = { version = "0.41.0", path = "../../protocols/identify", optional = true }
libp2p-kad = { version = "0.42.0", path = "../../protocols/kad", optional = true }
libp2p-ping = { version = "0.41.0", path = "../../protocols/ping", optional = true }
Expand Down
7 changes: 7 additions & 0 deletions protocols/dcutr/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# 0.8.1 [unreleased]

- Deprecate `InboundUpgradeError` and `OutboundUpgradeError` to follow the conventions discussed in [issue 2217]. See [PR XXXX].

[issue 2217]: https://github.com/libp2p/rust-libp2p/issues/2217
[PR XXXX]: https://github.com/libp2p/rust-libp2p/pull/XXXX
thomaseizinger marked this conversation as resolved.
Show resolved Hide resolved

# 0.8.0

- Update to `prost-codec` `v0.3.0`.
Expand Down
2 changes: 1 addition & 1 deletion protocols/dcutr/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "libp2p-dcutr"
edition = "2021"
rust-version = "1.62.0"
description = "Direct connection upgrade through relay"
version = "0.8.0"
version = "0.8.1"
authors = ["Max Inden <mail@max-inden.de>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand Down
12 changes: 9 additions & 3 deletions protocols/dcutr/src/handler/relayed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,10 @@ pub struct Handler {
/// A pending fatal error that results in the connection being closed.
pending_error: Option<
ConnectionHandlerUpgrErr<
EitherError<protocol::inbound::UpgradeError, protocol::outbound::UpgradeError>,
EitherError<
protocol::inbound::InboundUpgradeError,
protocol::outbound::OutboundUpgradeError,
>,
>,
>,
/// Queue of events to return when polled.
Expand All @@ -148,7 +151,7 @@ pub struct Handler {
>,
/// Inbound connect, accepted by the behaviour, pending completion.
inbound_connect:
Option<BoxFuture<'static, Result<Vec<Multiaddr>, protocol::inbound::UpgradeError>>>,
Option<BoxFuture<'static, Result<Vec<Multiaddr>, protocol::inbound::InboundUpgradeError>>>,
keep_alive: KeepAlive,
}

Expand Down Expand Up @@ -302,7 +305,10 @@ impl ConnectionHandler for Handler {
type InEvent = Command;
type OutEvent = Event;
type Error = ConnectionHandlerUpgrErr<
EitherError<protocol::inbound::UpgradeError, protocol::outbound::UpgradeError>,
EitherError<
protocol::inbound::InboundUpgradeError,
protocol::outbound::OutboundUpgradeError,
>,
>;
type InboundProtocol = upgrade::EitherUpgrade<protocol::inbound::Upgrade, DeniedUpgrade>;
type OutboundProtocol = protocol::outbound::Upgrade;
Expand Down
27 changes: 21 additions & 6 deletions protocols/dcutr/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,28 @@
pub mod behaviour;
mod handler;
mod protocol;

pub use protocol::{
inbound::UpgradeError as InboundUpgradeError, outbound::UpgradeError as OutboundUpgradeError,
PROTOCOL_NAME,
};

#[allow(clippy::derive_partial_eq_without_eq)]
mod message_proto {
include!(concat!(env!("OUT_DIR"), "/holepunch.pb.rs"));
}

pub use protocol::PROTOCOL_NAME;
pub mod inbound {
pub use crate::protocol::inbound::InboundUpgradeError as UpgradeError; // TODO: Rename the inner error once `cargo-semver-checks` supports it: https://github.com/obi1kenobi/cargo-semver-checks/issues/152
}

pub mod outbound {
pub use crate::protocol::outbound::OutboundUpgradeError as UpgradeError; // TODO: Rename the inner error once `cargo-semver-checks` supports it: https://github.com/obi1kenobi/cargo-semver-checks/issues/152
}

#[deprecated(
since = "0.8.1",
note = "Use `libp2p_dcutr::inbound::UpgradeError` instead.`"
)]
pub type InboundUpgradeError = inbound::UpgradeError;

#[deprecated(
since = "0.8.1",
note = "Use `libp2p_dcutr::outbound::UpgradeError` instead.`"
)]
pub type OutboundUpgradeError = outbound::UpgradeError;
28 changes: 16 additions & 12 deletions protocols/dcutr/src/protocol/inbound.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ impl upgrade::UpgradeInfo for Upgrade {

impl upgrade::InboundUpgrade<NegotiatedSubstream> for Upgrade {
type Output = PendingConnect;
type Error = UpgradeError;
type Error = InboundUpgradeError;
type Future = BoxFuture<'static, Result<Self::Output, Self::Error>>;

fn upgrade_inbound(self, substream: NegotiatedSubstream, _: Self::Info) -> Self::Future {
Expand All @@ -50,11 +50,13 @@ impl upgrade::InboundUpgrade<NegotiatedSubstream> for Upgrade {
);

async move {
let HolePunch { r#type, obs_addrs } =
substream.next().await.ok_or(UpgradeError::StreamClosed)??;
let HolePunch { r#type, obs_addrs } = substream
.next()
.await
.ok_or(InboundUpgradeError::StreamClosed)??;

let obs_addrs = if obs_addrs.is_empty() {
return Err(UpgradeError::NoAddresses);
return Err(InboundUpgradeError::NoAddresses);
} else {
obs_addrs
.into_iter()
Expand All @@ -65,14 +67,15 @@ impl upgrade::InboundUpgrade<NegotiatedSubstream> for Upgrade {
Err(_) => true,
})
.collect::<Result<Vec<Multiaddr>, _>>()
.map_err(|_| UpgradeError::InvalidAddrs)?
.map_err(|_| InboundUpgradeError::InvalidAddrs)?
};

let r#type = hole_punch::Type::from_i32(r#type).ok_or(UpgradeError::ParseTypeField)?;
let r#type =
hole_punch::Type::from_i32(r#type).ok_or(InboundUpgradeError::ParseTypeField)?;

match r#type {
hole_punch::Type::Connect => {}
hole_punch::Type::Sync => return Err(UpgradeError::UnexpectedTypeSync),
hole_punch::Type::Sync => return Err(InboundUpgradeError::UnexpectedTypeSync),
}

Ok(PendingConnect {
Expand All @@ -93,7 +96,7 @@ impl PendingConnect {
pub async fn accept(
mut self,
local_obs_addrs: Vec<Multiaddr>,
) -> Result<Vec<Multiaddr>, UpgradeError> {
) -> Result<Vec<Multiaddr>, InboundUpgradeError> {
let msg = HolePunch {
r#type: hole_punch::Type::Connect.into(),
obs_addrs: local_obs_addrs.into_iter().map(|a| a.to_vec()).collect(),
Expand All @@ -104,11 +107,12 @@ impl PendingConnect {
.substream
.next()
.await
.ok_or(UpgradeError::StreamClosed)??;
.ok_or(InboundUpgradeError::StreamClosed)??;

let r#type = hole_punch::Type::from_i32(r#type).ok_or(UpgradeError::ParseTypeField)?;
let r#type =
hole_punch::Type::from_i32(r#type).ok_or(InboundUpgradeError::ParseTypeField)?;
match r#type {
hole_punch::Type::Connect => return Err(UpgradeError::UnexpectedTypeConnect),
hole_punch::Type::Connect => return Err(InboundUpgradeError::UnexpectedTypeConnect),
hole_punch::Type::Sync => {}
}

Expand All @@ -117,7 +121,7 @@ impl PendingConnect {
}

#[derive(Debug, Error)]
pub enum UpgradeError {
pub enum InboundUpgradeError {
#[error(transparent)]
Codec(#[from] prost_codec::Error),
#[error("Stream closed")]
Expand Down
19 changes: 11 additions & 8 deletions protocols/dcutr/src/protocol/outbound.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ impl Upgrade {

impl upgrade::OutboundUpgrade<NegotiatedSubstream> for Upgrade {
type Output = Connect;
type Error = UpgradeError;
type Error = OutboundUpgradeError;
type Future = BoxFuture<'static, Result<Self::Output, Self::Error>>;

fn upgrade_outbound(self, substream: NegotiatedSubstream, _: Self::Info) -> Self::Future {
Expand All @@ -69,19 +69,22 @@ impl upgrade::OutboundUpgrade<NegotiatedSubstream> for Upgrade {

let sent_time = Instant::now();

let HolePunch { r#type, obs_addrs } =
substream.next().await.ok_or(UpgradeError::StreamClosed)??;
let HolePunch { r#type, obs_addrs } = substream
.next()
.await
.ok_or(OutboundUpgradeError::StreamClosed)??;

let rtt = sent_time.elapsed();

let r#type = hole_punch::Type::from_i32(r#type).ok_or(UpgradeError::ParseTypeField)?;
let r#type =
hole_punch::Type::from_i32(r#type).ok_or(OutboundUpgradeError::ParseTypeField)?;
match r#type {
hole_punch::Type::Connect => {}
hole_punch::Type::Sync => return Err(UpgradeError::UnexpectedTypeSync),
hole_punch::Type::Sync => return Err(OutboundUpgradeError::UnexpectedTypeSync),
}

let obs_addrs = if obs_addrs.is_empty() {
return Err(UpgradeError::NoAddresses);
return Err(OutboundUpgradeError::NoAddresses);
} else {
obs_addrs
.into_iter()
Expand All @@ -92,7 +95,7 @@ impl upgrade::OutboundUpgrade<NegotiatedSubstream> for Upgrade {
Err(_) => true,
})
.collect::<Result<Vec<Multiaddr>, _>>()
.map_err(|_| UpgradeError::InvalidAddrs)?
.map_err(|_| OutboundUpgradeError::InvalidAddrs)?
};

let msg = HolePunch {
Expand All @@ -115,7 +118,7 @@ pub struct Connect {
}

#[derive(Debug, Error)]
pub enum UpgradeError {
pub enum OutboundUpgradeError {
#[error(transparent)]
Codec(#[from] prost_codec::Error),
#[error("Stream closed")]
Expand Down