mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-11-19 09:54:16 +01:00
ceb40dea38
Fixes: #4667 Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
321 lines
12 KiB
C
Generated
321 lines
12 KiB
C
Generated
/* This file was generated by generate-wire.py */
|
|
/* Do not modify this file! Modify the _csv file it was generated from. */
|
|
/* Original template can be found at tools/gen/header_template */
|
|
|
|
#ifndef LIGHTNING_WIRE_ONION_WIREGEN_H
|
|
#define LIGHTNING_WIRE_ONION_WIREGEN_H
|
|
#include <ccan/tal/tal.h>
|
|
#include <wire/tlvstream.h>
|
|
#include <wire/wire.h>
|
|
#include <bitcoin/short_channel_id.h>
|
|
#include <bitcoin/privkey.h>
|
|
#include <common/bigsize.h>
|
|
#include <common/amount.h>
|
|
#include <common/node_id.h>
|
|
#include <bitcoin/block.h>
|
|
#include <wire/onion_defs.h>
|
|
|
|
enum onion_wire {
|
|
WIRE_INVALID_REALM = PERM|1,
|
|
WIRE_TEMPORARY_NODE_FAILURE = NODE|2,
|
|
WIRE_PERMANENT_NODE_FAILURE = PERM|NODE|2,
|
|
WIRE_REQUIRED_NODE_FEATURE_MISSING = PERM|NODE|3,
|
|
WIRE_INVALID_ONION_VERSION = BADONION|PERM|4,
|
|
WIRE_INVALID_ONION_HMAC = BADONION|PERM|5,
|
|
WIRE_INVALID_ONION_KEY = BADONION|PERM|6,
|
|
WIRE_TEMPORARY_CHANNEL_FAILURE = UPDATE|7,
|
|
WIRE_PERMANENT_CHANNEL_FAILURE = PERM|8,
|
|
WIRE_REQUIRED_CHANNEL_FEATURE_MISSING = PERM|9,
|
|
WIRE_UNKNOWN_NEXT_PEER = PERM|10,
|
|
WIRE_AMOUNT_BELOW_MINIMUM = UPDATE|11,
|
|
WIRE_FEE_INSUFFICIENT = UPDATE|12,
|
|
WIRE_INCORRECT_CLTV_EXPIRY = UPDATE|13,
|
|
WIRE_EXPIRY_TOO_SOON = UPDATE|14,
|
|
WIRE_INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS = PERM|15,
|
|
WIRE_FINAL_INCORRECT_CLTV_EXPIRY = 18,
|
|
WIRE_FINAL_INCORRECT_HTLC_AMOUNT = 19,
|
|
WIRE_CHANNEL_DISABLED = UPDATE|20,
|
|
WIRE_EXPIRY_TOO_FAR = 21,
|
|
WIRE_INVALID_ONION_PAYLOAD = PERM|22,
|
|
WIRE_MPP_TIMEOUT = 23,
|
|
};
|
|
|
|
const char *onion_wire_name(int e);
|
|
|
|
/**
|
|
* Determine whether a given message type is defined as a message.
|
|
*
|
|
* Returns true if the message type is part of the message definitions we have
|
|
* generated parsers for, false if it is a custom message that cannot be
|
|
* handled internally.
|
|
*/
|
|
bool onion_wire_is_defined(u16 type);
|
|
|
|
struct onionmsg_path {
|
|
struct pubkey node_id;
|
|
u8 *enctlv;
|
|
};
|
|
struct tlv_tlv_payload_payment_data {
|
|
struct secret payment_secret;
|
|
u64 total_msat;
|
|
};
|
|
struct tlv_onionmsg_payload_reply_path {
|
|
struct pubkey blinding;
|
|
struct onionmsg_path **path;
|
|
};
|
|
struct tlv_tlv_payload {
|
|
/* Raw fields including unknown ones. */
|
|
struct tlv_field *fields;
|
|
|
|
/* TODO The following explicit fields could just point into the
|
|
* tlv_field entries above to save on memory. */
|
|
u64 *amt_to_forward;
|
|
u32 *outgoing_cltv_value;
|
|
struct short_channel_id *short_channel_id;
|
|
struct tlv_tlv_payload_payment_data *payment_data;
|
|
};
|
|
struct tlv_onionmsg_payload {
|
|
/* Raw fields including unknown ones. */
|
|
struct tlv_field *fields;
|
|
|
|
/* TODO The following explicit fields could just point into the
|
|
* tlv_field entries above to save on memory. */
|
|
struct pubkey *next_node_id;
|
|
struct short_channel_id *next_short_channel_id;
|
|
struct tlv_onionmsg_payload_reply_path *reply_path;
|
|
u8 *enctlv;
|
|
struct pubkey *blinding;
|
|
u8 *invoice_request;
|
|
u8 *invoice;
|
|
u8 *invoice_error;
|
|
};
|
|
struct tlv_encmsg_tlvs {
|
|
/* Raw fields including unknown ones. */
|
|
struct tlv_field *fields;
|
|
|
|
/* TODO The following explicit fields could just point into the
|
|
* tlv_field entries above to save on memory. */
|
|
struct pubkey *next_node_id;
|
|
struct short_channel_id *next_short_channel_id;
|
|
};
|
|
|
|
struct tlv_tlv_payload *tlv_tlv_payload_new(const tal_t *ctx);
|
|
|
|
/**
|
|
* Deserialize a TLV stream for the tlv_payload namespace.
|
|
*
|
|
* This function will parse any TLV stream, as long as the type, length and
|
|
* value fields are formatted correctly. Fields that are not known in the
|
|
* current namespace are stored in the `fields` member. Validity can be
|
|
* checked using tlv_payload_is_valid.
|
|
*/
|
|
bool fromwire_tlv_payload(const u8 **cursor, size_t *max,
|
|
struct tlv_tlv_payload * record);
|
|
|
|
/**
|
|
* Serialize a TLV stream for the tlv_payload namespace.
|
|
*
|
|
* This function only considers known fields from the tlv_payload namespace,
|
|
* and will ignore any fields that may be stored in the `fields` member. This
|
|
* ensures that the resulting stream is valid according to
|
|
* `tlv_payload_is_valid`.
|
|
*/
|
|
void towire_tlv_payload(u8 **pptr, const struct tlv_tlv_payload *record);
|
|
|
|
/**
|
|
* Check that the TLV stream is valid.
|
|
*
|
|
* Enforces the followin validity rules:
|
|
* - Types must be in monotonic non-repeating order
|
|
* - We must understand all even types
|
|
*
|
|
* Returns false if an error was detected, otherwise returns true. If err_index
|
|
* is non-null and we detect an error it is set to the index of the first error
|
|
* detected.
|
|
*/
|
|
bool tlv_payload_is_valid(const struct tlv_tlv_payload *record,
|
|
size_t *err_index);
|
|
|
|
#define TLVS_ARRAY_SIZE_tlv_payload 4
|
|
extern const struct tlv_record_type tlvs_tlv_payload[];
|
|
|
|
|
|
|
|
/* Define an enum with the constants */
|
|
enum tlv_payload_types {
|
|
TLV_TLV_PAYLOAD_AMT_TO_FORWARD = 2,
|
|
TLV_TLV_PAYLOAD_OUTGOING_CLTV_VALUE = 4,
|
|
TLV_TLV_PAYLOAD_SHORT_CHANNEL_ID = 6,
|
|
TLV_TLV_PAYLOAD_PAYMENT_DATA = 8,
|
|
};
|
|
|
|
struct tlv_onionmsg_payload *tlv_onionmsg_payload_new(const tal_t *ctx);
|
|
|
|
/**
|
|
* Deserialize a TLV stream for the onionmsg_payload namespace.
|
|
*
|
|
* This function will parse any TLV stream, as long as the type, length and
|
|
* value fields are formatted correctly. Fields that are not known in the
|
|
* current namespace are stored in the `fields` member. Validity can be
|
|
* checked using onionmsg_payload_is_valid.
|
|
*/
|
|
bool fromwire_onionmsg_payload(const u8 **cursor, size_t *max,
|
|
struct tlv_onionmsg_payload * record);
|
|
|
|
/**
|
|
* Serialize a TLV stream for the onionmsg_payload namespace.
|
|
*
|
|
* This function only considers known fields from the onionmsg_payload namespace,
|
|
* and will ignore any fields that may be stored in the `fields` member. This
|
|
* ensures that the resulting stream is valid according to
|
|
* `onionmsg_payload_is_valid`.
|
|
*/
|
|
void towire_onionmsg_payload(u8 **pptr, const struct tlv_onionmsg_payload *record);
|
|
|
|
/**
|
|
* Check that the TLV stream is valid.
|
|
*
|
|
* Enforces the followin validity rules:
|
|
* - Types must be in monotonic non-repeating order
|
|
* - We must understand all even types
|
|
*
|
|
* Returns false if an error was detected, otherwise returns true. If err_index
|
|
* is non-null and we detect an error it is set to the index of the first error
|
|
* detected.
|
|
*/
|
|
bool onionmsg_payload_is_valid(const struct tlv_onionmsg_payload *record,
|
|
size_t *err_index);
|
|
|
|
struct tlv_encmsg_tlvs *tlv_encmsg_tlvs_new(const tal_t *ctx);
|
|
|
|
/**
|
|
* Deserialize a TLV stream for the encmsg_tlvs namespace.
|
|
*
|
|
* This function will parse any TLV stream, as long as the type, length and
|
|
* value fields are formatted correctly. Fields that are not known in the
|
|
* current namespace are stored in the `fields` member. Validity can be
|
|
* checked using encmsg_tlvs_is_valid.
|
|
*/
|
|
bool fromwire_encmsg_tlvs(const u8 **cursor, size_t *max,
|
|
struct tlv_encmsg_tlvs * record);
|
|
|
|
/**
|
|
* Serialize a TLV stream for the encmsg_tlvs namespace.
|
|
*
|
|
* This function only considers known fields from the encmsg_tlvs namespace,
|
|
* and will ignore any fields that may be stored in the `fields` member. This
|
|
* ensures that the resulting stream is valid according to
|
|
* `encmsg_tlvs_is_valid`.
|
|
*/
|
|
void towire_encmsg_tlvs(u8 **pptr, const struct tlv_encmsg_tlvs *record);
|
|
|
|
/**
|
|
* Check that the TLV stream is valid.
|
|
*
|
|
* Enforces the followin validity rules:
|
|
* - Types must be in monotonic non-repeating order
|
|
* - We must understand all even types
|
|
*
|
|
* Returns false if an error was detected, otherwise returns true. If err_index
|
|
* is non-null and we detect an error it is set to the index of the first error
|
|
* detected.
|
|
*/
|
|
bool encmsg_tlvs_is_valid(const struct tlv_encmsg_tlvs *record,
|
|
size_t *err_index);
|
|
|
|
/* SUBTYPE: ONIONMSG_PATH */
|
|
void towire_onionmsg_path(u8 **p, const struct onionmsg_path *onionmsg_path);
|
|
struct onionmsg_path *fromwire_onionmsg_path(const tal_t *ctx, const u8 **cursor, size_t *plen);
|
|
|
|
/* WIRE: INVALID_REALM */
|
|
u8 *towire_invalid_realm(const tal_t *ctx);
|
|
bool fromwire_invalid_realm(const void *p);
|
|
|
|
/* WIRE: TEMPORARY_NODE_FAILURE */
|
|
u8 *towire_temporary_node_failure(const tal_t *ctx);
|
|
bool fromwire_temporary_node_failure(const void *p);
|
|
|
|
/* WIRE: PERMANENT_NODE_FAILURE */
|
|
u8 *towire_permanent_node_failure(const tal_t *ctx);
|
|
bool fromwire_permanent_node_failure(const void *p);
|
|
|
|
/* WIRE: REQUIRED_NODE_FEATURE_MISSING */
|
|
u8 *towire_required_node_feature_missing(const tal_t *ctx);
|
|
bool fromwire_required_node_feature_missing(const void *p);
|
|
|
|
/* WIRE: INVALID_ONION_VERSION */
|
|
u8 *towire_invalid_onion_version(const tal_t *ctx, const struct sha256 *sha256_of_onion);
|
|
bool fromwire_invalid_onion_version(const void *p, struct sha256 *sha256_of_onion);
|
|
|
|
/* WIRE: INVALID_ONION_HMAC */
|
|
u8 *towire_invalid_onion_hmac(const tal_t *ctx, const struct sha256 *sha256_of_onion);
|
|
bool fromwire_invalid_onion_hmac(const void *p, struct sha256 *sha256_of_onion);
|
|
|
|
/* WIRE: INVALID_ONION_KEY */
|
|
u8 *towire_invalid_onion_key(const tal_t *ctx, const struct sha256 *sha256_of_onion);
|
|
bool fromwire_invalid_onion_key(const void *p, struct sha256 *sha256_of_onion);
|
|
|
|
/* WIRE: TEMPORARY_CHANNEL_FAILURE */
|
|
u8 *towire_temporary_channel_failure(const tal_t *ctx, const u8 *channel_update);
|
|
bool fromwire_temporary_channel_failure(const tal_t *ctx, const void *p, u8 **channel_update);
|
|
|
|
/* WIRE: PERMANENT_CHANNEL_FAILURE */
|
|
u8 *towire_permanent_channel_failure(const tal_t *ctx);
|
|
bool fromwire_permanent_channel_failure(const void *p);
|
|
|
|
/* WIRE: REQUIRED_CHANNEL_FEATURE_MISSING */
|
|
u8 *towire_required_channel_feature_missing(const tal_t *ctx);
|
|
bool fromwire_required_channel_feature_missing(const void *p);
|
|
|
|
/* WIRE: UNKNOWN_NEXT_PEER */
|
|
u8 *towire_unknown_next_peer(const tal_t *ctx);
|
|
bool fromwire_unknown_next_peer(const void *p);
|
|
|
|
/* WIRE: AMOUNT_BELOW_MINIMUM */
|
|
u8 *towire_amount_below_minimum(const tal_t *ctx, struct amount_msat htlc_msat, const u8 *channel_update);
|
|
bool fromwire_amount_below_minimum(const tal_t *ctx, const void *p, struct amount_msat *htlc_msat, u8 **channel_update);
|
|
|
|
/* WIRE: FEE_INSUFFICIENT */
|
|
u8 *towire_fee_insufficient(const tal_t *ctx, struct amount_msat htlc_msat, const u8 *channel_update);
|
|
bool fromwire_fee_insufficient(const tal_t *ctx, const void *p, struct amount_msat *htlc_msat, u8 **channel_update);
|
|
|
|
/* WIRE: INCORRECT_CLTV_EXPIRY */
|
|
u8 *towire_incorrect_cltv_expiry(const tal_t *ctx, u32 cltv_expiry, const u8 *channel_update);
|
|
bool fromwire_incorrect_cltv_expiry(const tal_t *ctx, const void *p, u32 *cltv_expiry, u8 **channel_update);
|
|
|
|
/* WIRE: EXPIRY_TOO_SOON */
|
|
u8 *towire_expiry_too_soon(const tal_t *ctx, const u8 *channel_update);
|
|
bool fromwire_expiry_too_soon(const tal_t *ctx, const void *p, u8 **channel_update);
|
|
|
|
/* WIRE: INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS */
|
|
u8 *towire_incorrect_or_unknown_payment_details(const tal_t *ctx, struct amount_msat htlc_msat, u32 height);
|
|
bool fromwire_incorrect_or_unknown_payment_details(const void *p, struct amount_msat *htlc_msat, u32 *height);
|
|
|
|
/* WIRE: FINAL_INCORRECT_CLTV_EXPIRY */
|
|
u8 *towire_final_incorrect_cltv_expiry(const tal_t *ctx, u32 cltv_expiry);
|
|
bool fromwire_final_incorrect_cltv_expiry(const void *p, u32 *cltv_expiry);
|
|
|
|
/* WIRE: FINAL_INCORRECT_HTLC_AMOUNT */
|
|
u8 *towire_final_incorrect_htlc_amount(const tal_t *ctx, struct amount_msat incoming_htlc_amt);
|
|
bool fromwire_final_incorrect_htlc_amount(const void *p, struct amount_msat *incoming_htlc_amt);
|
|
|
|
/* WIRE: CHANNEL_DISABLED */
|
|
u8 *towire_channel_disabled(const tal_t *ctx);
|
|
bool fromwire_channel_disabled(const void *p);
|
|
|
|
/* WIRE: EXPIRY_TOO_FAR */
|
|
u8 *towire_expiry_too_far(const tal_t *ctx);
|
|
bool fromwire_expiry_too_far(const void *p);
|
|
|
|
/* WIRE: INVALID_ONION_PAYLOAD */
|
|
u8 *towire_invalid_onion_payload(const tal_t *ctx, bigsize type, u16 offset);
|
|
bool fromwire_invalid_onion_payload(const void *p, bigsize *type, u16 *offset);
|
|
|
|
/* WIRE: MPP_TIMEOUT */
|
|
u8 *towire_mpp_timeout(const tal_t *ctx);
|
|
bool fromwire_mpp_timeout(const void *p);
|
|
|
|
|
|
#endif /* LIGHTNING_WIRE_ONION_WIREGEN_H */
|
|
// SHA256STAMP:79946dd94a6cd6e0af297d3676c688228c7098e6b874469cd49b63fee97ac8cf
|