diff --git a/radicle-node/src/client.rs b/radicle-node/src/client.rs index 58cd5d12..8747d4c2 100644 --- a/radicle-node/src/client.rs +++ b/radicle-node/src/client.rs @@ -10,6 +10,7 @@ use crate::clock::RefClock; use crate::profile::Profile; use crate::service::routing; use crate::transport::Transport; +use crate::wire::transcoder::PlainTranscoder; use crate::wire::Wire; use crate::{address, service}; @@ -130,9 +131,11 @@ impl Client { rng, ); + let transcode = PlainTranscoder::default(); + self.reactor.run( &config.listen, - Transport::new(Wire::new(service)), + Transport::new(Wire::new(service, transcode)), self.events, self.commands, )?; diff --git a/radicle-node/src/transport.rs b/radicle-node/src/transport.rs index 9e607e5c..ba081285 100644 --- a/radicle-node/src/transport.rs +++ b/radicle-node/src/transport.rs @@ -11,6 +11,7 @@ use crate::crypto; use crate::service::routing; use crate::service::{Command, DisconnectReason, Event, Service}; use crate::storage::WriteStorage; +use crate::wire::transcoder::Transcode; use crate::wire::Wire; #[derive(Debug)] @@ -19,13 +20,13 @@ struct Peer { } #[derive(Debug)] -pub struct Transport { +pub struct Transport { _peers: HashMap, - inner: Wire, + inner: Wire, } -impl Transport { - pub fn new(inner: Wire) -> Self { +impl Transport { + pub fn new(inner: Wire) -> Self { Self { _peers: HashMap::default(), inner, @@ -33,12 +34,13 @@ impl Transport { } } -impl nakamoto::Protocol for Transport +impl nakamoto::Protocol for Transport where R: routing::Store, - T: WriteStorage + 'static, + W: WriteStorage + 'static, S: address::Store, G: crypto::Signer, + T: Transcode, { type Event = Event; type Command = Command; @@ -86,7 +88,7 @@ where } } -impl Iterator for Transport { +impl Iterator for Transport { type Item = Io; fn next(&mut self) -> Option { @@ -94,15 +96,15 @@ impl Iterator for Transport { } } -impl Deref for Transport { - type Target = Service; +impl Deref for Transport { + type Target = Service; fn deref(&self) -> &Self::Target { &self.inner } } -impl DerefMut for Transport { +impl DerefMut for Transport { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.inner } diff --git a/radicle-node/src/wire.rs b/radicle-node/src/wire.rs index 2343b49e..e7ae91cc 100644 --- a/radicle-node/src/wire.rs +++ b/radicle-node/src/wire.rs @@ -1,4 +1,5 @@ pub mod message; +pub mod transcoder; use std::collections::{BTreeMap, HashMap}; use std::convert::TryFrom; @@ -25,6 +26,7 @@ use crate::service::{filter, routing}; use crate::storage::refs::Refs; use crate::storage::refs::SignedRefs; use crate::storage::WriteStorage; +use crate::wire::transcoder::Transcode; /// The default type we use to represent sizes on the wire. /// @@ -423,33 +425,32 @@ impl Decode for node::Features { } #[derive(Debug)] -pub struct Wire { +pub struct Wire { inboxes: HashMap, - inner: service::Service, + inner: service::Service, + #[allow(dead_code)] + transcoder: T, } -impl Wire { - pub fn new(inner: service::Service) -> Self { +impl Wire { + pub fn new(inner: service::Service, transcoder: T) -> Self { Self { inboxes: HashMap::new(), inner, + transcoder, } } } -impl Wire +impl Wire where R: routing::Store, S: address::Store, - T: WriteStorage + 'static, + W: WriteStorage + 'static, G: Signer, + T: Transcode, { - pub fn connected( - &mut self, - addr: net::SocketAddr, - local_addr: &net::SocketAddr, - link: Link, - ) { + pub fn connected(&mut self, addr: net::SocketAddr, local_addr: &net::SocketAddr, link: Link) { self.inboxes.insert(addr, Decoder::new(256)); self.inner.connected(addr, local_addr, link) } @@ -459,7 +460,7 @@ where addr: &net::SocketAddr, reason: nakamoto::DisconnectReason, ) { - self.inboxes.remove(&addr); + self.inboxes.remove(addr); self.inner.disconnected(addr, &reason) } @@ -486,7 +487,7 @@ where } } -impl Iterator for Wire { +impl Iterator for Wire { type Item = nakamoto::Io; fn next(&mut self) -> Option { @@ -511,15 +512,15 @@ impl Iterator for Wire { } } -impl Deref for Wire { - type Target = service::Service; +impl Deref for Wire { + type Target = service::Service; fn deref(&self) -> &Self::Target { &self.inner } } -impl DerefMut for Wire { +impl DerefMut for Wire { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.inner } diff --git a/radicle-node/src/wire/transcoder.rs b/radicle-node/src/wire/transcoder.rs new file mode 100644 index 00000000..6ca59517 --- /dev/null +++ b/radicle-node/src/wire/transcoder.rs @@ -0,0 +1,6 @@ +pub trait Transcode {} + +#[derive(Debug, Default)] +pub struct PlainTranscoder; + +impl Transcode for PlainTranscoder {}