1
1
use secp256k1:: key:: { SecretKey , PublicKey } ;
2
2
3
3
use ln:: msgs;
4
- use ln :: msgs :: { MsgEncodable , MsgDecodable } ;
4
+ use util :: ser :: { Writer , Reader , Writeable , Readable } ;
5
5
use ln:: peer_channel_encryptor:: { PeerChannelEncryptor , NextNoiseStep } ;
6
6
use util:: byte_utils;
7
7
use util:: events:: { EventsProvider , Event } ;
@@ -113,15 +113,15 @@ pub struct PeerManager<Descriptor: SocketDescriptor> {
113
113
}
114
114
115
115
macro_rules! encode_msg {
116
- ( $msg: expr, $msg_code: expr) => {
117
- {
118
- let just_msg = $msg . encode ( ) ;
119
- let mut encoded_msg = Vec :: with_capacity ( just_msg . len ( ) + 2 ) ;
120
- encoded_msg . extend_from_slice ( & byte_utils :: be16_to_array ( $msg_code ) ) ;
121
- encoded_msg . extend_from_slice ( & just_msg [ .. ] ) ;
122
- encoded_msg
123
- }
124
- }
116
+ ( $msg: expr, $msg_code: expr) => { {
117
+ let mut w = Writer :: new ( :: std :: io :: Cursor :: new ( vec! [ ] ) ) ;
118
+ 0u16 . write ( & mut w ) . unwrap ( ) ;
119
+ $msg . write ( & mut w ) . unwrap ( ) ;
120
+ let mut msg = w . into_inner ( ) . into_inner ( ) ;
121
+ let len = msg . len ( ) ;
122
+ msg [ .. 2 ] . copy_from_slice ( & byte_utils :: be16_to_array ( len as u16 - 2 ) ) ;
123
+ msg
124
+ } }
125
125
}
126
126
127
127
//TODO: Really should do something smarter for this
@@ -365,7 +365,6 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
365
365
msgs:: DecodeError :: BadLengthDescriptor => return Err ( PeerHandleError { no_connection_possible: false } ) ,
366
366
msgs:: DecodeError :: Io ( _) => return Err ( PeerHandleError { no_connection_possible: false } ) ,
367
367
msgs:: DecodeError :: InvalidValue => return Err ( PeerHandleError { no_connection_possible: false } ) ,
368
- msgs:: DecodeError :: InvalidLength => return Err ( PeerHandleError { no_connection_possible: false } ) ,
369
368
}
370
369
}
371
370
} ;
@@ -438,10 +437,11 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
438
437
// Need an init message as first message
439
438
return Err ( PeerHandleError { no_connection_possible : false } ) ;
440
439
}
440
+ let mut reader = Reader :: new ( :: std:: io:: Cursor :: new ( & msg_data[ 2 ..] ) ) ;
441
441
match msg_type {
442
442
// Connection control:
443
443
16 => {
444
- let msg = try_potential_decodeerror ! ( msgs:: Init :: decode ( & msg_data [ 2 .. ] ) ) ;
444
+ let msg = try_potential_decodeerror ! ( msgs:: Init :: read ( & mut reader ) ) ;
445
445
if msg. global_features . requires_unknown_bits ( ) {
446
446
return Err ( PeerHandleError { no_connection_possible : true } ) ;
447
447
}
@@ -467,7 +467,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
467
467
}
468
468
} ,
469
469
17 => {
470
- let msg = try_potential_decodeerror ! ( msgs:: ErrorMessage :: decode ( & msg_data [ 2 .. ] ) ) ;
470
+ let msg = try_potential_decodeerror ! ( msgs:: ErrorMessage :: read ( & mut reader ) ) ;
471
471
let mut data_is_printable = true ;
472
472
for b in msg. data . bytes ( ) {
473
473
if b < 32 || b > 126 {
@@ -488,38 +488,38 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
488
488
} ,
489
489
490
490
18 => {
491
- let msg = try_potential_decodeerror ! ( msgs:: Ping :: decode ( & msg_data [ 2 .. ] ) ) ;
491
+ let msg = try_potential_decodeerror ! ( msgs:: Ping :: read ( & mut reader ) ) ;
492
492
if msg. ponglen < 65532 {
493
493
let resp = msgs:: Pong { byteslen : msg. ponglen } ;
494
494
encode_and_send_msg ! ( resp, 19 ) ;
495
495
}
496
496
} ,
497
497
19 => {
498
- try_potential_decodeerror ! ( msgs:: Pong :: decode ( & msg_data [ 2 .. ] ) ) ;
498
+ try_potential_decodeerror ! ( msgs:: Pong :: read ( & mut reader ) ) ;
499
499
} ,
500
500
501
501
// Channel control:
502
502
32 => {
503
- let msg = try_potential_decodeerror ! ( msgs:: OpenChannel :: decode ( & msg_data [ 2 .. ] ) ) ;
503
+ let msg = try_potential_decodeerror ! ( msgs:: OpenChannel :: read ( & mut reader ) ) ;
504
504
let resp = try_potential_handleerror ! ( self . message_handler. chan_handler. handle_open_channel( & peer. their_node_id. unwrap( ) , & msg) ) ;
505
505
encode_and_send_msg ! ( resp, 33 ) ;
506
506
} ,
507
507
33 => {
508
- let msg = try_potential_decodeerror ! ( msgs:: AcceptChannel :: decode ( & msg_data [ 2 .. ] ) ) ;
508
+ let msg = try_potential_decodeerror ! ( msgs:: AcceptChannel :: read ( & mut reader ) ) ;
509
509
try_potential_handleerror ! ( self . message_handler. chan_handler. handle_accept_channel( & peer. their_node_id. unwrap( ) , & msg) ) ;
510
510
} ,
511
511
512
512
34 => {
513
- let msg = try_potential_decodeerror ! ( msgs:: FundingCreated :: decode ( & msg_data [ 2 .. ] ) ) ;
513
+ let msg = try_potential_decodeerror ! ( msgs:: FundingCreated :: read ( & mut reader ) ) ;
514
514
let resp = try_potential_handleerror ! ( self . message_handler. chan_handler. handle_funding_created( & peer. their_node_id. unwrap( ) , & msg) ) ;
515
515
encode_and_send_msg ! ( resp, 35 ) ;
516
516
} ,
517
517
35 => {
518
- let msg = try_potential_decodeerror ! ( msgs:: FundingSigned :: decode ( & msg_data [ 2 .. ] ) ) ;
518
+ let msg = try_potential_decodeerror ! ( msgs:: FundingSigned :: read ( & mut reader ) ) ;
519
519
try_potential_handleerror ! ( self . message_handler. chan_handler. handle_funding_signed( & peer. their_node_id. unwrap( ) , & msg) ) ;
520
520
} ,
521
521
36 => {
522
- let msg = try_potential_decodeerror ! ( msgs:: FundingLocked :: decode ( & msg_data [ 2 .. ] ) ) ;
522
+ let msg = try_potential_decodeerror ! ( msgs:: FundingLocked :: read ( & mut reader ) ) ;
523
523
let resp_option = try_potential_handleerror ! ( self . message_handler. chan_handler. handle_funding_locked( & peer. their_node_id. unwrap( ) , & msg) ) ;
524
524
match resp_option {
525
525
Some ( resp) => encode_and_send_msg ! ( resp, 259 ) ,
@@ -528,7 +528,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
528
528
} ,
529
529
530
530
38 => {
531
- let msg = try_potential_decodeerror ! ( msgs:: Shutdown :: decode ( & msg_data [ 2 .. ] ) ) ;
531
+ let msg = try_potential_decodeerror ! ( msgs:: Shutdown :: read ( & mut reader ) ) ;
532
532
let resp_options = try_potential_handleerror ! ( self . message_handler. chan_handler. handle_shutdown( & peer. their_node_id. unwrap( ) , & msg) ) ;
533
533
if let Some ( resp) = resp_options. 0 {
534
534
encode_and_send_msg ! ( resp, 38 ) ;
@@ -538,43 +538,43 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
538
538
}
539
539
} ,
540
540
39 => {
541
- let msg = try_potential_decodeerror ! ( msgs:: ClosingSigned :: decode ( & msg_data [ 2 .. ] ) ) ;
541
+ let msg = try_potential_decodeerror ! ( msgs:: ClosingSigned :: read ( & mut reader ) ) ;
542
542
let resp_option = try_potential_handleerror ! ( self . message_handler. chan_handler. handle_closing_signed( & peer. their_node_id. unwrap( ) , & msg) ) ;
543
543
if let Some ( resp) = resp_option {
544
544
encode_and_send_msg ! ( resp, 39 ) ;
545
545
}
546
546
} ,
547
547
548
548
128 => {
549
- let msg = try_potential_decodeerror ! ( msgs:: UpdateAddHTLC :: decode ( & msg_data [ 2 .. ] ) ) ;
549
+ let msg = try_potential_decodeerror ! ( msgs:: UpdateAddHTLC :: read ( & mut reader ) ) ;
550
550
try_potential_handleerror ! ( self . message_handler. chan_handler. handle_update_add_htlc( & peer. their_node_id. unwrap( ) , & msg) ) ;
551
551
} ,
552
552
130 => {
553
- let msg = try_potential_decodeerror ! ( msgs:: UpdateFulfillHTLC :: decode ( & msg_data [ 2 .. ] ) ) ;
553
+ let msg = try_potential_decodeerror ! ( msgs:: UpdateFulfillHTLC :: read ( & mut reader ) ) ;
554
554
try_potential_handleerror ! ( self . message_handler. chan_handler. handle_update_fulfill_htlc( & peer. their_node_id. unwrap( ) , & msg) ) ;
555
555
} ,
556
556
131 => {
557
- let msg = try_potential_decodeerror ! ( msgs:: UpdateFailHTLC :: decode ( & msg_data [ 2 .. ] ) ) ;
557
+ let msg = try_potential_decodeerror ! ( msgs:: UpdateFailHTLC :: read ( & mut reader ) ) ;
558
558
let chan_update = try_potential_handleerror ! ( self . message_handler. chan_handler. handle_update_fail_htlc( & peer. their_node_id. unwrap( ) , & msg) ) ;
559
559
if let Some ( update) = chan_update {
560
560
self . message_handler . route_handler . handle_htlc_fail_channel_update ( & update) ;
561
561
}
562
562
} ,
563
563
135 => {
564
- let msg = try_potential_decodeerror ! ( msgs:: UpdateFailMalformedHTLC :: decode ( & msg_data [ 2 .. ] ) ) ;
564
+ let msg = try_potential_decodeerror ! ( msgs:: UpdateFailMalformedHTLC :: read ( & mut reader ) ) ;
565
565
try_potential_handleerror ! ( self . message_handler. chan_handler. handle_update_fail_malformed_htlc( & peer. their_node_id. unwrap( ) , & msg) ) ;
566
566
} ,
567
567
568
568
132 => {
569
- let msg = try_potential_decodeerror ! ( msgs:: CommitmentSigned :: decode ( & msg_data [ 2 .. ] ) ) ;
569
+ let msg = try_potential_decodeerror ! ( msgs:: CommitmentSigned :: read ( & mut reader ) ) ;
570
570
let resps = try_potential_handleerror ! ( self . message_handler. chan_handler. handle_commitment_signed( & peer. their_node_id. unwrap( ) , & msg) ) ;
571
571
encode_and_send_msg ! ( resps. 0 , 133 ) ;
572
572
if let Some ( resp) = resps. 1 {
573
573
encode_and_send_msg ! ( resp, 132 ) ;
574
574
}
575
575
} ,
576
576
133 => {
577
- let msg = try_potential_decodeerror ! ( msgs:: RevokeAndACK :: decode ( & msg_data [ 2 .. ] ) ) ;
577
+ let msg = try_potential_decodeerror ! ( msgs:: RevokeAndACK :: read ( & mut reader ) ) ;
578
578
let resp_option = try_potential_handleerror ! ( self . message_handler. chan_handler. handle_revoke_and_ack( & peer. their_node_id. unwrap( ) , & msg) ) ;
579
579
match resp_option {
580
580
Some ( resps) => {
@@ -593,34 +593,34 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
593
593
}
594
594
} ,
595
595
134 => {
596
- let msg = try_potential_decodeerror ! ( msgs:: UpdateFee :: decode ( & msg_data [ 2 .. ] ) ) ;
596
+ let msg = try_potential_decodeerror ! ( msgs:: UpdateFee :: read ( & mut reader ) ) ;
597
597
try_potential_handleerror ! ( self . message_handler. chan_handler. handle_update_fee( & peer. their_node_id. unwrap( ) , & msg) ) ;
598
598
} ,
599
599
136 => { } , // TODO: channel_reestablish
600
600
601
601
// Routing control:
602
602
259 => {
603
- let msg = try_potential_decodeerror ! ( msgs:: AnnouncementSignatures :: decode ( & msg_data [ 2 .. ] ) ) ;
603
+ let msg = try_potential_decodeerror ! ( msgs:: AnnouncementSignatures :: read ( & mut reader ) ) ;
604
604
try_potential_handleerror ! ( self . message_handler. chan_handler. handle_announcement_signatures( & peer. their_node_id. unwrap( ) , & msg) ) ;
605
605
} ,
606
606
256 => {
607
- let msg = try_potential_decodeerror ! ( msgs:: ChannelAnnouncement :: decode ( & msg_data [ 2 .. ] ) ) ;
607
+ let msg = try_potential_decodeerror ! ( msgs:: ChannelAnnouncement :: read ( & mut reader ) ) ;
608
608
let should_forward = try_potential_handleerror ! ( self . message_handler. route_handler. handle_channel_announcement( & msg) ) ;
609
609
610
610
if should_forward {
611
611
// TODO: forward msg along to all our other peers!
612
612
}
613
613
} ,
614
614
257 => {
615
- let msg = try_potential_decodeerror ! ( msgs:: NodeAnnouncement :: decode ( & msg_data [ 2 .. ] ) ) ;
615
+ let msg = try_potential_decodeerror ! ( msgs:: NodeAnnouncement :: read ( & mut reader ) ) ;
616
616
let should_forward = try_potential_handleerror ! ( self . message_handler. route_handler. handle_node_announcement( & msg) ) ;
617
617
618
618
if should_forward {
619
619
// TODO: forward msg along to all our other peers!
620
620
}
621
621
} ,
622
622
258 => {
623
- let msg = try_potential_decodeerror ! ( msgs:: ChannelUpdate :: decode ( & msg_data [ 2 .. ] ) ) ;
623
+ let msg = try_potential_decodeerror ! ( msgs:: ChannelUpdate :: read ( & mut reader ) ) ;
624
624
let should_forward = try_potential_handleerror ! ( self . message_handler. route_handler. handle_channel_update( & msg) ) ;
625
625
626
626
if should_forward {
0 commit comments