mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-03 18:57:06 +01:00
daemon/htlc_state: split off from daemon/htlc.
We want to use struct htlc inside lightningd, and we need the state bits. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
c6997f15c7
commit
d97e3489a0
4 changed files with 151 additions and 147 deletions
|
@ -28,6 +28,7 @@ DAEMON_SRC := \
|
|||
daemon/failure.c \
|
||||
daemon/feechange.c \
|
||||
daemon/htlc.c \
|
||||
daemon/htlc_state.c \
|
||||
daemon/invoice.c \
|
||||
daemon/irc_announce.c \
|
||||
daemon/jsonrpc.c \
|
||||
|
|
147
daemon/htlc.c
147
daemon/htlc.c
|
@ -3,157 +3,10 @@
|
|||
#include "log.h"
|
||||
#include "peer.h"
|
||||
#include "type_to_string.h"
|
||||
#include "gen_htlc_state_names.h"
|
||||
#include <bitcoin/preimage.h>
|
||||
#include <ccan/array_size/array_size.h>
|
||||
#include <ccan/tal/str/str.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
const char *htlc_state_name(enum htlc_state s)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; enum_htlc_state_names[i].name; i++)
|
||||
if (enum_htlc_state_names[i].v == s)
|
||||
return enum_htlc_state_names[i].name;
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
enum htlc_state htlc_state_from_name(const char *name)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; enum_htlc_state_names[i].name; i++)
|
||||
if (streq(enum_htlc_state_names[i].name, name))
|
||||
return enum_htlc_state_names[i].v;
|
||||
return HTLC_STATE_INVALID;
|
||||
}
|
||||
|
||||
/* This is the flags for each state. */
|
||||
static const int per_state_bits[] = {
|
||||
[SENT_ADD_HTLC] = HTLC_ADDING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_PENDING,
|
||||
|
||||
[SENT_ADD_COMMIT] = HTLC_ADDING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_ADD_REVOCATION] = HTLC_ADDING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_PENDING
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_ADD_ACK_COMMIT] = HTLC_ADDING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_ADD_ACK_REVOCATION] = HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_HTLC] = HTLC_REMOVING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_LOCAL_F_PENDING + HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_COMMIT] = HTLC_REMOVING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_REVOCATION] = HTLC_REMOVING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_PENDING
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_ACK_COMMIT] = HTLC_REMOVING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_ACK_REVOCATION] = HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_ADD_HTLC] = HTLC_ADDING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_PENDING,
|
||||
|
||||
[RCVD_ADD_COMMIT] = HTLC_ADDING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_ADD_REVOCATION] = HTLC_ADDING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_PENDING
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_ADD_ACK_COMMIT] = HTLC_ADDING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_ADD_ACK_REVOCATION] = HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_HTLC] = HTLC_REMOVING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_REMOTE_F_PENDING
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_COMMIT] = HTLC_REMOVING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_REVOCATION] = HTLC_REMOVING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_PENDING
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_ACK_COMMIT] = HTLC_REMOVING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_ACK_REVOCATION] = HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED
|
||||
};
|
||||
|
||||
int htlc_state_flags(enum htlc_state state)
|
||||
{
|
||||
assert(state < ARRAY_SIZE(per_state_bits));
|
||||
assert(per_state_bits[state]);
|
||||
return per_state_bits[state];
|
||||
}
|
||||
|
||||
void htlc_changestate(struct htlc *h,
|
||||
enum htlc_state oldstate,
|
||||
enum htlc_state newstate,
|
||||
|
|
149
daemon/htlc_state.c
Normal file
149
daemon/htlc_state.c
Normal file
|
@ -0,0 +1,149 @@
|
|||
#include "htlc.h"
|
||||
#include "gen_htlc_state_names.h"
|
||||
#include <ccan/array_size/array_size.h>
|
||||
|
||||
const char *htlc_state_name(enum htlc_state s)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; enum_htlc_state_names[i].name; i++)
|
||||
if (enum_htlc_state_names[i].v == s)
|
||||
return enum_htlc_state_names[i].name;
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
enum htlc_state htlc_state_from_name(const char *name)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; enum_htlc_state_names[i].name; i++)
|
||||
if (streq(enum_htlc_state_names[i].name, name))
|
||||
return enum_htlc_state_names[i].v;
|
||||
return HTLC_STATE_INVALID;
|
||||
}
|
||||
|
||||
/* This is the flags for each state. */
|
||||
static const int per_state_bits[] = {
|
||||
[SENT_ADD_HTLC] = HTLC_ADDING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_PENDING,
|
||||
|
||||
[SENT_ADD_COMMIT] = HTLC_ADDING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_ADD_REVOCATION] = HTLC_ADDING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_PENDING
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_ADD_ACK_COMMIT] = HTLC_ADDING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_ADD_ACK_REVOCATION] = HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_HTLC] = HTLC_REMOVING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_LOCAL_F_PENDING + HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_COMMIT] = HTLC_REMOVING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_REVOCATION] = HTLC_REMOVING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_PENDING
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_ACK_COMMIT] = HTLC_REMOVING + HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_ACK_REVOCATION] = HTLC_LOCAL_F_OWNER
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_ADD_HTLC] = HTLC_ADDING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_PENDING,
|
||||
|
||||
[RCVD_ADD_COMMIT] = HTLC_ADDING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_ADD_REVOCATION] = HTLC_ADDING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_PENDING
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_ADD_ACK_COMMIT] = HTLC_ADDING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_ADD_ACK_REVOCATION] = HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_HTLC] = HTLC_REMOVING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_REMOTE_F_PENDING
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_COMMIT] = HTLC_REMOVING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_REVOCATION] = HTLC_REMOVING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_LOCAL_F_COMMITTED
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_PENDING
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[RCVD_REMOVE_ACK_COMMIT] = HTLC_REMOVING + HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED,
|
||||
|
||||
[SENT_REMOVE_ACK_REVOCATION] = HTLC_REMOTE_F_OWNER
|
||||
+ HTLC_REMOTE_F_REVOKED
|
||||
+ HTLC_LOCAL_F_REVOKED
|
||||
+ HTLC_LOCAL_F_WAS_COMMITTED
|
||||
+ HTLC_REMOTE_F_WAS_COMMITTED
|
||||
};
|
||||
|
||||
int htlc_state_flags(enum htlc_state state)
|
||||
{
|
||||
assert(state < ARRAY_SIZE(per_state_bits));
|
||||
assert(per_state_bits[state]);
|
||||
return per_state_bits[state];
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
#include "daemon/channel.c"
|
||||
#include "daemon/htlc.c"
|
||||
#include "daemon/htlc_state.c"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue