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

Commit 9759f1a

Browse files
committed
Stop payjoin session with nodemanager
1 parent 22f384e commit 9759f1a

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
@@ -1095,9 +1095,10 @@ impl<S: MutinyStorage> MutinyWallet<S> {
10951095
let pj_uri = enrolled.fallback_target();
10961096
log_debug!(self.logger, "{pj_uri}");
10971097
let wallet = self.node_manager.wallet.clone();
1098+
let stop = self.node_manager.stop.clone();
10981099
// run await payjoin task in the background as it'll keep polling the relay
10991100
utils::spawn(async move {
1100-
let pj_txid = NodeManager::receive_payjoin(wallet, enrolled)
1101+
let pj_txid = NodeManager::receive_payjoin(wallet, stop, enrolled)
11011102
.await
11021103
.unwrap();
11031104
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
@@ -739,19 +739,20 @@ impl<S: MutinyStorage> NodeManager<S> {
739739
/// Poll the payjoin relay to maintain a payjoin session and create a payjoin proposal.
740740
pub async fn receive_payjoin(
741741
wallet: Arc<OnChainWallet<S>>,
742+
stop: Arc<AtomicBool>,
742743
mut enrolled: payjoin::receive::v2::Enrolled,
743744
) -> Result<Txid, MutinyError> {
744745
let http_client = reqwest::Client::builder()
745746
//.danger_accept_invalid_certs(true) ? is tls unchecked :O
746747
.build()
747748
.unwrap();
748749
let proposal: payjoin::receive::v2::UncheckedProposal =
749-
Self::poll_for_fallback_psbt(&http_client, &mut enrolled)
750+
Self::poll_for_fallback_psbt(stop, &http_client, &mut enrolled)
750751
.await
751752
.unwrap();
752753
let payjoin_proposal = wallet.process_payjoin_proposal(proposal).unwrap();
753754

754-
let (req, ohttp_ctx) = payjoin_proposal.extract_v2_req().unwrap();
755+
let (req, ohttp_ctx) = payjoin_proposal.extract_v2_req().unwrap(); // extraction failed
755756
let res = http_client
756757
.post(req.url)
757758
.body(req.body)
@@ -770,10 +771,14 @@ impl<S: MutinyStorage> NodeManager<S> {
770771
}
771772

772773
async fn poll_for_fallback_psbt(
774+
stop: Arc<AtomicBool>,
773775
client: &reqwest::Client,
774776
enroller: &mut payjoin::receive::v2::Enrolled,
775777
) -> Result<payjoin::receive::v2::UncheckedProposal, ()> {
776778
loop {
779+
if stop.load(Ordering::Relaxed) {
780+
return Err(()); // stopped
781+
}
777782
let (req, context) = enroller.extract_req().unwrap();
778783
let ohttp_response = client.post(req.url).body(req.body).send().await.unwrap();
779784
let ohttp_response = ohttp_response.bytes().await.unwrap();

0 commit comments

Comments
 (0)