Struct lightning::onion_message::OnionMessenger
source · pub struct OnionMessenger<ES: Deref, NS: Deref, L: Deref, CMH: Deref>where
ES::Target: EntropySource,
NS::Target: NodeSigner,
L::Target: Logger,
CMH::Target: CustomOnionMessageHandler,{ /* private fields */ }
Expand description
A sender, receiver and forwarder of onion messages. In upcoming releases, this object will be used to retrieve invoices and fulfill invoice requests from offers. Currently, only sending and receiving custom onion messages is supported.
Example
// Create the onion messenger. This must use the same `keys_manager` as is passed to your
// ChannelManager.
let onion_messenger = OnionMessenger::new(&keys_manager, &keys_manager, logger, &your_custom_message_handler);
impl Writeable for YourCustomMessage {
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
// Write your custom onion message to `w`
}
}
impl CustomOnionMessageContents for YourCustomMessage {
fn tlv_type(&self) -> u64 {
your_custom_message_type
}
}
// Send a custom onion message to a node id.
let intermediate_hops = [hop_node_id1, hop_node_id2];
let reply_path = None;
let message = OnionMessageContents::Custom(your_custom_message);
onion_messenger.send_onion_message(&intermediate_hops, Destination::Node(destination_node_id), message, reply_path);
// Create a blinded path to yourself, for someone to send an onion message to.
let hops = [hop_node_id3, hop_node_id4, your_node_id];
let blinded_path = BlindedPath::new(&hops, &keys_manager, &secp_ctx).unwrap();
// Send a custom onion message to a blinded path.
let reply_path = None;
let message = OnionMessageContents::Custom(your_custom_message);
onion_messenger.send_onion_message(&intermediate_hops, Destination::BlindedPath(blinded_path), message, reply_path);
Implementations§
source§impl<ES: Deref, NS: Deref, L: Deref, CMH: Deref> OnionMessenger<ES, NS, L, CMH>where
ES::Target: EntropySource,
NS::Target: NodeSigner,
L::Target: Logger,
CMH::Target: CustomOnionMessageHandler,
impl<ES: Deref, NS: Deref, L: Deref, CMH: Deref> OnionMessenger<ES, NS, L, CMH>where ES::Target: EntropySource, NS::Target: NodeSigner, L::Target: Logger, CMH::Target: CustomOnionMessageHandler,
sourcepub fn new(
entropy_source: ES,
node_signer: NS,
logger: L,
custom_handler: CMH
) -> Self
pub fn new( entropy_source: ES, node_signer: NS, logger: L, custom_handler: CMH ) -> Self
Constructs a new OnionMessenger
to send, forward, and delegate received onion messages to
their respective handlers.
sourcepub fn send_onion_message<T: CustomOnionMessageContents>(
&self,
intermediate_nodes: &[PublicKey],
destination: Destination,
message: OnionMessageContents<T>,
reply_path: Option<BlindedPath>
) -> Result<(), SendError>
pub fn send_onion_message<T: CustomOnionMessageContents>( &self, intermediate_nodes: &[PublicKey], destination: Destination, message: OnionMessageContents<T>, reply_path: Option<BlindedPath> ) -> Result<(), SendError>
Send an onion message with contents message
to destination
, routing it through intermediate_nodes
.
See OnionMessenger
for example usage.
Trait Implementations§
source§impl<ES: Deref, NS: Deref, L: Deref, CMH: Deref> OnionMessageHandler for OnionMessenger<ES, NS, L, CMH>where
ES::Target: EntropySource,
NS::Target: NodeSigner,
L::Target: Logger,
CMH::Target: CustomOnionMessageHandler + Sized,
impl<ES: Deref, NS: Deref, L: Deref, CMH: Deref> OnionMessageHandler for OnionMessenger<ES, NS, L, CMH>where ES::Target: EntropySource, NS::Target: NodeSigner, L::Target: Logger, CMH::Target: CustomOnionMessageHandler + Sized,
source§fn handle_onion_message(&self, _peer_node_id: &PublicKey, msg: &OnionMessage)
fn handle_onion_message(&self, _peer_node_id: &PublicKey, msg: &OnionMessage)
Handle an incoming onion message. Currently, if a message was destined for us we will log, but soon we’ll delegate the onion message to a handler that can generate invoices or send payments.
source§fn peer_connected(
&self,
their_node_id: &PublicKey,
init: &Init,
_inbound: bool
) -> Result<(), ()>
fn peer_connected( &self, their_node_id: &PublicKey, init: &Init, _inbound: bool ) -> Result<(), ()>
Called when a connection is established with a peer. Can be used to track which peers
advertise onion message support and are online. Read more
source§fn peer_disconnected(&self, their_node_id: &PublicKey)
fn peer_disconnected(&self, their_node_id: &PublicKey)
Indicates a connection to the peer failed/an existing connection was lost. Allows handlers to
drop and refuse to forward onion messages to this peer.
source§fn provided_node_features(&self) -> NodeFeatures
fn provided_node_features(&self) -> NodeFeatures
Gets the node feature flags which this handler itself supports. All available handlers are
queried similarly and their feature flags are OR’d together to form the
NodeFeatures
which are broadcasted in our NodeAnnouncement
message.source§fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures
Gets the init feature flags which should be sent to the given peer. All available handlers
are queried similarly and their feature flags are OR’d together to form the
InitFeatures
which are sent in our Init
message. Read moresource§impl<ES: Deref, NS: Deref, L: Deref, CMH: Deref> OnionMessageProvider for OnionMessenger<ES, NS, L, CMH>where
ES::Target: EntropySource,
NS::Target: NodeSigner,
L::Target: Logger,
CMH::Target: CustomOnionMessageHandler,
impl<ES: Deref, NS: Deref, L: Deref, CMH: Deref> OnionMessageProvider for OnionMessenger<ES, NS, L, CMH>where ES::Target: EntropySource, NS::Target: NodeSigner, L::Target: Logger, CMH::Target: CustomOnionMessageHandler,
source§fn next_onion_message_for_peer(
&self,
peer_node_id: PublicKey
) -> Option<OnionMessage>
fn next_onion_message_for_peer( &self, peer_node_id: PublicKey ) -> Option<OnionMessage>
Gets the next pending onion message for the peer with the given node id.