diff --git a/lightningd/peer_control.c b/lightningd/peer_control.c index b2d083e0e..9d74abd01 100644 --- a/lightningd/peer_control.c +++ b/lightningd/peer_control.c @@ -505,6 +505,8 @@ static void json_add_htlcs(struct lightningd *ld, channel->our_config.dust_limit, LOCAL, channel->option_anchor_outputs)) json_add_bool(response, "local_trimmed", true); + if (hin->status != NULL) + json_add_string(response, "status", hin->status); json_object_end(response); } diff --git a/lightningd/peer_htlcs.c b/lightningd/peer_htlcs.c index 0cb895fbc..d0887d650 100644 --- a/lightningd/peer_htlcs.c +++ b/lightningd/peer_htlcs.c @@ -1015,8 +1015,14 @@ static void htlc_accepted_hook_serialize(struct htlc_accepted_hook_payload *p, struct plugin *plugin) { const struct route_step *rs = p->route_step; - const struct htlc_in *hin = p->hin; + struct htlc_in *hin = p->hin; s32 expiry = hin->cltv_expiry, blockheight = p->ld->topology->tip->height; + + tal_free(hin->status); + hin->status = + tal_fmt(hin, "Waiting for the htlc_accepted hook of plugin %s", + plugin->shortname); + json_object_start(s, "onion"); json_add_hex_talarr(s, "payload", rs->raw_payload); diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 212eb7cce..a86d66298 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -1059,6 +1059,13 @@ def test_htlc_accepted_hook_direct_restart(node_factory, executor): f1 = executor.submit(l1.rpc.pay, i1) l2.daemon.wait_for_log(r'Holding onto an incoming htlc for 10 seconds') + + # Check that the status mentions the HTLC being held + l2.rpc.listpeers() + peers = l2.rpc.listpeers()['peers'] + htlc_status = peers[0]['channels'][0]['htlcs'][0].get('status', None) + assert htlc_status == "Waiting for the htlc_accepted hook of plugin hold_htlcs.py" + needle = l2.daemon.logsearch_start l2.restart()