You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.0 KiB

#ifndef LIGHTNING_LIGHTNINGD_HTLC_END_H
#define LIGHTNING_LIGHTNINGD_HTLC_END_H
#include "config.h"
#include <ccan/htable/htable_type.h>
#include <ccan/short_types/short_types.h>
#include <daemon/htlc_state.h>
#include <lightningd/sphinx.h>
/* A HTLC has a source and destination: if other is NULL, it's this node.
*
* The main daemon simply shuffles them back and forth.
*/
enum htlc_end_type { HTLC_SRC, HTLC_DST };
struct htlc_end {
enum htlc_end_type which_end;
struct peer *peer;
u64 htlc_id;
u64 msatoshis;
struct htlc_end *other_end;
/* If this is driven by a command. */
struct pay_command *pay_command;
/* FIXME: We really only need this in the database. */
enum htlc_state hstate;
/* Temporary information, while we resolve the next hop */
u8 *next_onion;
struct short_channel_id next_channel;
u64 amt_to_forward;
u32 outgoing_cltv_value;
u32 cltv_expiry;
struct sha256 payment_hash;
/* If they failed HTLC, here's the message. */
const u8 *fail_msg;
/* If they succeeded, here's the preimage. */
struct sha256 *preimage;
/* If we are forwarding, remember the shared secret for an
* eventual reply */
struct secret *shared_secret;
/* If we are the origin, remember all shared secrets, so we
* can unwrap an eventual reply */
struct secret *path_secrets;
};
static inline const struct htlc_end *keyof_htlc_end(const struct htlc_end *e)
{
return e;
}
size_t hash_htlc_end(const struct htlc_end *e);
static inline bool htlc_end_eq(const struct htlc_end *a,
const struct htlc_end *b)
{
return a->peer == b->peer
&& a->htlc_id == b->htlc_id
&& a->which_end == b->which_end;
}
HTABLE_DEFINE_TYPE(struct htlc_end, keyof_htlc_end, hash_htlc_end, htlc_end_eq,
htlc_end_map);
struct htlc_end *find_htlc_end(const struct htlc_end_map *map,
const struct peer *peer,
u64 htlc_id,
enum htlc_end_type which_end);
void connect_htlc_end(struct htlc_end_map *map, struct htlc_end *hend);
#endif /* LIGHTNING_LIGHTNINGD_HTLC_END_H */