core-lightning/lightningd/forwards.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

113 lines
3.0 KiB
C

/* Forwarding APIs */
#ifndef LIGHTNING_LIGHTNINGD_FORWARDS_H
#define LIGHTNING_LIGHTNINGD_FORWARDS_H
#include "config.h"
#include <wire/onion_wire.h>
struct json_stream;
struct lightningd;
struct sha256;
/* /!\ This is a DB ENUM, please do not change the numbering of any
* already defined elements (adding is ok) /!\ */
enum forward_style {
FORWARD_STYLE_LEGACY = 0,
FORWARD_STYLE_TLV = 1,
FORWARD_STYLE_UNKNOWN = 2, /* Not actually in db, safe to renumber! */
};
/**
* Possible states for forwards
*
*/
/* /!\ This is a DB ENUM, please do not change the numbering of any
* already defined elements (adding is ok) /!\ */
enum forward_status {
FORWARD_OFFERED = 0,
FORWARD_SETTLED = 1,
FORWARD_FAILED = 2,
FORWARD_LOCAL_FAILED = 3,
/* Special status used to express that we don't care in
* queries */
FORWARD_ANY = 255
};
struct forwarding {
u64 created_index;
/* zero means never updated */
u64 updated_index;
/* channel_out is all-zero if unknown. */
struct short_channel_id channel_in, channel_out;
/* htlc_id_out is NULL if unknown. */
u64 htlc_id_in, *htlc_id_out;
struct amount_msat msat_in, msat_out, fee;
enum forward_style forward_style;
enum forward_status status;
enum onion_wire failcode;
struct timeabs received_time;
/* May not be present if the HTLC was not resolved yet. */
struct timeabs *resolved_time;
};
/* This json function will be used as the serialize method for
* forward_event_notification_gen and be used in
* `listforwardings_add_forwardings()`. */
void json_add_forwarding_fields(struct json_stream *response,
const struct forwarding *cur,
const struct sha256 *payment_hash);
static inline const char* forward_status_name(enum forward_status status)
{
switch(status) {
case FORWARD_OFFERED:
return "offered";
case FORWARD_SETTLED:
return "settled";
case FORWARD_FAILED:
return "failed";
case FORWARD_LOCAL_FAILED:
return "local_failed";
case FORWARD_ANY:
return "any";
}
abort();
}
bool string_to_forward_status(const char *status_str, size_t len,
enum forward_status *status);
static inline const char *forward_style_name(enum forward_style style)
{
switch (style) {
case FORWARD_STYLE_UNKNOWN:
return "UNKNOWN";
case FORWARD_STYLE_TLV:
return "tlv";
case FORWARD_STYLE_LEGACY:
return "legacy";
}
abort();
}
/* wait() hooks in here */
void forward_index_deleted(struct lightningd *ld,
enum forward_status status,
struct short_channel_id in_channel,
u64 in_htlc_id,
const struct amount_msat *in_amount,
const struct short_channel_id *out_channel);
u64 forward_index_created(struct lightningd *ld,
enum forward_status status,
struct short_channel_id in_channel,
u64 in_htlc_id,
struct amount_msat in_amount,
const struct short_channel_id *out_channel);
u64 forward_index_update_status(struct lightningd *ld,
enum forward_status status,
struct short_channel_id in_channel,
u64 in_htlc_id,
struct amount_msat in_amount,
const struct short_channel_id *out_channel);
#endif /* LIGHTNING_LIGHTNINGD_FORWARDS_H */