Browse Source

plugin: A new notification type, 'sendpay_success'

`sendpay_success`

A notification for topic `sendpay_success` is sent every time a sendpay
success(with `complete` status). The json is same as the return value of
command `sendpay`/`waitsendpay` when these cammand succeeds.

```json
{
	"sendpay_success": {
  "id": 1,
  "payment_hash": "5c85bf402b87d4860f4a728e2e58a2418bda92cd7aea0ce494f11670cfbfb206",
  "destination": "035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d",
  "msatoshi": 100000000,
  "amount_msat": "100000000msat",
  "msatoshi_sent": 100001001,
  "amount_sent_msat": "100001001msat",
  "created_at": 1561390572,
  "status": "complete",
  "payment_preimage": "9540d98095fd7f37687ebb7759e733934234d4f934e34433d4998a37de3733ee"
  }
}
```
`sendpay` doesn't wait for the result of sendpay and `waitsendpay`
returns the result of sendpay in specified time or timeout, but
`sendpay_success` will always return the result anytime when sendpay
successes if is was subscribed.
travis-debug
trueptolemy 5 years ago
committed by Rusty Russell
parent
commit
07f85cbf72
  1. 24
      lightningd/notification.c
  2. 4
      lightningd/notification.h
  3. 5
      lightningd/pay.c
  4. 6
      lightningd/pay.h

24
lightningd/notification.c

@ -227,3 +227,27 @@ void notify_forward_event(struct lightningd *ld,
jsonrpc_notification_end(n);
plugins_notify(ld->plugins, take(n));
}
static void sendpay_success_notification_serialize(struct json_stream *stream,
const struct wallet_payment *payment)
{
json_object_start(stream, "sendpay_success");
json_add_payment_fields(stream, payment);
json_object_end(stream); /* .sendpay_success */
}
REGISTER_NOTIFICATION(sendpay_success,
sendpay_success_notification_serialize);
void notify_sendpay_success(struct lightningd *ld,
const struct wallet_payment *payment)
{
void (*serialize)(struct json_stream *,
const struct wallet_payment *) = sendpay_success_notification_gen.serialize;
struct jsonrpc_notification *n =
jsonrpc_notification_start(NULL, "sendpay_success");
serialize(n->stream, payment);
jsonrpc_notification_end(n);
plugins_notify(ld->plugins, take(n));
}

4
lightningd/notification.h

@ -12,6 +12,7 @@
#include <lightningd/jsonrpc.h>
#include <lightningd/lightningd.h>
#include <lightningd/log.h>
#include <lightningd/pay.h>
#include <lightningd/plugin.h>
#include <wallet/wallet.h>
#include <wire/gen_onion_wire.h>
@ -54,4 +55,7 @@ void notify_forward_event(struct lightningd *ld,
enum onion_type failcode,
struct timeabs *resolved_time);
void notify_sendpay_success(struct lightningd *ld,
const struct wallet_payment *payment);
#endif /* LIGHTNING_LIGHTNINGD_NOTIFICATION_H */

5
lightningd/pay.c

@ -73,9 +73,8 @@ add_waitsendpay_waiter(struct lightningd *ld,
}
/* Outputs fields, not a separate object*/
static void
json_add_payment_fields(struct json_stream *response,
const struct wallet_payment *t)
void json_add_payment_fields(struct json_stream *response,
const struct wallet_payment *t)
{
json_add_u64(response, "id", t->id);
json_add_sha256(response, "payment_hash", &t->payment_hash);

6
lightningd/pay.h

@ -6,6 +6,8 @@ struct htlc_out;
struct lightningd;
struct preimage;
struct sha256;
struct json_stream;
struct wallet_payment;
void payment_succeeded(struct lightningd *ld, struct htlc_out *hout,
const struct preimage *rval);
@ -16,4 +18,8 @@ void payment_failed(struct lightningd *ld, const struct htlc_out *hout,
/* Inform payment system to save the payment. */
void payment_store(struct lightningd *ld, const struct sha256 *payment_hash);
/* This json will be also used in 'sendpay_success' notifictaion. */
void json_add_payment_fields(struct json_stream *response,
const struct wallet_payment *t);
#endif /* LIGHTNING_LIGHTNINGD_PAY_H */

Loading…
Cancel
Save