Commit Graph

2121 Commits

Author SHA1 Message Date
e9e366cbe8 protocols/kad/tests: Ignore Kademlia routing update event (#1993)
In the `libp2p-relay` Kademlia discovery test, ignore Kademlia routing
update events when waiting for a ping from the destination node.
2021-03-11 18:16:33 +01:00
0c412fbc1c protocols/req-resp: Panic in inbound upgrade when handler dropped (#1990)
An inbound upgrade should not be polled after the corresponding handler
has been dropped. Enforce this assumption by panicing in such case.
2021-03-11 16:54:18 +01:00
2f9c1759e6 protocols/relay: Implement circuit relay specification (#1838)
This commit implements the [libp2p circuit
relay](https://github.com/libp2p/specs/tree/master/relay) specification. It is
based on previous work from https://github.com/libp2p/rust-libp2p/pull/1134.

Instead of altering the `Transport` trait, the approach taken in this commit
is to wrap an existing implementation of `Transport` allowing one to:

- Intercept `dial` requests with a relayed address.

- Inject incoming relayed connections with the local node being the destination.

- Intercept `listen_on` requests pointing to a relay, ensuring to keep a
  constant connection to the relay, waiting for incoming requests with the local
  node being the destination.

More concretely one would wrap an existing `Transport` implementation as seen
below, allowing the `Relay` behaviour and the `RelayTransport` to communicate
via channels.

### Example

```rust
let (relay_transport, relay_behaviour) = new_transport_and_behaviour(
    RelayConfig::default(),
    MemoryTransport::default(),
);

let transport = relay_transport
    .upgrade(upgrade::Version::V1)
    .authenticate(plaintext)
    .multiplex(YamuxConfig::default())
    .boxed();

let mut swarm = Swarm::new(transport, relay_behaviour, local_peer_id);

let relay_addr = Multiaddr::from_str("/memory/1234").unwrap()
    .with(Protocol::P2p(PeerId::random().into()))
    .with(Protocol::P2pCircuit);
let dst_addr = relay_addr.clone().with(Protocol::Memory(5678));

// Listen for incoming connections via relay node (1234).
Swarm::listen_on(&mut swarm, relay_addr).unwrap();

// Dial node (5678) via relay node (1234).
Swarm::dial_addr(&mut swarm, dst_addr).unwrap();
```

Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
Co-authored-by: David Craven <david@craven.ch>
2021-03-11 16:07:59 +01:00
f48bb15fa7 [kad] Provide a targeted store operation. (#1988)
* Add `Kademlia::put_record_to` for storing a record at specific nodes,
e.g. for write-back caching after a successful read. In that context,
peers that were queried in a successful `Kademlia::get_record` operation but
did not return a record are now returned in the `GetRecordOk::no_record`
list of peer IDs.

Closes https://github.com/libp2p/rust-libp2p/issues/1577.

* Update protocols/kad/src/behaviour.rs

Co-authored-by: Max Inden <mail@max-inden.de>

* Refine implementation.

Rather than returning the peers that are cache candidates
in a `Vec` in an arbitrary order, use a `BTreeMap`. Furthermore,
make the caching configurable, being enabled by default with
`max_peers` of 1. By configuring it with `max_peers` > 1 it is
now also possible to control at how many nodes the record is cached
automatically after a lookup with quorum 1. When enabled,
successful lookups will always return `cache_candidates`, which
can be used explicitly with `Kademlia::put_record_to` after
lookups with a quorum > 1.

* Re-export KademliaCaching

* Update protocols/kad/CHANGELOG.md

Co-authored-by: Max Inden <mail@max-inden.de>

* Clarify changelog.

Co-authored-by: Max Inden <mail@max-inden.de>
2021-03-09 18:35:43 +01:00
67c465c726 protocols/request-response: Update CHANGELOG.md 2021-03-09 17:54:23 +01:00
ed6f972162 protocols/request-response: Close response stream even if response cannot be sent (#1987)
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-03-09 17:50:57 +01:00
f304fe762b [core] Shorten and unify Debug impls of public keys. (#1982)
* Shorten and unify Debug impls of public keys.

ed25519 `PublicKey` and secp256k1 `PublicKey` get a new `Debug`
impl, while RSAs `PublicKey` is aligned with the others for uniformity.

* Update version and changelog.
2021-03-09 10:56:19 +01:00
dcfbe4f2cf Update version and changelog. 2021-03-03 11:04:16 +01:00
6eb8b65b85 Don't leak default features (#1986) 2021-03-03 10:57:25 +01:00
9e6415df74 Update if-watch requirement from 0.1.8 to 0.2.0 (#1979)
* Update if-watch requirement from 0.1.8 to 0.2.0

Updates the requirements on [if-watch](https://github.com/dvc94ch/if-watch) to permit the latest version.
- [Release notes](https://github.com/dvc94ch/if-watch/releases)
- [Commits](https://github.com/dvc94ch/if-watch/commits)

Signed-off-by: dependabot[bot] <support@github.com>

* Update libp2p-tcp.

* Update libp2p-tcp version and changelog.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Roman S. Borschel <roman@parity.io>
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
2021-03-02 10:55:19 +01:00
b727efee13 Don't poll network unnecessarily. (#1977)
* Don't poll network unnecessarily.

* Fix ci.

* Damn tokio.

* Address review comments.

* Update deps.

* Don't drop packet if socket is not writable.

* Increase TTL and rename to `query_interval`.

* Update CHANGELOG.

Co-authored-by: Roman S. Borschel <roman@parity.io>
2021-03-02 10:18:24 +01:00
6b5fa0324d Prepare multistream-select-0.10.2 2021-03-01 15:56:00 +01:00
51dba42490 Re-enable 'parallel negotiation'. (#1934)
Based on an estimate of the number of alternative
protocols the dialer supports.
2021-03-01 15:52:54 +01:00
b81100c2f6 Parsing mDNS packet failure: warn -> debug (#1978)
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
2021-02-25 15:41:47 +01:00
7dd42fcaaf [swarm] Remove substream-specific protocol negotiation version. (#1962)
* Remove substream-specific protocol negotiation version.

Remove the option for a substream-specific multistream select protocol override.
The override at this granularity is no longer deemed useful, in particular because
it can usually not be configured for existing protocols like `libp2p-kad` and others.
There is a `Swarm`-scoped configuration for this version available since
[1858](https://github.com/libp2p/rust-libp2p/pull/1858).

* Update protocol crate versions and changelogs.

* Clean up documentation.
2021-02-25 11:35:52 +01:00
6a7576afec README.md: Link to "comit" GitHub org instead of single project (#1961)
Numerous projects in our org use rust-libp2p. Link to the whole org instead of one specific repository.
2021-02-22 09:54:12 +01:00
f241bce7c1 Update release dates. 2021-02-17 11:05:20 +01:00
c072cd29d4 Update to yamux-0.8.1 (#1959) 2021-02-17 10:57:07 +01:00
cda7c3504e Prepare v0.35 (#1957) 2021-02-15 20:06:50 +01:00
26f6b96d1e *: Require at least if-watch v0.1.8 (#1956) 2021-02-15 16:11:30 +01:00
6499e924a3 Make clippy "happy". (#1950)
* Make clippy "happy".

Address all clippy complaints that are not purely stylistic (or even
have corner cases with false positives). Ignore all "style" and "pedantic" lints.

* Fix tests.

* Undo unnecessary API change.
2021-02-15 11:59:51 +01:00
12557a3c86 swarm/behaviour: Document inject_connected called for first only (#1954)
`NetworkBehaviour::inject_connected` is called for the first established
connection to a peer only. See `swarm/src/lib.rs`:

```rust
this.behaviour.inject_connection_established(&peer_id, &connection.id(), &endpoint);
if num_established.get() == 1 {
    this.behaviour.inject_connected(&peer_id);
}
```

This commit adjusts the documentation accordingly.
2021-02-15 11:22:28 +01:00
2816023414 Bump styfle/cancel-workflow-action from 0.7.0 to 0.8.0 (#1955)
Bumps [styfle/cancel-workflow-action](https://github.com/styfle/cancel-workflow-action) from 0.7.0 to 0.8.0.
- [Release notes](https://github.com/styfle/cancel-workflow-action/releases)
- [Commits](https://github.com/styfle/cancel-workflow-action/compare/0.7.0...3d86a7cc43670094ac248017207be0295edbc31d)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-02-15 11:03:23 +01:00
639e5c678e Update unsigned-varint and asynchronous-codec (#1946)
* Update unsigned-varint requirement from 0.6 to 0.7

Updates the requirements on [unsigned-varint](https://github.com/paritytech/unsigned-varint) to permit the latest version.
- [Release notes](https://github.com/paritytech/unsigned-varint/releases)
- [Changelog](https://github.com/paritytech/unsigned-varint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/paritytech/unsigned-varint/compare/v0.6.0...v0.7.0)

Signed-off-by: dependabot[bot] <support@github.com>

* *: Update to asynchronous-codec v0.6

* transports/plaintext: Use Framed::into_parts

* *: Update cargo tomls and changelogs

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-02-13 20:15:14 +01:00
5ddc8d4bf6 README.md: Add Forest to users list (#1953) 2021-02-12 14:43:31 +01:00
40ce05f37e protocols/request-response: Test is_pending_outbound (#1938)
Signed-off-by: Tejas Sanap <sanap.tejas@gmail.com>
2021-02-10 18:03:44 +01:00
4d290c5a32 README: Remove dead-link badges (#1951) 2021-02-09 11:50:50 +01:00
ba77c49de7 Bump actions/cache from v2 to v2.1.4 (#1949)
Bumps [actions/cache](https://github.com/actions/cache) from v2 to v2.1.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2...26968a09c0ea4f3e233fdddbafd1166051a095f6)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-02-08 10:05:20 +01:00
c897df3f34 swarm/src/toggle: Ignore listen upgr errors when disabled (#1945)
* swarm/src/toggle: Ignore listen upgr errors when disabled

A disabled `ToggleProtoHandler` can receive listen upgrade errors in the
following two cases:

1. Protocol negotiation on an incoming stream failed with no protocol being
   agreed on.

2. When combining `ProtocolsHandler` implementations a single `ProtocolsHandler`
   might be notified of an inbound upgrade error unrelated to its own upgrade
   logic. For example when nesting a `ToggleProtoHandler` in a
   `ProtocolsHandlerSelect` the former might receive an inbound upgrade error
   even when disabled.

`ToggleProtoHandler` should ignore the error in both of these cases.

* *: Prepare libp2p-swarm v0.27.2 release
2021-02-04 12:42:31 +01:00
d94d53abbb Move some crates. (#1941)
Move transport upgrade protocols from `protocols/`
to `transports/`, such that only "application protocols"
that depend on `libp2p-swarm` remain in `protocols/`,
whereas there is no such dependency in `transports/`
outside of integration tests.

Tweak README and top-level CHANGELOG.
2021-02-01 16:37:19 +01:00
2ecf42a2bf [libp2p-secio] Remove crate. (#1940)
* Remove the SECIO transport protocol.

* Remove stray mentions of secio.
2021-02-01 14:39:44 +01:00
1a01dd16cb protocols/req-resp: Document uniqueness of RequestIds (#1943) 2021-02-01 14:32:47 +01:00
6d0773b68e [libp2p-deflate] Ensure read buffer is initialised. (#1933)
* Ensure read buffer is initialised.

* Prepare libp2p-deflate-0.27.1.
2021-01-27 13:29:30 +01:00
b822490ddc Prepare libp2p-swarm-0.27.1 2021-01-27 12:46:14 +01:00
ab6fecd9f3 Fix DialPeerCondition::Always handling (#1937)
* fix: always dial with condition Always

* chore: changelog note

* refactor: exhaustive DialPeerCondition matching

Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
2021-01-27 11:05:35 +01:00
8aeb7b3db0 Allow OneShotHandler's max_dial_negotiate limit to be configurable. (#1936)
* Allow OneShotHandler's `max_dial_negotiate` limit to be configurable.

* Update version and CHANGELOG.,

Co-authored-by: Roman S. Borschel <roman@parity.io>
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
2021-01-27 10:44:08 +01:00
ac9798297b Rename and move libp2p-core-derive as libp2p-swarm-derive. (#1935) 2021-01-26 22:49:08 +01:00
6400719ae9 protocols/request-response: Add forgotten changelog entry 2021-01-21 15:40:26 +01:00
25ea8b67ff *: Update changelogs and cargo tomls for req-resp patch 2021-01-21 14:36:58 +01:00
5d22e30cc9 protocols/req-resp: Make is_pending_outbound return true on pending connection (#1928)
`is_pending_outbound` should return true if the connection
to the mentioned peer hasn't been established, yet.

Closes issue: #1885

Signed-off-by: Tejas Sanap <sanap.tejas@gmail.com>
2021-01-21 14:34:58 +01:00
bbd3df64ed *: Update changelogs and cargo tomls for gossipsub change 2021-01-20 10:50:23 +01:00
eac43d144f protocols/gossipsub: Prevent non-published messages being added to caches (#1930)
Currently, Gossipsub messages may not be published on a topic if there are no
subscribed peers on that topic, however they are being added to a duplicate
cache. If the messages are content-addressed, this prevents the user from
attempting to republish the message in the future.

This commit modifies the logic such that messages are only added to the caches
(duplicate, memcache and published_messages) if the message could be published
to at least one peer.

Previously, a failed publish would be added the memcache. This meant that the
router would gossip about a failed publish, such that if a peer joined the topic
after the failed publish (but within the gossip history time window) the message
could still be propagated to the newly connected peers. With this PR, a failed
publish now definitively indicates the message will not be published on the
network and the user is required to re-submit at a later time, once sufficient
peers exist on the topic.
2021-01-20 10:47:05 +01:00
2c4de90356 Bump styfle/cancel-workflow-action from 0.6.0 to 0.7.0 (#1922)
Bumps [styfle/cancel-workflow-action](https://github.com/styfle/cancel-workflow-action) from 0.6.0 to 0.7.0.
- [Release notes](https://github.com/styfle/cancel-workflow-action/releases)
- [Commits](https://github.com/styfle/cancel-workflow-action/compare/0.6.0...d7e57e26a6f753933f8ef746a37097a61375236b)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Max Inden <mail@max-inden.de>
2021-01-14 20:16:14 +01:00
75b5fdfbca Fix a typo in gossipsub (#1921) 2021-01-13 08:44:07 +01:00
9aaa624147 protocols/gossipsub/Cargo.toml: Fix feature name typo 2021-01-12 21:07:18 +01:00
db02cfae37 *: Prepare v0.34.0 release (#1918)
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
2021-01-12 20:33:43 +01:00
a10f4e2879 *: Update to tokio v1.0.1 (#1919)
Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
2021-01-12 15:50:24 +01:00
a223e4ba9d [websocket] Switch async-tls to futures-rustls (#1889)
* [websocket] Switch async-tls to async-rustls

* Switch to futures-rustls

Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
2021-01-12 15:18:44 +01:00
477f7ae6c4 *: Update to prost-build v0.7 (#1917) 2021-01-12 14:41:07 +01:00
7367927bd8 Update uint requirement from 0.8 to 0.9 (#1915)
Updates the requirements on [uint](https://github.com/paritytech/parity-common) to permit the latest version.
- [Release notes](https://github.com/paritytech/parity-common/releases)
- [Commits](https://github.com/paritytech/parity-common/compare/uint-v0.8.3...uint-v0.9.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-01-12 13:53:51 +01:00