68 lines
2.5 KiB
Rust
68 lines
2.5 KiB
Rust
use crate::records::memory::network_mapping::structs::{DeleteAddressParams, SignedNodeEdit};
|
|
use crate::records::memory::network_mapping::NodeInfo;
|
|
use crate::records::memory::response_channels::Command;
|
|
use crate::rpc::read_bytes_from_stream;
|
|
use crate::rpc::responses::RpcResponse;
|
|
use crate::sled::Db;
|
|
use crate::wallets::structures::Wallet;
|
|
use crate::Arc;
|
|
use crate::Mutex;
|
|
use crate::TcpStream;
|
|
|
|
pub async fn delete_network_node(
|
|
connections_key: &str,
|
|
stream_locked: Arc<Mutex<TcpStream>>,
|
|
db: &Db,
|
|
wallet: Arc<Wallet>,
|
|
map: Arc<Mutex<Command>>,
|
|
) -> Result<(u32, RpcResponse), String> {
|
|
// Command 29 uses the same signed node-edit shape as add, but the
|
|
// payload represents a delete marker for an existing network node.
|
|
let (uid, _) =
|
|
read_bytes_from_stream::read_uid_from_stream(connections_key, stream_locked.clone())
|
|
.await?;
|
|
let address_bytes = read_bytes_from_stream::read_short_address_from_stream(
|
|
connections_key,
|
|
stream_locked.clone(),
|
|
)
|
|
.await?;
|
|
let address = Wallet::bytes_to_short_address(&address_bytes)
|
|
.ok_or_else(|| "error: Invalid short address bytes".to_string())?;
|
|
let ip =
|
|
read_bytes_from_stream::read_ip_from_stream(connections_key, stream_locked.clone()).await?;
|
|
let deleted_by_bytes = read_bytes_from_stream::read_short_address_from_stream(
|
|
connections_key,
|
|
stream_locked.clone(),
|
|
)
|
|
.await?;
|
|
let deleted_by = Wallet::bytes_to_short_address(&deleted_by_bytes)
|
|
.ok_or_else(|| "error: Invalid short address bytes".to_string())?;
|
|
let deleted_timestamp =
|
|
read_bytes_from_stream::read_u64_from_stream(connections_key, stream_locked.clone())
|
|
.await?;
|
|
let deleted_signature =
|
|
read_bytes_from_stream::read_signature_from_stream(connections_key, stream_locked.clone())
|
|
.await?;
|
|
let remote_ip = read_bytes_from_stream::read_caller_ip(stream_locked).await?;
|
|
|
|
// NodeInfo handles validating the signer and applying the delete
|
|
// metadata to the network map.
|
|
let result = NodeInfo::delete_address(DeleteAddressParams {
|
|
map,
|
|
edit: SignedNodeEdit {
|
|
address,
|
|
ip,
|
|
modified_by: deleted_by,
|
|
modified_timestamp: deleted_timestamp,
|
|
modified_signature: deleted_signature,
|
|
},
|
|
remote_ip,
|
|
db: db.clone(),
|
|
wallet,
|
|
connections_key: connections_key.to_string(),
|
|
})
|
|
.await;
|
|
|
|
Ok((uid, result))
|
|
}
|