Remove unused Taproot import.
[rust-lightning] / lightning / src / onion_message / messenger.rs
index 200ee44ee32b89a93d8b8907c7dc949ce77522cb..0e68d09143c00d251c69ee251162960b05ec3bed 100644 (file)
@@ -59,6 +59,7 @@ use crate::prelude::*;
 /// ```
 /// # extern crate bitcoin;
 /// # use bitcoin::hashes::_export::_core::time::Duration;
+/// # use bitcoin::hashes::hex::FromHex;
 /// # use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
 /// # use lightning::blinded_path::BlindedPath;
 /// # use lightning::sign::KeysManager;
@@ -82,7 +83,7 @@ use crate::prelude::*;
 /// # let time = Duration::from_secs(123456);
 /// # let keys_manager = KeysManager::new(&seed, time.as_secs(), time.subsec_nanos());
 /// # let logger = Arc::new(FakeLogger {});
-/// # let node_secret = SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap();
+/// # let node_secret = SecretKey::from_slice(&<Vec<u8>>::from_hex("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap();
 /// # let secp_ctx = Secp256k1::new();
 /// # let hop_node_id1 = PublicKey::from_secret_key(&secp_ctx, &node_secret);
 /// # let (hop_node_id2, hop_node_id3, hop_node_id4) = (hop_node_id1, hop_node_id1, hop_node_id1);
@@ -159,6 +160,7 @@ where
 ///
 /// These are obtained when released from [`OnionMessenger`]'s handlers after which they are
 /// enqueued for sending.
+#[cfg(not(c_bindings))]
 pub struct PendingOnionMessage<T: OnionMessageContents> {
        /// The message contents to send in an [`OnionMessage`].
        pub contents: T,
@@ -170,6 +172,22 @@ pub struct PendingOnionMessage<T: OnionMessageContents> {
        pub reply_path: Option<BlindedPath>,
 }
 
+#[cfg(c_bindings)]
+/// An [`OnionMessage`] for [`OnionMessenger`] to send.
+///
+/// These are obtained when released from [`OnionMessenger`]'s handlers after which they are
+/// enqueued for sending.
+pub type PendingOnionMessage<T: OnionMessageContents> = (T, Destination, Option<BlindedPath>);
+
+pub(crate) fn new_pending_onion_message<T: OnionMessageContents>(
+       contents: T, destination: Destination, reply_path: Option<BlindedPath>
+) -> PendingOnionMessage<T> {
+       #[cfg(not(c_bindings))]
+       return PendingOnionMessage { contents, destination, reply_path };
+       #[cfg(c_bindings)]
+       return (contents, destination, reply_path);
+}
+
 /// A trait defining behavior for routing an [`OnionMessage`].
 pub trait MessageRouter {
        /// Returns a route for sending an [`OnionMessage`] to the given [`Destination`].
@@ -286,7 +304,15 @@ pub trait CustomOnionMessageHandler {
        ///
        /// Typically, this is used for messages initiating a message flow rather than in response to
        /// another message. The latter should use the return value of [`Self::handle_custom_message`].
+       #[cfg(not(c_bindings))]
        fn release_pending_custom_messages(&self) -> Vec<PendingOnionMessage<Self::CustomMessage>>;
+
+       /// Releases any [`Self::CustomMessage`]s that need to be sent.
+       ///
+       /// Typically, this is used for messages initiating a message flow rather than in response to
+       /// another message. The latter should use the return value of [`Self::handle_custom_message`].
+       #[cfg(c_bindings)]
+       fn release_pending_custom_messages(&self) -> Vec<(Self::CustomMessage, Destination, Option<BlindedPath>)>;
 }
 
 /// A processed incoming onion message, containing either a Forward (another onion message)
@@ -381,7 +407,7 @@ where
                let blinding_factor = {
                        let mut hmac = HmacEngine::<Sha256>::new(b"blinded_node_id");
                        hmac.input(control_tlvs_ss.as_ref());
-                       Hmac::from_engine(hmac).into_inner()
+                       Hmac::from_engine(hmac).to_byte_array()
                };
                match node_signer.ecdh(Recipient::Node, &msg.onion_routing_packet.public_key,
                        Some(&Scalar::from_be_bytes(blinding_factor).unwrap()))
@@ -686,7 +712,10 @@ where
        fn next_onion_message_for_peer(&self, peer_node_id: PublicKey) -> Option<OnionMessage> {
                // Enqueue any initiating `OffersMessage`s to send.
                for message in self.offers_handler.release_pending_messages() {
+                       #[cfg(not(c_bindings))]
                        let PendingOnionMessage { contents, destination, reply_path } = message;
+                       #[cfg(c_bindings)]
+                       let (contents, destination, reply_path) = message;
                        self.find_path_and_enqueue_onion_message(
                                contents, destination, reply_path, format_args!("when sending OffersMessage")
                        );
@@ -694,7 +723,10 @@ where
 
                // Enqueue any initiating `CustomMessage`s to send.
                for message in self.custom_handler.release_pending_custom_messages() {
+                       #[cfg(not(c_bindings))]
                        let PendingOnionMessage { contents, destination, reply_path } = message;
+                       #[cfg(c_bindings)]
+                       let (contents, destination, reply_path) = message;
                        self.find_path_and_enqueue_onion_message(
                                contents, destination, reply_path, format_args!("when sending CustomMessage")
                        );