+
+
+ fn get_next_channel_announcements(&self, starting_point: u64, batch_amount: u8) -> Vec<(msgs::ChannelAnnouncement, msgs::ChannelUpdate,msgs::ChannelUpdate)> {
+ let mut result = Vec::with_capacity(batch_amount as usize);
+ let network = self.network_map.read().unwrap();
+ let mut iter = network.channels.range(starting_point..);
+ while result.len() < batch_amount as usize {
+ if let Some((_, ref chan)) = iter.next() {
+ if chan.announcement_message.is_some() &&
+ chan.one_to_two.last_update_message.is_some() &&
+ chan.two_to_one.last_update_message.is_some() {
+ result.push((chan.announcement_message.clone().unwrap(),
+ chan.one_to_two.last_update_message.clone().unwrap(),
+ chan.two_to_one.last_update_message.clone().unwrap()));
+ } else {
+ // TODO: We may end up sending un-announced channel_updates if we are sending
+ // initial sync data while receiving announce/updates for this channel.
+ }
+ } else {
+ return result;
+ }
+ }
+ result
+ }
+
+ fn get_next_node_announcements(&self, starting_point: Option<&PublicKey>, batch_amount: u8) -> Vec<msgs::NodeAnnouncement> {
+ let mut result = Vec::with_capacity(batch_amount as usize);
+ let network = self.network_map.read().unwrap();
+ let mut iter = if let Some(pubkey) = starting_point {
+ let mut iter = network.nodes.range((*pubkey)..);
+ iter.next();
+ iter
+ } else {
+ network.nodes.range(..)
+ };
+ while result.len() < batch_amount as usize {
+ if let Some((_, ref node)) = iter.next() {
+ if node.announcement_message.is_some() {
+ result.push(node.announcement_message.clone().unwrap());
+ }
+ } else {
+ return result;
+ }
+ }
+ result
+ }