Merge pull request #93 from tnull/2023-01-update-to-v0.0.113
authorElias Rohrer <dev@tnull.de>
Wed, 11 Jan 2023 14:40:32 +0000 (15:40 +0100)
committerGitHub <noreply@github.com>
Wed, 11 Jan 2023 14:40:32 +0000 (15:40 +0100)
Update to LDK release 0.0.113

src/args.rs
src/cli.rs

index deb1704109eac1a390cdad541775f0d89dec833c..a9d1729b3af75f9898a7e984c8403937ab5956df 100644 (file)
@@ -55,9 +55,9 @@ pub(crate) fn parse_startup_args() -> Result<LdkUserInfo, ()> {
        };
 
        let (bitcoind_rpc_username, bitcoind_rpc_password) = if bitcoind_rpc_info_parts.len() == 1 {
-               get_rpc_auth_from_cookie(None, Some(network), None)
+               get_rpc_auth_from_env_vars()
                        .or(get_rpc_auth_from_env_file(None))
-                       .or(get_rpc_auth_from_env_vars())
+                       .or(get_rpc_auth_from_cookie(None, Some(network), None))
                        .or({
                                println!("ERROR: unable to get bitcoind RPC username and password");
                                print_rpc_auth_help();
@@ -175,7 +175,7 @@ fn get_cookie_path(
        };
 
        let data_dir_path_with_net = match network {
-               Some(Network::Testnet) => data_dir_path.join("testnet"),
+               Some(Network::Testnet) => data_dir_path.join("testnet3"),
                Some(Network::Regtest) => data_dir_path.join("regtest"),
                Some(Network::Signet) => data_dir_path.join("signet"),
                _ => data_dir_path,
@@ -279,7 +279,7 @@ mod rpc_auth_tests {
                                Some((TEST_DATA_DIR, true)),
                                Some(Network::Testnet),
                                None,
-                               env::home_dir().unwrap().join(TEST_DATA_DIR).join("testnet").join(".cookie"),
+                               env::home_dir().unwrap().join(TEST_DATA_DIR).join("testnet3").join(".cookie"),
                        ),
                        (
                                Some((TEST_DATA_DIR, false)),
index 8135d1e691a928c2d8d2c2edd88fff49b817fe62..b4b7a1c769b8f617e35ad76470d2dbe87f950bb7 100644 (file)
@@ -250,6 +250,32 @@ pub(crate) async fn poll_for_user_input<E: EventHandler>(
                                                println!("SUCCESS: connected to peer {}", pubkey);
                                        }
                                }
+                               "disconnectpeer" => {
+                                       let peer_pubkey = words.next();
+                                       if peer_pubkey.is_none() {
+                                               println!("ERROR: disconnectpeer requires peer public key: `disconnectpeer <peer_pubkey>`");
+                                               continue;
+                                       }
+
+                                       let peer_pubkey =
+                                               match bitcoin::secp256k1::PublicKey::from_str(peer_pubkey.unwrap()) {
+                                                       Ok(pubkey) => pubkey,
+                                                       Err(e) => {
+                                                               println!("ERROR: {}", e.to_string());
+                                                               continue;
+                                                       }
+                                               };
+
+                                       if do_disconnect_peer(
+                                               peer_pubkey,
+                                               peer_manager.clone(),
+                                               channel_manager.clone(),
+                                       )
+                                       .is_ok()
+                                       {
+                                               println!("SUCCESS: disconnected from peer {}", peer_pubkey);
+                                       }
+                               }
                                "listchannels" => list_channels(&channel_manager, &network_graph),
                                "listpayments" => {
                                        list_payments(inbound_payments.clone(), outbound_payments.clone())
@@ -423,6 +449,7 @@ fn help() {
        println!("      listchannels");
        println!("\n  Peers:");
        println!("      connectpeer pubkey@host:port");
+       println!("      disconnectpeer <peer_pubkey>");
        println!("      listpeers");
        println!("\n  Payments:");
        println!("      sendpayment <invoice>");
@@ -581,6 +608,29 @@ pub(crate) async fn do_connect_peer(
        }
 }
 
+fn do_disconnect_peer(
+       pubkey: bitcoin::secp256k1::PublicKey, peer_manager: Arc<PeerManager>,
+       channel_manager: Arc<ChannelManager>,
+) -> Result<(), ()> {
+       //check for open channels with peer
+       for channel in channel_manager.list_channels() {
+               if channel.counterparty.node_id == pubkey {
+                       println!("Error: Node has an active channel with this peer, close any channels first");
+                       return Err(());
+               }
+       }
+
+       //check the pubkey matches a valid connected peer
+       let peers = peer_manager.get_peer_node_ids();
+       if !peers.contains(&pubkey) {
+               println!("Error: Could not find peer {}", pubkey);
+               return Err(());
+       }
+
+       peer_manager.disconnect_by_node_id(pubkey, false);
+       Ok(())
+}
+
 fn open_channel(
        peer_pubkey: PublicKey, channel_amt_sat: u64, announced_channel: bool,
        channel_manager: Arc<ChannelManager>,