Skip to content

Commit 9cc0e98

Browse files
authored
Merge pull request #2845 from wpaulino/decode-htlc-onion-when-committed
Support decoding HTLC onions once fully committed
2 parents 6159325 + fe65648 commit 9cc0e98

File tree

9 files changed

+760
-364
lines changed

9 files changed

+760
-364
lines changed

lightning/src/crypto/streams.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ mod tests {
151151
let writeable_len = $obj.serialized_length() as u64 + 16;
152152
let write_adapter = ChaChaPolyWriteAdapter::new(rho, &$obj);
153153
let encrypted_writeable_bytes = write_adapter.encode();
154-
let encrypted_writeable = &encrypted_writeable_bytes[..];
154+
let encrypted_writeable = &mut &encrypted_writeable_bytes[..];
155155

156156
// Now deserialize the object back and make sure it matches the original.
157157
let mut rd = FixedLengthReader::new(encrypted_writeable, writeable_len);

lightning/src/events/mod.rs

+19-16
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,8 @@ pub enum HTLCDestination {
302302
/// Short channel id we are requesting to forward an HTLC to.
303303
requested_forward_scid: u64
304304
},
305+
/// We couldn't decode the incoming onion to obtain the forwarding details.
306+
InvalidOnion,
305307
/// Failure scenario where an HTLC may have been forwarded to be intended for us,
306308
/// but is invalid for some reason, so we reject it.
307309
///
@@ -329,6 +331,7 @@ impl_writeable_tlv_based_enum_upgradable!(HTLCDestination,
329331
(2, UnknownNextHop) => {
330332
(0, requested_forward_scid, required),
331333
},
334+
(3, InvalidOnion) => {},
332335
(4, FailedPayment) => {
333336
(0, payment_hash, required),
334337
},
@@ -1294,7 +1297,7 @@ impl MaybeReadable for Event {
12941297
// Note that we do not write a length-prefixed TLV for FundingGenerationReady events.
12951298
0u8 => Ok(None),
12961299
1u8 => {
1297-
let f = || {
1300+
let mut f = || {
12981301
let mut payment_hash = PaymentHash([0; 32]);
12991302
let mut payment_preimage = None;
13001303
let mut payment_secret = None;
@@ -1342,7 +1345,7 @@ impl MaybeReadable for Event {
13421345
f()
13431346
},
13441347
2u8 => {
1345-
let f = || {
1348+
let mut f = || {
13461349
let mut payment_preimage = PaymentPreimage([0; 32]);
13471350
let mut payment_hash = None;
13481351
let mut payment_id = None;
@@ -1366,7 +1369,7 @@ impl MaybeReadable for Event {
13661369
f()
13671370
},
13681371
3u8 => {
1369-
let f = || {
1372+
let mut f = || {
13701373
#[cfg(test)]
13711374
let error_code = Readable::read(reader)?;
13721375
#[cfg(test)]
@@ -1409,7 +1412,7 @@ impl MaybeReadable for Event {
14091412
},
14101413
4u8 => Ok(None),
14111414
5u8 => {
1412-
let f = || {
1415+
let mut f = || {
14131416
let mut outputs = WithoutLength(Vec::new());
14141417
let mut channel_id: Option<ChannelId> = None;
14151418
read_tlv_fields!(reader, {
@@ -1445,7 +1448,7 @@ impl MaybeReadable for Event {
14451448
}))
14461449
},
14471450
7u8 => {
1448-
let f = || {
1451+
let mut f = || {
14491452
let mut prev_channel_id = None;
14501453
let mut next_channel_id = None;
14511454
let mut prev_user_channel_id = None;
@@ -1473,7 +1476,7 @@ impl MaybeReadable for Event {
14731476
f()
14741477
},
14751478
9u8 => {
1476-
let f = || {
1479+
let mut f = || {
14771480
let mut channel_id = ChannelId::new_zero();
14781481
let mut reason = UpgradableRequired(None);
14791482
let mut user_channel_id_low_opt: Option<u64> = None;
@@ -1503,7 +1506,7 @@ impl MaybeReadable for Event {
15031506
f()
15041507
},
15051508
11u8 => {
1506-
let f = || {
1509+
let mut f = || {
15071510
let mut channel_id = ChannelId::new_zero();
15081511
let mut transaction = Transaction{ version: 2, lock_time: LockTime::ZERO, input: Vec::new(), output: Vec::new() };
15091512
read_tlv_fields!(reader, {
@@ -1515,7 +1518,7 @@ impl MaybeReadable for Event {
15151518
f()
15161519
},
15171520
13u8 => {
1518-
let f = || {
1521+
let mut f = || {
15191522
_init_and_read_len_prefixed_tlv_fields!(reader, {
15201523
(0, payment_id, required),
15211524
(2, payment_hash, option),
@@ -1531,7 +1534,7 @@ impl MaybeReadable for Event {
15311534
f()
15321535
},
15331536
15u8 => {
1534-
let f = || {
1537+
let mut f = || {
15351538
let mut payment_hash = PaymentHash([0; 32]);
15361539
let mut payment_id = PaymentId([0; 32]);
15371540
let mut reason = None;
@@ -1553,7 +1556,7 @@ impl MaybeReadable for Event {
15531556
Ok(None)
15541557
},
15551558
19u8 => {
1556-
let f = || {
1559+
let mut f = || {
15571560
let mut payment_hash = PaymentHash([0; 32]);
15581561
let mut purpose = UpgradableRequired(None);
15591562
let mut amount_msat = 0;
@@ -1580,7 +1583,7 @@ impl MaybeReadable for Event {
15801583
f()
15811584
},
15821585
21u8 => {
1583-
let f = || {
1586+
let mut f = || {
15841587
_init_and_read_len_prefixed_tlv_fields!(reader, {
15851588
(0, payment_id, required),
15861589
(2, payment_hash, required),
@@ -1596,7 +1599,7 @@ impl MaybeReadable for Event {
15961599
f()
15971600
},
15981601
23u8 => {
1599-
let f = || {
1602+
let mut f = || {
16001603
_init_and_read_len_prefixed_tlv_fields!(reader, {
16011604
(0, payment_id, required),
16021605
(2, payment_hash, required),
@@ -1614,7 +1617,7 @@ impl MaybeReadable for Event {
16141617
f()
16151618
},
16161619
25u8 => {
1617-
let f = || {
1620+
let mut f = || {
16181621
let mut prev_channel_id = ChannelId::new_zero();
16191622
let mut failed_next_destination_opt = UpgradableRequired(None);
16201623
read_tlv_fields!(reader, {
@@ -1630,7 +1633,7 @@ impl MaybeReadable for Event {
16301633
},
16311634
27u8 => Ok(None),
16321635
29u8 => {
1633-
let f = || {
1636+
let mut f = || {
16341637
let mut channel_id = ChannelId::new_zero();
16351638
let mut user_channel_id: u128 = 0;
16361639
let mut counterparty_node_id = RequiredWrapper(None);
@@ -1652,7 +1655,7 @@ impl MaybeReadable for Event {
16521655
f()
16531656
},
16541657
31u8 => {
1655-
let f = || {
1658+
let mut f = || {
16561659
let mut channel_id = ChannelId::new_zero();
16571660
let mut user_channel_id: u128 = 0;
16581661
let mut former_temporary_channel_id = None;
@@ -1680,7 +1683,7 @@ impl MaybeReadable for Event {
16801683
f()
16811684
},
16821685
33u8 => {
1683-
let f = || {
1686+
let mut f = || {
16841687
_init_and_read_len_prefixed_tlv_fields!(reader, {
16851688
(0, payment_id, required),
16861689
});

0 commit comments

Comments
 (0)