mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-05-23 16:11:19 +00:00
feat(core): remove SingletonMuxer
This is effectively dead code as nothing within `rust-libp2p` uses it. Users should provide it themselves if they need it. Pull-Request: #3883.
This commit is contained in:
parent
53e5370919
commit
15c623c29a
@ -13,8 +13,12 @@
|
|||||||
We delete the `ProtocolName` trait and replace it with a requirement for `AsRef<str>`.
|
We delete the `ProtocolName` trait and replace it with a requirement for `AsRef<str>`.
|
||||||
See [PR 3746]
|
See [PR 3746]
|
||||||
|
|
||||||
|
- Remove `SingletonMuxer`.
|
||||||
|
See [PR 3883].
|
||||||
|
|
||||||
[spec]: https://github.com/libp2p/specs/blob/master/connections/README.md#multistream-select
|
[spec]: https://github.com/libp2p/specs/blob/master/connections/README.md#multistream-select
|
||||||
[PR 3746]: https://github.com/libp2p/rust-libp2p/pull/3746
|
[PR 3746]: https://github.com/libp2p/rust-libp2p/pull/3746
|
||||||
|
[PR 3883]: https://github.com/libp2p/rust-libp2p/pull/3883
|
||||||
|
|
||||||
## 0.39.2
|
## 0.39.2
|
||||||
|
|
||||||
|
@ -57,10 +57,8 @@ use std::pin::Pin;
|
|||||||
|
|
||||||
pub use self::boxed::StreamMuxerBox;
|
pub use self::boxed::StreamMuxerBox;
|
||||||
pub use self::boxed::SubstreamBox;
|
pub use self::boxed::SubstreamBox;
|
||||||
pub use self::singleton::SingletonMuxer;
|
|
||||||
|
|
||||||
mod boxed;
|
mod boxed;
|
||||||
mod singleton;
|
|
||||||
|
|
||||||
/// Provides multiplexing for a connection by allowing users to open substreams.
|
/// Provides multiplexing for a connection by allowing users to open substreams.
|
||||||
///
|
///
|
||||||
|
@ -1,101 +0,0 @@
|
|||||||
// Copyright 2019 Parity Technologies (UK) Ltd.
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
// copy of this software and associated documentation files (the "Software"),
|
|
||||||
// to deal in the Software without restriction, including without limitation
|
|
||||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
// and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
// Software is furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
// DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
use crate::connection::Endpoint;
|
|
||||||
use crate::muxing::{StreamMuxer, StreamMuxerEvent};
|
|
||||||
|
|
||||||
use futures::prelude::*;
|
|
||||||
use std::cell::Cell;
|
|
||||||
use std::pin::Pin;
|
|
||||||
use std::{io, task::Context, task::Poll};
|
|
||||||
|
|
||||||
/// Implementation of `StreamMuxer` that allows only one substream on top of a connection,
|
|
||||||
/// yielding the connection itself.
|
|
||||||
///
|
|
||||||
/// Applying this muxer on a connection doesn't read or write any data on the connection itself.
|
|
||||||
/// Most notably, no protocol is negotiated.
|
|
||||||
pub struct SingletonMuxer<TSocket> {
|
|
||||||
/// The inner connection.
|
|
||||||
inner: Cell<Option<TSocket>>,
|
|
||||||
/// Our local endpoint. Always the same value as was passed to `new`.
|
|
||||||
endpoint: Endpoint,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<TSocket> SingletonMuxer<TSocket> {
|
|
||||||
/// Creates a new `SingletonMuxer`.
|
|
||||||
///
|
|
||||||
/// If `endpoint` is `Dialer`, then only one outbound substream will be permitted.
|
|
||||||
/// If `endpoint` is `Listener`, then only one inbound substream will be permitted.
|
|
||||||
pub fn new(inner: TSocket, endpoint: Endpoint) -> Self {
|
|
||||||
SingletonMuxer {
|
|
||||||
inner: Cell::new(Some(inner)),
|
|
||||||
endpoint,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<TSocket> StreamMuxer for SingletonMuxer<TSocket>
|
|
||||||
where
|
|
||||||
TSocket: AsyncRead + AsyncWrite + Unpin,
|
|
||||||
{
|
|
||||||
type Substream = TSocket;
|
|
||||||
type Error = io::Error;
|
|
||||||
|
|
||||||
fn poll_inbound(
|
|
||||||
self: Pin<&mut Self>,
|
|
||||||
_: &mut Context<'_>,
|
|
||||||
) -> Poll<Result<Self::Substream, Self::Error>> {
|
|
||||||
let this = self.get_mut();
|
|
||||||
|
|
||||||
match this.endpoint {
|
|
||||||
Endpoint::Dialer => Poll::Pending,
|
|
||||||
Endpoint::Listener => match this.inner.replace(None) {
|
|
||||||
None => Poll::Pending,
|
|
||||||
Some(stream) => Poll::Ready(Ok(stream)),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn poll_outbound(
|
|
||||||
self: Pin<&mut Self>,
|
|
||||||
_: &mut Context<'_>,
|
|
||||||
) -> Poll<Result<Self::Substream, Self::Error>> {
|
|
||||||
let this = self.get_mut();
|
|
||||||
|
|
||||||
match this.endpoint {
|
|
||||||
Endpoint::Listener => Poll::Pending,
|
|
||||||
Endpoint::Dialer => match this.inner.replace(None) {
|
|
||||||
None => Poll::Pending,
|
|
||||||
Some(stream) => Poll::Ready(Ok(stream)),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn poll_close(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Result<(), io::Error>> {
|
|
||||||
Poll::Ready(Ok(()))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn poll(
|
|
||||||
self: Pin<&mut Self>,
|
|
||||||
_: &mut Context<'_>,
|
|
||||||
) -> Poll<Result<StreamMuxerEvent, Self::Error>> {
|
|
||||||
Poll::Pending
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user