@@ -30,7 +30,7 @@ use chain::transaction::OutPoint;
3030use ln:: channel:: { Channel , ChannelError } ;
3131use ln:: channelmonitor:: { ChannelMonitor , ChannelMonitorUpdateErr , ManyChannelMonitor , CLTV_CLAIM_BUFFER , LATENCY_GRACE_PERIOD_BLOCKS , ANTI_REORG_DELAY } ;
3232use ln:: router:: Route ;
33- use ln:: features:: InitFeatures ;
33+ use ln:: features:: { InitFeatures , NodeFeatures } ;
3434use ln:: msgs;
3535use ln:: onion_utils;
3636use ln:: msgs:: { ChannelMessageHandler , DecodeError , LightningError } ;
@@ -357,6 +357,8 @@ pub struct ChannelManager<ChanSigner: ChannelKeys, M: Deref> where M::Target: Ma
357357 channel_state : Mutex < ChannelHolder < ChanSigner > > ,
358358 our_network_key : SecretKey ,
359359
360+ last_node_announcement_serial : AtomicUsize ,
361+
360362 /// The bulk of our storage will eventually be here (channels and message queues and the like).
361363 /// If we are connected to a peer we always at least have an entry here, even if no channels
362364 /// are currently open with that peer.
@@ -651,6 +653,8 @@ impl<ChanSigner: ChannelKeys, M: Deref> ChannelManager<ChanSigner, M> where M::T
651653 } ) ,
652654 our_network_key : keys_manager. get_node_secret ( ) ,
653655
656+ last_node_announcement_serial : AtomicUsize :: new ( 0 ) ,
657+
654658 per_peer_state : RwLock :: new ( HashMap :: new ( ) ) ,
655659
656660 pending_events : Mutex :: new ( Vec :: new ( ) ) ,
@@ -1285,6 +1289,37 @@ impl<ChanSigner: ChannelKeys, M: Deref> ChannelManager<ChanSigner, M> where M::T
12851289 } )
12861290 }
12871291
1292+ /// Generates a signed node_announcement from the given arguments and creates a
1293+ /// BroadcastNodeAnnouncement event.
1294+ ///
1295+ /// RGB is a node "color" and alias a printable human-readable string to describe this node to
1296+ /// humans. They carry no in-protocol meaning.
1297+ ///
1298+ /// addresses represent the set (possibly empty) of socket addresses on which this node accepts
1299+ /// incoming connections.
1300+ pub fn broadcast_node_announcement ( & self , rgb : [ u8 ; 3 ] , alias : [ u8 ; 32 ] , addresses : msgs:: NetAddressSet ) {
1301+ let _ = self . total_consistency_lock . read ( ) . unwrap ( ) ;
1302+
1303+ let announcement = msgs:: UnsignedNodeAnnouncement {
1304+ features : NodeFeatures :: supported ( ) ,
1305+ timestamp : self . last_node_announcement_serial . fetch_add ( 1 , Ordering :: AcqRel ) as u32 ,
1306+ node_id : self . get_our_node_id ( ) ,
1307+ rgb, alias,
1308+ addresses : addresses. to_vec ( ) ,
1309+ excess_address_data : Vec :: new ( ) ,
1310+ excess_data : Vec :: new ( ) ,
1311+ } ;
1312+ let msghash = hash_to_message ! ( & Sha256dHash :: hash( & announcement. encode( ) [ ..] ) [ ..] ) ;
1313+
1314+ let mut channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
1315+ channel_state. pending_msg_events . push ( events:: MessageSendEvent :: BroadcastNodeAnnouncement {
1316+ msg : msgs:: NodeAnnouncement {
1317+ signature : self . secp_ctx . sign ( & msghash, & self . our_network_key ) ,
1318+ contents : announcement
1319+ } ,
1320+ } ) ;
1321+ }
1322+
12881323 /// Processes HTLCs which are pending waiting on random forward delay.
12891324 ///
12901325 /// Should only really ever be called in response to a PendingHTLCsForwardable event.
@@ -2880,6 +2915,7 @@ impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send> ChannelMessageHandler for
28802915 & events:: MessageSendEvent :: SendShutdown { ref node_id, .. } => node_id != their_node_id,
28812916 & events:: MessageSendEvent :: SendChannelReestablish { ref node_id, .. } => node_id != their_node_id,
28822917 & events:: MessageSendEvent :: BroadcastChannelAnnouncement { .. } => true ,
2918+ & events:: MessageSendEvent :: BroadcastNodeAnnouncement { .. } => true ,
28832919 & events:: MessageSendEvent :: BroadcastChannelUpdate { .. } => true ,
28842920 & events:: MessageSendEvent :: HandleError { ref node_id, .. } => node_id != their_node_id,
28852921 & events:: MessageSendEvent :: PaymentFailureNetworkUpdate { .. } => true ,
@@ -3193,6 +3229,8 @@ impl<ChanSigner: ChannelKeys + Writeable, M: Deref> Writeable for ChannelManager
31933229 peer_state. latest_features . write ( writer) ?;
31943230 }
31953231
3232+ ( self . last_node_announcement_serial . load ( Ordering :: Acquire ) as u32 ) . write ( writer) ?;
3233+
31963234 Ok ( ( ) )
31973235 }
31983236}
@@ -3336,6 +3374,8 @@ impl<'a, R : ::std::io::Read, ChanSigner: ChannelKeys + Readable<R>, M: Deref> R
33363374 per_peer_state. insert ( peer_pubkey, Mutex :: new ( peer_state) ) ;
33373375 }
33383376
3377+ let last_node_announcement_serial: u32 = Readable :: read ( reader) ?;
3378+
33393379 let channel_manager = ChannelManager {
33403380 genesis_hash,
33413381 fee_estimator : args. fee_estimator ,
@@ -3355,6 +3395,8 @@ impl<'a, R : ::std::io::Read, ChanSigner: ChannelKeys + Readable<R>, M: Deref> R
33553395 } ) ,
33563396 our_network_key : args. keys_manager . get_node_secret ( ) ,
33573397
3398+ last_node_announcement_serial : AtomicUsize :: new ( last_node_announcement_serial as usize ) ,
3399+
33583400 per_peer_state : RwLock :: new ( per_peer_state) ,
33593401
33603402 pending_events : Mutex :: new ( Vec :: new ( ) ) ,
0 commit comments