core-lightning/lightningd/notification.h
Rusty Russell 0946a5ac35 lightningd: clean up notification infrastructure.
The `struct notification` lost type-safety, but avoided a redundant
string.  The string is better, I think.

Since all notifications now contain an object of same name (some have
deprecated fields outside that), we can add helpers to do that, too.

Also, add some const (easy to do now we're typesafe!)

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2024-01-26 10:30:22 +10:30

105 lines
3.4 KiB
C

#ifndef LIGHTNING_LIGHTNINGD_NOTIFICATION_H
#define LIGHTNING_LIGHTNINGD_NOTIFICATION_H
#include "config.h"
#include <common/coin_mvt.h>
#include <lightningd/chaintopology.h>
#include <lightningd/pay.h>
#include <lightningd/plugin.h>
struct balance_snapshot;
struct onionreply;
struct wally_psbt;
bool notifications_have_topic(const struct plugins *plugins, const char *topic);
/* Is the provided notification topic native, i.e., provided by
* lightningd itself? */
bool notifications_topic_is_native(const char *topic);
AUTODATA_TYPE(notifications, char);
#define REGISTER_NOTIFICATION(topic) \
AUTODATA(notifications, stringify(topic));
void notify_connect(struct lightningd *ld,
const struct node_id *nodeid,
bool incoming,
const struct wireaddr_internal *addr);
void notify_disconnect(struct lightningd *ld, struct node_id *nodeid);
void notify_warning(struct lightningd *ld, struct log_entry *l);
void notify_custommsg(struct lightningd *ld,
const struct node_id *peer_id,
const u8 *msg);
void notify_invoice_payment(struct lightningd *ld,
struct amount_msat amount,
const struct preimage *preimage,
const struct json_escape *label,
const struct bitcoin_outpoint *outpoint);
void notify_invoice_creation(struct lightningd *ld,
const struct amount_msat *amount,
const struct preimage *preimage,
const struct json_escape *label);
void notify_channel_opened(struct lightningd *ld,
const struct node_id *node_id,
const struct amount_sat *funding_sat,
const struct bitcoin_txid *funding_txid,
bool channel_ready);
void notify_channel_state_changed(struct lightningd *ld,
const struct node_id *peer_id,
const struct channel_id *cid,
const struct short_channel_id *scid,
struct timeabs timestamp,
enum channel_state old_state,
enum channel_state new_state,
enum state_change cause,
const char *message);
void notify_forward_event(struct lightningd *ld,
const struct htlc_in *in,
/* May be NULL if we don't know. */
const struct short_channel_id *scid_out,
/* May be NULL. */
const struct amount_msat *amount_out,
enum forward_status state,
enum onion_wire failcode,
struct timeabs *resolved_time,
enum forward_style forward_style,
u64 created_index,
u64 updated_index);
void notify_sendpay_success(struct lightningd *ld,
const struct wallet_payment *payment);
void notify_sendpay_failure(struct lightningd *ld,
const struct wallet_payment *payment,
enum jsonrpc_errcode pay_errcode,
const struct onionreply *onionreply,
const struct routing_failure *fail,
const char *errmsg);
void notify_coin_mvt(struct lightningd *ld,
const struct coin_mvt *mvt);
void notify_balance_snapshot(struct lightningd *ld,
const struct balance_snapshot *snap);
void notify_block_added(struct lightningd *ld,
const struct block *block);
void notify_openchannel_peer_sigs(struct lightningd *ld,
const struct channel_id *cid,
const struct wally_psbt *psbt);
void notify_channel_open_failed(struct lightningd *ld,
const struct channel_id *cid);
/* Tell this plugin to shutdown: returns true if it was subscribed. */
bool notify_plugin_shutdown(struct lightningd *ld, struct plugin *p);
#endif /* LIGHTNING_LIGHTNINGD_NOTIFICATION_H */