Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit 9eb5f94

Browse files
committed
Stop payjoin session with nodemanager
1 parent b4a692a commit 9eb5f94

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

mutiny-core/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -951,9 +951,10 @@ impl<S: MutinyStorage> MutinyWallet<S> {
951951
let pj_uri = enrolled.fallback_target();
952952
log_debug!(self.logger, "{pj_uri}");
953953
let wallet = self.node_manager.wallet.clone();
954+
let stop = self.node_manager.stop.clone();
954955
// run await payjoin task in the background as it'll keep polling the relay
955956
utils::spawn(async move {
956-
let pj_txid = NodeManager::receive_payjoin(wallet, enrolled)
957+
let pj_txid = NodeManager::receive_payjoin(wallet, stop, enrolled)
957958
.await
958959
.unwrap();
959960
log::info!("Received payjoin txid: {}", pj_txid);

mutiny-core/src/nodemanager.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -852,19 +852,20 @@ impl<S: MutinyStorage> NodeManager<S> {
852852
/// Poll the payjoin relay to maintain a payjoin session and create a payjoin proposal.
853853
pub async fn receive_payjoin(
854854
wallet: Arc<OnChainWallet<S>>,
855+
stop: Arc<AtomicBool>,
855856
mut enrolled: payjoin::receive::v2::Enrolled,
856857
) -> Result<Txid, MutinyError> {
857858
let http_client = reqwest::Client::builder()
858859
//.danger_accept_invalid_certs(true) ? is tls unchecked :O
859860
.build()
860861
.unwrap();
861862
let proposal: payjoin::receive::v2::UncheckedProposal =
862-
Self::poll_for_fallback_psbt(&http_client, &mut enrolled)
863+
Self::poll_for_fallback_psbt(stop, &http_client, &mut enrolled)
863864
.await
864865
.unwrap();
865866
let payjoin_proposal = wallet.process_payjoin_proposal(proposal).unwrap();
866867

867-
let (req, ohttp_ctx) = payjoin_proposal.extract_v2_req().unwrap();
868+
let (req, ohttp_ctx) = payjoin_proposal.extract_v2_req().unwrap(); // extraction failed
868869
let res = http_client
869870
.post(req.url)
870871
.body(req.body)
@@ -883,10 +884,14 @@ impl<S: MutinyStorage> NodeManager<S> {
883884
}
884885

885886
async fn poll_for_fallback_psbt(
887+
stop: Arc<AtomicBool>,
886888
client: &reqwest::Client,
887889
enroller: &mut payjoin::receive::v2::Enrolled,
888890
) -> Result<payjoin::receive::v2::UncheckedProposal, ()> {
889891
loop {
892+
if stop.load(Ordering::Relaxed) {
893+
return Err(()); // stopped
894+
}
890895
let (req, context) = enroller.extract_req().unwrap();
891896
let ohttp_response = client.post(req.url).body(req.body).send().await.unwrap();
892897
let ohttp_response = ohttp_response.bytes().await.unwrap();

0 commit comments

Comments
 (0)