Skip to main content

PacketPipelineBuilder

Struct PacketPipelineBuilder 

Source
pub struct PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> {
    packet_key: OffchainKeypair,
    wire_msg: (WOut, WIn),
    codec: (C, D),
    cfg: PacketPipelineConfig,
    api: (AppOut, AppIn),
    counters: PeerProtocolCounterRegistry,
    ticket_proc: Option<T>,
    ticket_events: Option<TEvt>,
}
Expand description

Builder for constructing the HOPR packet pipeline for a specific node type.

The builder is constructed from a packet key via PacketPipelineBuilder::new; the transport, codec and application API must then be provided via the PacketPipelineBuilder::transport, PacketPipelineBuilder::codec and PacketPipelineBuilder::api builder methods.

Terminal methods for each node type are then exposed:

The pipeline does not handle mixing itself; it needs to be injected as a separate process overlay on top of the wire_msg Stream or Sink.

Fields§

§packet_key: OffchainKeypair§wire_msg: (WOut, WIn)§codec: (C, D)§cfg: PacketPipelineConfig§api: (AppOut, AppIn)§counters: PeerProtocolCounterRegistry§ticket_proc: Option<T>§ticket_events: Option<TEvt>

Implementations§

Source§

impl PacketPipelineBuilder<Unset, Unset, Unset, Unset, NoopTicketProcessor, Drain<TicketEvent>, Unset, Unset>

Source

pub fn new(packet_key: OffchainKeypair) -> Self

Creates a new builder with the common parameters shared by all node types.

The transport, codec and application API must be supplied via PacketPipelineBuilder::transport, PacketPipelineBuilder::codec and PacketPipelineBuilder::api before any of the terminal build_for_* methods can be called.

The pipeline configuration defaults to PacketPipelineConfig::default; use PacketPipelineBuilder::with_config to override it. The per-peer counter registry defaults to an empty one; use PacketPipelineBuilder::with_counters to override it.

Use PacketPipelineBuilder::with_ticket_processing to attach ticket processing before calling PacketPipelineBuilder::build_for_relay.

Source§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>

Source

pub fn with_config(self, cfg: PacketPipelineConfig) -> Self

Overrides the default PacketPipelineConfig.

Source

pub fn with_counters(self, counters: PeerProtocolCounterRegistry) -> Self

Overrides the default (empty) per-peer protocol counter registry.

Source

pub fn transport<WIn2, WOut2>( self, wire_msg: (WOut2, WIn2), ) -> PacketPipelineBuilder<WIn2, WOut2, C, D, T, TEvt, AppOut, AppIn>

Sets the underlying wire-message transport (outgoing sink, incoming stream).

Source

pub fn codec<C2, D2>( self, codec: (C2, D2), ) -> PacketPipelineBuilder<WIn, WOut, C2, D2, T, TEvt, AppOut, AppIn>

Sets the packet codec (encoder, decoder).

Source

pub fn api<AppOut2, AppIn2>( self, api: (AppOut2, AppIn2), ) -> PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut2, AppIn2>

Sets the application API (outgoing sink for received data, incoming stream for data to send).

Source

pub fn with_ticket_processing<T2, TEvt2>( self, ticket_proc: T2, ticket_events: TEvt2, ) -> PacketPipelineBuilder<WIn, WOut, C, D, T2, TEvt2, AppOut, AppIn>
where T2: UnacknowledgedTicketProcessor + Sync + Send + 'static, TEvt2: Sink<TicketEvent> + Clone + Unpin + Send + 'static, TEvt2::Error: Error,

Attaches a ticket processor and a ticket-events sink to the builder.

Required before calling PacketPipelineBuilder::build_for_relay. Has no effect on Entry/Exit builds, which never process tickets.

Source§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>
where WOut: Sink<(PeerId, Bytes)> + Clone + Unpin + Send + 'static, WOut::Error: Error, WIn: Stream<Item = (PeerId, Bytes)> + Send + 'static, C: PacketEncoder + Sync + Send + 'static, D: PacketDecoder + Sync + Send + 'static, T: UnacknowledgedTicketProcessor + Sync + Send + 'static, TEvt: Sink<TicketEvent> + Clone + Unpin + Send + 'static, TEvt::Error: Error, AppOut: Sink<(HoprPseudonym, ApplicationDataIn)> + Send + 'static, AppOut::Error: Error, AppIn: Stream<Item = (ResolvedTransportRouting<HoprSurb>, ApplicationDataOut)> + Send + 'static,

Source

pub fn build_for_relay(self) -> AbortableList<PacketPipelineProcesses>

Builds and starts the full packet pipeline for a HOPR Relay node.

Relay nodes run the full pipeline: outgoing/incoming messages, outgoing acknowledgements, and incoming acknowledgements (with ticket processing).

§Panics

Panics if PacketPipelineBuilder::with_ticket_processing was not called before this method.

Source§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>
where WOut: Sink<(PeerId, Bytes)> + Clone + Unpin + Send + 'static, WOut::Error: Error, WIn: Stream<Item = (PeerId, Bytes)> + Send + 'static, C: PacketEncoder + Sync + Send + 'static, D: PacketDecoder + Sync + Send + 'static, AppOut: Sink<(HoprPseudonym, ApplicationDataIn)> + Send + 'static, AppOut::Error: Error, AppIn: Stream<Item = (ResolvedTransportRouting<HoprSurb>, ApplicationDataOut)> + Send + 'static,

Source

pub fn build_for_entry(self) -> AbortableList<PacketPipelineProcesses>

Builds and starts the packet pipeline for a HOPR Entry node.

Entry nodes never relay packets and therefore do not process tickets. As a consequence, the incoming acknowledgement pipeline is not started. Any ticket processor or ticket events sink previously set via PacketPipelineBuilder::with_ticket_processing is ignored.

Source

pub fn build_for_exit(self) -> AbortableList<PacketPipelineProcesses>

Builds and starts the packet pipeline for a HOPR Exit node.

Exit nodes do not process tickets either. However, in contrast to PacketPipelineBuilder::build_for_entry, the incoming acknowledgement pipeline is kept running (it only drains the stream) to support future development. Any ticket processor or ticket events sink previously set via PacketPipelineBuilder::with_ticket_processing is ignored.

Auto Trait Implementations§

§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> Freeze for PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>
where WOut: Freeze, WIn: Freeze, C: Freeze, D: Freeze, AppOut: Freeze, AppIn: Freeze, T: Freeze, TEvt: Freeze,

§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> !RefUnwindSafe for PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>

§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> Send for PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>
where WOut: Send, WIn: Send, C: Send, D: Send, AppOut: Send, AppIn: Send, T: Send, TEvt: Send,

§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> Sync for PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>
where WOut: Sync, WIn: Sync, C: Sync, D: Sync, AppOut: Sync, AppIn: Sync, T: Sync, TEvt: Sync,

§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> Unpin for PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>
where WOut: Unpin, WIn: Unpin, C: Unpin, D: Unpin, AppOut: Unpin, AppIn: Unpin, T: Unpin, TEvt: Unpin,

§

impl<WIn, WOut, C, D, T, TEvt, AppOut, AppIn> !UnwindSafe for PacketPipelineBuilder<WIn, WOut, C, D, T, TEvt, AppOut, AppIn>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more