Skip to content

Commit

Permalink
transport: Introduce common listener for tcp and websocket (#147)
Browse files Browse the repository at this point in the history
This PR aims to remove duplicated code for socket listener between TCP
and WebSocket transports.

Changes done:
- Extended code logic to facilitate both TCP and WebSockets
- Moved the listener code to a dedicated `common` module
- Provided fairness for polling the listener stream by introducing a
rotating index
- Traits to convert between multiaddr <-> socket addr
- Removed unnecessary cloning of listen addresses 

Part of #70.

---------

Signed-off-by: Alexandru Vasile <[email protected]>
  • Loading branch information
lexnv authored Jun 13, 2024
1 parent ec48b04 commit 70819df
Show file tree
Hide file tree
Showing 9 changed files with 376 additions and 596 deletions.
479 changes: 335 additions & 144 deletions src/transport/websocket/listener.rs → src/transport/common/listener.rs

Large diffs are not rendered by default.

23 changes: 23 additions & 0 deletions src/transport/common/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright 2024 litep2p developers
//
// 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.

//! Shared transport protocol implementation
pub mod listener;
1 change: 1 addition & 0 deletions src/transport/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ use multiaddr::Multiaddr;

use std::{fmt::Debug, time::Duration};

pub(crate) mod common;
pub mod quic;
pub mod tcp;
pub mod webrtc;
Expand Down
4 changes: 2 additions & 2 deletions src/transport/tcp/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,13 @@ pub struct Config {
/// By default the value is set to `2` which means that the `NoiseSocket` will allocate
/// `130 KB` for each outgoing connection.
///
/// The write buffer size is separate from the read-ahead frame count so by default
/// The write buffer size is separate from the read-ahead frame count so by default
/// the Noise code will allocate `2 * 65 KB + 5 * 65 KB = 455 KB` per connection.
pub noise_write_buffer_size: usize,

/// Connection open timeout.
///
/// How long should litep2p wait for a connection to be opend before the host
/// How long should litep2p wait for a connection to be opened before the host
/// is deemed unreachable.
pub connection_open_timeout: std::time::Duration,

Expand Down
5 changes: 1 addition & 4 deletions src/transport/tcp/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,7 @@ use crate::{
multistream_select::{dialer_select_proto, listener_select_proto, Negotiated, Version},
protocol::{Direction, Permit, ProtocolCommand, ProtocolSet},
substream,
transport::{
tcp::{listener::AddressType, substream::Substream},
Endpoint,
},
transport::{common::listener::AddressType, tcp::substream::Substream, Endpoint},
types::{protocol::ProtocolName, ConnectionId, SubstreamId},
BandwidthSink, PeerId,
};
Expand Down
Loading

0 comments on commit 70819df

Please sign in to comment.