From: Elias Rohrer Date: Wed, 11 Jan 2023 14:40:32 +0000 (+0100) Subject: Merge pull request #93 from tnull/2023-01-update-to-v0.0.113 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=727b41d94ac6dec457f9f2b301e796150597bb5b;hp=810054ead2e022a771e902c26327313597947b96;p=ldk-sample Merge pull request #93 from tnull/2023-01-update-to-v0.0.113 Update to LDK release 0.0.113 --- diff --git a/src/args.rs b/src/args.rs index deb1704..a9d1729 100644 --- a/src/args.rs +++ b/src/args.rs @@ -55,9 +55,9 @@ pub(crate) fn parse_startup_args() -> Result { }; 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)), diff --git a/src/cli.rs b/src/cli.rs index 8135d1e..b4b7a1c 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -250,6 +250,32 @@ pub(crate) async fn poll_for_user_input( 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 `"); + 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 "); println!(" listpeers"); println!("\n Payments:"); println!(" sendpayment "); @@ -581,6 +608,29 @@ pub(crate) async fn do_connect_peer( } } +fn do_disconnect_peer( + pubkey: bitcoin::secp256k1::PublicKey, peer_manager: Arc, + channel_manager: Arc, +) -> 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,