@@ -42,10 +42,12 @@ use ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, ChannelMonitorUpd
4242use ln:: features:: { InitFeatures , NodeFeatures } ;
4343use routing:: router:: { Route , RouteHop } ;
4444use ln:: msgs;
45+ use ln:: msgs:: NetAddress ;
4546use ln:: onion_utils;
4647use ln:: msgs:: { ChannelMessageHandler , DecodeError , LightningError , OptionalField } ;
4748use chain:: keysinterface:: { ChannelKeys , KeysInterface , KeysManager , InMemoryChannelKeys } ;
4849use util:: config:: UserConfig ;
50+ use util:: events:: { Event , EventsProvider , MessageSendEvent , MessageSendEventsProvider } ;
4951use util:: { byte_utils, events} ;
5052use util:: ser:: { Readable , ReadableArgs , MaybeReadable , Writeable , Writer } ;
5153use util:: chacha20:: { ChaCha20 , ChaChaReader } ;
@@ -312,7 +314,7 @@ pub(super) struct ChannelHolder<ChanSigner: ChannelKeys> {
312314 claimable_htlcs : HashMap < ( PaymentHash , Option < PaymentSecret > ) , Vec < ClaimableHTLC > > ,
313315 /// Messages to send to peers - pushed to in the same lock that they are generated in (except
314316 /// for broadcast messages, where ordering isn't as strict).
315- pub ( super ) pending_msg_events : Vec < events :: MessageSendEvent > ,
317+ pub ( super ) pending_msg_events : Vec < MessageSendEvent > ,
316318}
317319
318320/// State we hold per-peer. In the future we should put channels in here, but for now we only hold
@@ -1484,7 +1486,7 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
14841486 // be absurd. We ensure this by checking that at least 500 (our stated public contract on when
14851487 // broadcast_node_announcement panics) of the maximum-length addresses would fit in a 64KB
14861488 // message...
1487- const HALF_MESSAGE_IS_ADDRS : u32 = :: std:: u16:: MAX as u32 / ( msgs :: NetAddress :: MAX_LEN as u32 + 1 ) / 2 ;
1489+ const HALF_MESSAGE_IS_ADDRS : u32 = :: std:: u16:: MAX as u32 / ( NetAddress :: MAX_LEN as u32 + 1 ) / 2 ;
14881490 #[ deny( const_err) ]
14891491 #[ allow( dead_code) ]
14901492 // ...by failing to compile if the number of addresses that would be half of a message is
@@ -1504,7 +1506,7 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
15041506 /// only Tor Onion addresses.
15051507 ///
15061508 /// Panics if addresses is absurdly large (more than 500).
1507- pub fn broadcast_node_announcement ( & self , rgb : [ u8 ; 3 ] , alias : [ u8 ; 32 ] , addresses : Vec < msgs :: NetAddress > ) {
1509+ pub fn broadcast_node_announcement ( & self , rgb : [ u8 ; 3 ] , alias : [ u8 ; 32 ] , addresses : Vec < NetAddress > ) {
15081510 let _ = self . total_consistency_lock . read ( ) . unwrap ( ) ;
15091511
15101512 if addresses. len ( ) > 500 {
@@ -3011,14 +3013,14 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
30113013 }
30123014}
30133015
3014- impl < ChanSigner : ChannelKeys , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > events :: MessageSendEventsProvider for ChannelManager < ChanSigner , M , T , K , F , L >
3016+ impl < ChanSigner : ChannelKeys , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > MessageSendEventsProvider for ChannelManager < ChanSigner , M , T , K , F , L >
30153017 where M :: Target : ManyChannelMonitor < Keys =ChanSigner > ,
30163018 T :: Target : BroadcasterInterface ,
30173019 K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
30183020 F :: Target : FeeEstimator ,
30193021 L :: Target : Logger ,
30203022{
3021- fn get_and_clear_pending_msg_events ( & self ) -> Vec < events :: MessageSendEvent > {
3023+ fn get_and_clear_pending_msg_events ( & self ) -> Vec < MessageSendEvent > {
30223024 //TODO: This behavior should be documented. It's non-intuitive that we query
30233025 // ChannelMonitors when clearing other events.
30243026 self . process_pending_monitor_events ( ) ;
@@ -3030,14 +3032,14 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
30303032 }
30313033}
30323034
3033- impl < ChanSigner : ChannelKeys , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > events :: EventsProvider for ChannelManager < ChanSigner , M , T , K , F , L >
3035+ impl < ChanSigner : ChannelKeys , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > EventsProvider for ChannelManager < ChanSigner , M , T , K , F , L >
30343036 where M :: Target : ManyChannelMonitor < Keys =ChanSigner > ,
30353037 T :: Target : BroadcasterInterface ,
30363038 K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
30373039 F :: Target : FeeEstimator ,
30383040 L :: Target : Logger ,
30393041{
3040- fn get_and_clear_pending_events ( & self ) -> Vec < events :: Event > {
3042+ fn get_and_clear_pending_events ( & self ) -> Vec < Event > {
30413043 //TODO: This behavior should be documented. It's non-intuitive that we query
30423044 // ChannelMonitors when clearing other events.
30433045 self . process_pending_monitor_events ( ) ;
@@ -3774,7 +3776,27 @@ pub struct ChannelManagerReadArgs<'a, ChanSigner: 'a + ChannelKeys, M: Deref, T:
37743776 ///
37753777 /// In such cases the latest local transactions will be sent to the tx_broadcaster included in
37763778 /// this struct.
3777- pub channel_monitors : & ' a mut HashMap < OutPoint , & ' a mut ChannelMonitor < ChanSigner > > ,
3779+ pub channel_monitors : HashMap < OutPoint , & ' a mut ChannelMonitor < ChanSigner > > ,
3780+ }
3781+
3782+ impl < ' a , ChanSigner : ' a + ChannelKeys , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref >
3783+ ChannelManagerReadArgs < ' a , ChanSigner , M , T , K , F , L >
3784+ where M :: Target : ManyChannelMonitor < Keys =ChanSigner > ,
3785+ T :: Target : BroadcasterInterface ,
3786+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
3787+ F :: Target : FeeEstimator ,
3788+ L :: Target : Logger ,
3789+ {
3790+ /// Simple utility function to create a ChannelManagerReadArgs which creates the monitor
3791+ /// HashMap for you. This is primarily useful for C bindings where it is not practical to
3792+ /// populate a HashMap directly from C.
3793+ pub fn new ( keys_manager : K , fee_estimator : F , monitor : M , tx_broadcaster : T , logger : L , default_config : UserConfig ,
3794+ mut channel_monitors : Vec < & ' a mut ChannelMonitor < ChanSigner > > ) -> Self {
3795+ Self {
3796+ keys_manager, fee_estimator, monitor, tx_broadcaster, logger, default_config,
3797+ channel_monitors : channel_monitors. drain ( ..) . map ( |monitor| { ( monitor. get_funding_txo ( ) . 0 , monitor) } ) . collect ( )
3798+ }
3799+ }
37783800}
37793801
37803802// Implement ReadableArgs for an Arc'd ChannelManager to make it a bit easier to work with the
@@ -3801,7 +3823,7 @@ impl<'a, ChanSigner: ChannelKeys + Readable, M: Deref, T: Deref, K: Deref, F: De
38013823 F :: Target : FeeEstimator ,
38023824 L :: Target : Logger ,
38033825{
3804- fn read < R : :: std:: io:: Read > ( reader : & mut R , args : ChannelManagerReadArgs < ' a , ChanSigner , M , T , K , F , L > ) -> Result < Self , DecodeError > {
3826+ fn read < R : :: std:: io:: Read > ( reader : & mut R , mut args : ChannelManagerReadArgs < ' a , ChanSigner , M , T , K , F , L > ) -> Result < Self , DecodeError > {
38053827 let _ver: u8 = Readable :: read ( reader) ?;
38063828 let min_ver: u8 = Readable :: read ( reader) ?;
38073829 if min_ver > SERIALIZATION_VERSION {
0 commit comments