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

Commit c0b756a

Browse files
committed
Stop payjoin session with nodemanager
1 parent c84fe94 commit c0b756a

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
@@ -713,9 +713,10 @@ impl<S: MutinyStorage> MutinyWallet<S> {
713713
let pj_uri = enrolled.fallback_target();
714714
log_debug!(self.logger, "{pj_uri}");
715715
let wallet = self.node_manager.wallet.clone();
716+
let stop = self.node_manager.stop.clone();
716717
// run await payjoin task in the background as it'll keep polling the relay
717718
utils::spawn(async move {
718-
let pj_txid = NodeManager::receive_payjoin(wallet, enrolled).await.unwrap();
719+
let pj_txid = NodeManager::receive_payjoin(wallet, stop, enrolled).await.unwrap();
719720
log::info!("Received payjoin txid: {}", pj_txid);
720721
});
721722
Some(pj_uri)

mutiny-core/src/nodemanager.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -938,19 +938,20 @@ impl<S: MutinyStorage> NodeManager<S> {
938938
/// Poll the payjoin relay to maintain a payjoin session and create a payjoin proposal.
939939
pub async fn receive_payjoin(
940940
wallet: Arc<OnChainWallet<S>>,
941+
stop: Arc<AtomicBool>,
941942
mut enrolled: payjoin::receive::v2::Enrolled,
942943
) -> Result<Txid, MutinyError> {
943944
let http_client = reqwest::Client::builder()
944945
//.danger_accept_invalid_certs(true) ? is tls unchecked :O
945946
.build()
946947
.unwrap();
947948
let proposal: payjoin::receive::v2::UncheckedProposal =
948-
Self::poll_for_fallback_psbt(&http_client, &mut enrolled)
949+
Self::poll_for_fallback_psbt(stop, &http_client, &mut enrolled)
949950
.await
950951
.unwrap();
951952
let payjoin_proposal = wallet.process_payjoin_proposal(proposal).unwrap();
952953

953-
let (req, ohttp_ctx) = payjoin_proposal.extract_v2_req().unwrap();
954+
let (req, ohttp_ctx) = payjoin_proposal.extract_v2_req().unwrap(); // extraction failed
954955
let res = http_client
955956
.post(req.url)
956957
.body(req.body)
@@ -969,10 +970,14 @@ impl<S: MutinyStorage> NodeManager<S> {
969970
}
970971

971972
async fn poll_for_fallback_psbt(
973+
stop: Arc<AtomicBool>,
972974
client: &reqwest::Client,
973975
enroller: &mut payjoin::receive::v2::Enrolled,
974976
) -> Result<payjoin::receive::v2::UncheckedProposal, ()> {
975977
loop {
978+
if stop.load(Ordering::Relaxed) {
979+
return Err(()); // stopped
980+
}
976981
let (req, context) = enroller.extract_req().unwrap();
977982
let ohttp_response = client.post(req.url).body(req.body).send().await.unwrap();
978983
let ohttp_response = ohttp_response.bytes().await.unwrap();

0 commit comments

Comments
 (0)