mirror of
https://github.com/aljazceru/lightning.git
synced 2026-02-03 13:14:22 +01:00
wire/tlvstream: add tlv_make_fields helper to populate ->fields array.
This is vital for calculating merkle trees; I previously used towire+fromwire to get this! Requires generation change so we can magic the ARRAY_SIZE var (the C pre-processor can't uppercase things). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
neil saitug
parent
5c167d16ab
commit
ff8830876d
2
wire/common_wiregen.c
generated
2
wire/common_wiregen.c
generated
@@ -100,4 +100,4 @@ bool fromwire_custommsg_out(const tal_t *ctx, const void *p, u8 **msg)
|
||||
fromwire_u8_array(&cursor, &plen, *msg, msg_len);
|
||||
return cursor != NULL;
|
||||
}
|
||||
// SHA256STAMP:9d2e11b0a9eefdde3d80dc605aeda2c85089c894388740b1d94d7ca97bd95acc
|
||||
// SHA256STAMP:83d7a6305b316f37ff2278d9c4fb2c9efa9381688b78b84dd0a8928ca67e1563
|
||||
|
||||
2
wire/common_wiregen.h
generated
2
wire/common_wiregen.h
generated
@@ -41,4 +41,4 @@ bool fromwire_custommsg_out(const tal_t *ctx, const void *p, u8 **msg);
|
||||
|
||||
|
||||
#endif /* LIGHTNING_WIRE_COMMON_WIREGEN_H */
|
||||
// SHA256STAMP:9d2e11b0a9eefdde3d80dc605aeda2c85089c894388740b1d94d7ca97bd95acc
|
||||
// SHA256STAMP:83d7a6305b316f37ff2278d9c4fb2c9efa9381688b78b84dd0a8928ca67e1563
|
||||
|
||||
2
wire/onion_printgen.c
generated
2
wire/onion_printgen.c
generated
@@ -653,4 +653,4 @@ void printonion_wire_tlv_message(const char *tlv_name, const u8 *msg) {
|
||||
printwire_tlvs(tlv_name, &msg, &plen, print_tlvs_tlv_payload, ARRAY_SIZE(print_tlvs_tlv_payload));
|
||||
}
|
||||
}
|
||||
// SHA256STAMP:3edc0ac5906e013377cc195c01e5cb67274c2a7560f51b946ff5149d755d36bd
|
||||
// SHA256STAMP:c330a3a671d28980727dc42fb48b8f9051ee609c96445333105b7d5ab15d0ede
|
||||
|
||||
2
wire/onion_printgen.h
generated
2
wire/onion_printgen.h
generated
@@ -57,4 +57,4 @@ void printwire_mpp_timeout(const char *fieldname, const u8 *cursor);
|
||||
|
||||
|
||||
#endif /* LIGHTNING_WIRE_ONION_PRINTGEN_H */
|
||||
// SHA256STAMP:3edc0ac5906e013377cc195c01e5cb67274c2a7560f51b946ff5149d755d36bd
|
||||
// SHA256STAMP:c330a3a671d28980727dc42fb48b8f9051ee609c96445333105b7d5ab15d0ede
|
||||
|
||||
2
wire/onion_wiregen.c
generated
2
wire/onion_wiregen.c
generated
@@ -697,4 +697,4 @@ bool fromwire_mpp_timeout(const void *p)
|
||||
return false;
|
||||
return cursor != NULL;
|
||||
}
|
||||
// SHA256STAMP:3edc0ac5906e013377cc195c01e5cb67274c2a7560f51b946ff5149d755d36bd
|
||||
// SHA256STAMP:c330a3a671d28980727dc42fb48b8f9051ee609c96445333105b7d5ab15d0ede
|
||||
|
||||
4
wire/onion_wiregen.h
generated
4
wire/onion_wiregen.h
generated
@@ -104,7 +104,7 @@ void towire_tlv_payload(u8 **pptr, const struct tlv_tlv_payload *record);
|
||||
bool tlv_payload_is_valid(const struct tlv_tlv_payload *record,
|
||||
size_t *err_index);
|
||||
|
||||
#define TLVS_TLV_PAYLOAD_ARRAY_SIZE 4
|
||||
#define TLVS_ARRAY_SIZE_tlv_payload 4
|
||||
extern const struct tlv_record_type tlvs_tlv_payload[];
|
||||
|
||||
|
||||
@@ -207,4 +207,4 @@ bool fromwire_mpp_timeout(const void *p);
|
||||
|
||||
|
||||
#endif /* LIGHTNING_WIRE_ONION_WIREGEN_H */
|
||||
// SHA256STAMP:3edc0ac5906e013377cc195c01e5cb67274c2a7560f51b946ff5149d755d36bd
|
||||
// SHA256STAMP:c330a3a671d28980727dc42fb48b8f9051ee609c96445333105b7d5ab15d0ede
|
||||
|
||||
2
wire/peer_printgen.c
generated
2
wire/peer_printgen.c
generated
@@ -2036,4 +2036,4 @@ void printpeer_wire_tlv_message(const char *tlv_name, const u8 *msg) {
|
||||
printwire_tlvs(tlv_name, &msg, &plen, print_tlvs_reply_channel_range_tlvs, ARRAY_SIZE(print_tlvs_reply_channel_range_tlvs));
|
||||
}
|
||||
}
|
||||
// SHA256STAMP:a2fdacbfaf7025bcb919b426f2e17fdc317a0bc6a80fe3c05f5dedac30f00256
|
||||
// SHA256STAMP:cda6c1b9f5b71e94ce4d2791a16dfeddc52ea3b2ad09ce4915101fe6e41dfc92
|
||||
|
||||
2
wire/peer_printgen.h
generated
2
wire/peer_printgen.h
generated
@@ -70,4 +70,4 @@ void printwire_gossip_timestamp_filter(const char *fieldname, const u8 *cursor);
|
||||
void printwire_channel_update_checksums(const char *fieldname, const u8 **cursor, size_t *plen);
|
||||
void printwire_channel_update_timestamps(const char *fieldname, const u8 **cursor, size_t *plen);
|
||||
#endif /* LIGHTNING_WIRE_PEER_PRINTGEN_H */
|
||||
// SHA256STAMP:a2fdacbfaf7025bcb919b426f2e17fdc317a0bc6a80fe3c05f5dedac30f00256
|
||||
// SHA256STAMP:cda6c1b9f5b71e94ce4d2791a16dfeddc52ea3b2ad09ce4915101fe6e41dfc92
|
||||
|
||||
2
wire/peer_wiregen.c
generated
2
wire/peer_wiregen.c
generated
@@ -1630,4 +1630,4 @@ bool fromwire_channel_update_option_channel_htlc_max(const void *p, secp256k1_ec
|
||||
*htlc_maximum_msat = fromwire_amount_msat(&cursor, &plen);
|
||||
return cursor != NULL;
|
||||
}
|
||||
// SHA256STAMP:a2fdacbfaf7025bcb919b426f2e17fdc317a0bc6a80fe3c05f5dedac30f00256
|
||||
// SHA256STAMP:cda6c1b9f5b71e94ce4d2791a16dfeddc52ea3b2ad09ce4915101fe6e41dfc92
|
||||
|
||||
6
wire/peer_wiregen.h
generated
6
wire/peer_wiregen.h
generated
@@ -223,7 +223,7 @@ void towire_n1(u8 **pptr, const struct tlv_n1 *record);
|
||||
bool n1_is_valid(const struct tlv_n1 *record,
|
||||
size_t *err_index);
|
||||
|
||||
#define TLVS_N1_ARRAY_SIZE 4
|
||||
#define TLVS_ARRAY_SIZE_n1 4
|
||||
extern const struct tlv_record_type tlvs_n1[];
|
||||
|
||||
|
||||
@@ -273,7 +273,7 @@ void towire_n2(u8 **pptr, const struct tlv_n2 *record);
|
||||
bool n2_is_valid(const struct tlv_n2 *record,
|
||||
size_t *err_index);
|
||||
|
||||
#define TLVS_N2_ARRAY_SIZE 2
|
||||
#define TLVS_ARRAY_SIZE_n2 2
|
||||
extern const struct tlv_record_type tlvs_n2[];
|
||||
|
||||
|
||||
@@ -595,4 +595,4 @@ bool fromwire_channel_update_option_channel_htlc_max(const void *p, secp256k1_ec
|
||||
|
||||
|
||||
#endif /* LIGHTNING_WIRE_PEER_WIREGEN_H */
|
||||
// SHA256STAMP:a2fdacbfaf7025bcb919b426f2e17fdc317a0bc6a80fe3c05f5dedac30f00256
|
||||
// SHA256STAMP:cda6c1b9f5b71e94ce4d2791a16dfeddc52ea3b2ad09ce4915101fe6e41dfc92
|
||||
|
||||
@@ -271,3 +271,27 @@ void towire_tlv(u8 **pptr,
|
||||
tal_free(val);
|
||||
}
|
||||
}
|
||||
|
||||
struct tlv_field *tlv_make_fields_(const struct tlv_record_type *types,
|
||||
size_t num_types,
|
||||
const void *record)
|
||||
{
|
||||
struct tlv_field *fields = tal_arr(record, struct tlv_field, 0);
|
||||
|
||||
for (size_t i = 0; i < num_types; i++) {
|
||||
struct tlv_field f;
|
||||
u8 *val;
|
||||
if (i != 0)
|
||||
assert(types[i].type > types[i-1].type);
|
||||
val = types[i].towire(NULL, record);
|
||||
if (!val)
|
||||
continue;
|
||||
|
||||
f.meta = &types[i];
|
||||
f.numtype = types[i].type;
|
||||
f.length = tal_bytelen(val);
|
||||
f.value = tal_steal(fields, val);
|
||||
tal_arr_expand(&fields, f);
|
||||
}
|
||||
return fields;
|
||||
}
|
||||
|
||||
@@ -30,6 +30,14 @@ struct tlv_field {
|
||||
/* Given any tlvstream serialize the raw fields (untyped ones). */
|
||||
void towire_tlvstream_raw(u8 **pptr, const struct tlv_field *fields);
|
||||
|
||||
/* Given a tlv record with manually-set fields, populate ->fields */
|
||||
#define tlv_make_fields(tlv, type) \
|
||||
tlv_make_fields_(tlvs_##type, TLVS_ARRAY_SIZE_##type, (tlv))
|
||||
|
||||
struct tlv_field *tlv_make_fields_(const struct tlv_record_type *types,
|
||||
size_t num_types,
|
||||
const void *record);
|
||||
|
||||
/* Generic TLV decode/encode */
|
||||
bool fromwire_tlv(const u8 **cursor, size_t *max,
|
||||
const struct tlv_record_type *types, size_t num_types,
|
||||
|
||||
Reference in New Issue
Block a user