core-lightning/wire/onion_wiregen.h
Rusty Russell f2a4bd6ad8 wire: import new onion message spec.
One change from the obsolete version handling, gossipd will no longer send
forwarding onion msgs to lightningd, but will forward it directly.
That was the effect before, anyway.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2021-09-22 09:10:34 +09:30

330 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 first_node_id;
struct pubkey blinding;
struct onionmsg_path **path;
};
struct tlv_onionmsg_payload_obs_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 tlv_onionmsg_payload_reply_path *reply_path;
struct pubkey *obs_next_node_id;
struct short_channel_id *obs_next_short_channel_id;
struct tlv_onionmsg_payload_obs_reply_path *obs_reply_path;
u8 *enctlv;
struct pubkey *obs_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. */
u8 *padding;
struct pubkey *next_node_id;
struct short_channel_id *obs_next_short_channel_id;
struct pubkey *next_blinding;
u8 *self_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:dc74e1b66f37a96bed7d2ab3f5b83fdf7cbe4ee7775ebda3ee43812e75f260ba