mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 05:12:45 +01:00
sphinx: Decode payload and place shortcuts in the route-step
We'll need to pass them around anyway, so just make them easier to access by doing a bit more to `process_onionpacket`.
This commit is contained in:
parent
d69a43780c
commit
baffa84291
@ -683,6 +683,52 @@ struct onionpacket *create_onionpacket(
|
||||
return packet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to extract fields from the legacy or tlv payload into the top-level
|
||||
* struct.
|
||||
*/
|
||||
static void route_step_decode(struct route_step *rs)
|
||||
{
|
||||
switch (rs->type) {
|
||||
case SPHINX_V0_PAYLOAD:
|
||||
rs->amt_to_forward = &rs->payload.v0.amt_forward;
|
||||
rs->outgoing_cltv = &rs->payload.v0.outgoing_cltv;
|
||||
if (rs->nextcase == ONION_FORWARD) {
|
||||
rs->forward_channel = &rs->payload.v0.channel_id;
|
||||
} else {
|
||||
rs->forward_channel = NULL;
|
||||
}
|
||||
break;
|
||||
case SPHINX_TLV_PAYLOAD:
|
||||
if (rs->payload.tlv->amt_to_forward) {
|
||||
rs->amt_to_forward = tal(rs, struct amount_msat);
|
||||
amount_msat_from_u64(
|
||||
rs->amt_to_forward,
|
||||
rs->payload.tlv->amt_to_forward->amt_to_forward);
|
||||
} else {
|
||||
rs->amt_to_forward = NULL;
|
||||
}
|
||||
|
||||
if (rs->payload.tlv->outgoing_cltv_value) {
|
||||
rs->outgoing_cltv =
|
||||
&rs->payload.tlv->outgoing_cltv_value
|
||||
->outgoing_cltv_value;
|
||||
} else {
|
||||
rs->outgoing_cltv = NULL;
|
||||
}
|
||||
|
||||
if (rs->payload.tlv->short_channel_id)
|
||||
rs->forward_channel = &rs->payload.tlv->short_channel_id
|
||||
->short_channel_id;
|
||||
else
|
||||
rs->forward_channel = NULL;
|
||||
break;
|
||||
case SPHINX_INVALID_PAYLOAD:
|
||||
case SPHINX_RAW_PAYLOAD:
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Given an onionpacket msg extract the information for the current
|
||||
* node and unwrap the remainder so that the node can forward it.
|
||||
@ -754,6 +800,8 @@ struct route_step *process_onionpacket(
|
||||
step->nextcase = ONION_FORWARD;
|
||||
}
|
||||
|
||||
route_step_decode(step);
|
||||
|
||||
return step;
|
||||
}
|
||||
|
||||
|
@ -84,6 +84,11 @@ struct route_step {
|
||||
struct tlv_tlv_payload *tlv;
|
||||
} payload;
|
||||
u8 *raw_payload;
|
||||
|
||||
/* Quick access for internal use. */
|
||||
struct amount_msat *amt_to_forward;
|
||||
u32 *outgoing_cltv;
|
||||
struct short_channel_id *forward_channel;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -18,6 +18,9 @@ bool amount_asset_is_main(struct amount_asset *asset UNNEEDED)
|
||||
/* Generated stub for amount_asset_to_sat */
|
||||
struct amount_sat amount_asset_to_sat(struct amount_asset *asset UNNEEDED)
|
||||
{ fprintf(stderr, "amount_asset_to_sat called!\n"); abort(); }
|
||||
/* Generated stub for amount_msat_from_u64 */
|
||||
void amount_msat_from_u64(struct amount_msat *msat UNNEEDED, u64 millisatoshis UNNEEDED)
|
||||
{ fprintf(stderr, "amount_msat_from_u64 called!\n"); abort(); }
|
||||
/* Generated stub for amount_sat_add */
|
||||
bool amount_sat_add(struct amount_sat *val UNNEEDED,
|
||||
struct amount_sat a UNNEEDED,
|
||||
|
Loading…
Reference in New Issue
Block a user