diff --git a/daemon/Makefile b/daemon/Makefile index fa8477d8a..e035cb04d 100644 --- a/daemon/Makefile +++ b/daemon/Makefile @@ -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 \ diff --git a/daemon/htlc.c b/daemon/htlc.c index 5d7d56cdf..8402da123 100644 --- a/daemon/htlc.c +++ b/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 -#include #include #include -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, diff --git a/daemon/htlc_state.c b/daemon/htlc_state.c new file mode 100644 index 000000000..0219dec45 --- /dev/null +++ b/daemon/htlc_state.c @@ -0,0 +1,149 @@ +#include "htlc.h" + #include "gen_htlc_state_names.h" +#include + +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]; +} + diff --git a/daemon/test/run-maxfee.c b/daemon/test/run-maxfee.c index f544b439a..d05bc8296 100644 --- a/daemon/test/run-maxfee.c +++ b/daemon/test/run-maxfee.c @@ -1,5 +1,6 @@ #include "daemon/channel.c" #include "daemon/htlc.c" +#include "daemon/htlc_state.c" #include #include