Implementation of the libp2p circuit relay specification.
```rust
#
# let (relaytransport, relaybehaviour) = newtransportand_behaviour( RelayConfig::default(), MemoryTransport::default(), );
let transport = relay_transport .upgrade(upgrade::Version::V1) .authenticate(plain) .multiplex(RemuxConfig::default()) .boxed();
let mut swarm = Swarm::new(transport, relaybehaviour, localpeer_id);
let relayaddr = Multiaddr::fromstr("/memory/1234").unwrap() .with(Protocol::P2p(PeerId::random().into())) .with(Protocol::P2pCircuit); let dstaddr = relayaddr.clone().with(Protocol::Memory(5678));
// Listen for incoming connections via relay node (1234). Swarm::listenon(&mut swarm, relayaddr).unwrap();
// Dial node (5678) via relay node (1234). Swarm::dialaddr(&mut swarm, dstaddr).unwrap(); ```
Source: The node initiating a connection via a relay to a destination.
Relay: The node being asked by a source to relay to a destination.
Destination: The node contacted by the source via the relay.
Outgoing relay request: The request sent by a source to a relay.
Incoming relay request: The request received by a relay from a source.
Outgoing destination request: The request sent by a relay to a destination.
Incoming destination request: The request received by a destination from a relay.