core-lightning/lightningd/htlc_set.h
Rusty Russell c34c055d82 Makefile: use completely separate spec-derived files for EXPERIMENTAL_FEATURES
This avoids overwriting the ones in git, and generally makes things neater.

We have convenience headers wire/peer_wire.h and wire/onion_wire.h to
avoid most #ifdefs: simply include those.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2020-09-08 09:42:00 +09:30

57 lines
1.6 KiB
C

#ifndef LIGHTNING_LIGHTNINGD_HTLC_SET_H
#define LIGHTNING_LIGHTNINGD_HTLC_SET_H
#include "config.h"
#include <ccan/crypto/sha256/sha256.h>
#include <ccan/crypto/siphash24/siphash24.h>
#include <ccan/htable/htable_type.h>
#include <common/amount.h>
#include <common/pseudorand.h>
#include <common/utils.h>
#include <wire/onion_wire.h>
struct htlc_in;
struct lightningd;
/* Set of incoming HTLCs for multi-part-payments */
struct htlc_set {
struct amount_msat total_msat, so_far;
struct sha256 payment_hash;
struct htlc_in **htlcs;
struct oneshot *timeout;
};
static inline const struct sha256 *keyof_htlc_set(const struct htlc_set *set)
{
return &set->payment_hash;
}
static inline size_t hash_payment_hash(const struct sha256 *payment_hash)
{
return siphash24(siphash_seed(), payment_hash, sizeof(&payment_hash));
}
static inline bool htlc_set_eq(const struct htlc_set *set,
const struct sha256 *payment_hash)
{
return sha256_eq(payment_hash, &set->payment_hash);
}
HTABLE_DEFINE_TYPE(struct htlc_set,
keyof_htlc_set,
hash_payment_hash,
htlc_set_eq,
htlc_set_map);
/* Handles hin: if it completes a set, hands that to invoice_try_pay */
void htlc_set_add(struct lightningd *ld,
struct htlc_in *hin,
struct amount_msat total_msat,
const struct secret *payment_secret);
/* Fail every htlc in the set: frees set */
void htlc_set_fail(struct htlc_set *set, const u8 *failmsg TAKES);
/* Fulfill every htlc in the set: frees set */
void htlc_set_fulfill(struct htlc_set *set, const struct preimage *preimage);
#endif /* LIGHTNING_LIGHTNINGD_HTLC_SET_H */