@@ -465,44 +465,6 @@ impl<Descriptor: SocketDescriptor, CM: Deref> PeerManager<Descriptor, CM> where
465
465
peer. pending_read_buffer . extend_from_slice ( & data) ;
466
466
while peer. pending_read_buffer . len ( ) > 0 {
467
467
468
- macro_rules! encode_and_send_msg {
469
- ( $msg: expr) => {
470
- {
471
- log_trace!( self , "Encoding and sending message of type {} to {}" , $msg. type_id( ) , log_pubkey!( peer. their_node_id. unwrap( ) ) ) ;
472
- if let PeerState :: Connected ( ref mut conduit) = peer. encryptor {
473
- peer. pending_outbound_buffer. push_back( conduit. encrypt( & encode_msg!( & $msg) [ ..] ) ) ;
474
- }
475
- peers. peers_needing_send. insert( peer_descriptor. clone( ) ) ;
476
- }
477
- }
478
- }
479
-
480
- macro_rules! try_potential_handleerror {
481
- ( $thing: expr) => {
482
- match $thing {
483
- Ok ( x) => x,
484
- Err ( e) => {
485
- match e. action {
486
- msgs:: ErrorAction :: DisconnectPeer { msg: _ } => {
487
- //TODO: Try to push msg
488
- log_trace!( self , "Got Err handling message, disconnecting peer because {}" , e. err) ;
489
- return Err ( PeerHandleError { no_connection_possible: false } ) ;
490
- } ,
491
- msgs:: ErrorAction :: IgnoreError => {
492
- log_trace!( self , "Got Err handling message, ignoring because {}" , e. err) ;
493
- continue ;
494
- } ,
495
- msgs:: ErrorAction :: SendErrorMessage { msg } => {
496
- log_trace!( self , "Got Err handling message, sending Error message because {}" , e. err) ;
497
- encode_and_send_msg!( msg) ;
498
- continue ;
499
- } ,
500
- }
501
- }
502
- } ;
503
- }
504
- }
505
-
506
468
macro_rules! insert_node_id {
507
469
( ) => {
508
470
match peers. node_id_to_descriptor. entry( peer. their_node_id. unwrap( ) ) {
@@ -519,17 +481,62 @@ impl<Descriptor: SocketDescriptor, CM: Deref> PeerManager<Descriptor, CM> where
519
481
}
520
482
}
521
483
484
+ let mut conduit_option = None ;
485
+
522
486
if let & mut PeerState :: Handshake ( ref mut handshake) = & mut peer. encryptor {
523
487
let ( response, conduit, remote_pubkey) = handshake. process_act ( & peer. pending_read_buffer , None ) . unwrap ( ) ;
524
488
peer. pending_read_buffer . drain ( ..) ; // we read it all
525
489
526
490
peer. pending_outbound_buffer . push_back ( response) ;
527
491
if let Some ( conduit) = conduit {
528
- peer . encryptor = PeerState :: Connected ( conduit) ;
492
+ conduit_option = Some ( conduit) ;
529
493
}
530
494
}
531
495
496
+ if let Some ( conduit) = conduit_option {
497
+ // Rust 1.22 does not allow assignment in a borrowed context, even if mutable
498
+ peer. encryptor = PeerState :: Connected ( conduit) ;
499
+ }
500
+
532
501
if let & mut PeerState :: Connected ( ref mut conduit) = & mut peer. encryptor {
502
+
503
+ macro_rules! encode_and_send_msg {
504
+ ( $msg: expr) => {
505
+ {
506
+ log_trace!( self , "Encoding and sending message of type {} to {}" , $msg. type_id( ) , log_pubkey!( peer. their_node_id. unwrap( ) ) ) ;
507
+ // we are in a context where conduit is known
508
+ peer. pending_outbound_buffer. push_back( conduit. encrypt( & encode_msg!( & $msg) [ ..] ) ) ;
509
+ peers. peers_needing_send. insert( peer_descriptor. clone( ) ) ;
510
+ }
511
+ }
512
+ }
513
+
514
+ macro_rules! try_potential_handleerror {
515
+ ( $thing: expr) => {
516
+ match $thing {
517
+ Ok ( x) => x,
518
+ Err ( e) => {
519
+ match e. action {
520
+ msgs:: ErrorAction :: DisconnectPeer { msg: _ } => {
521
+ //TODO: Try to push msg
522
+ log_trace!( self , "Got Err handling message, disconnecting peer because {}" , e. err) ;
523
+ return Err ( PeerHandleError { no_connection_possible: false } ) ;
524
+ } ,
525
+ msgs:: ErrorAction :: IgnoreError => {
526
+ log_trace!( self , "Got Err handling message, ignoring because {}" , e. err) ;
527
+ continue ;
528
+ } ,
529
+ msgs:: ErrorAction :: SendErrorMessage { msg } => {
530
+ log_trace!( self , "Got Err handling message, sending Error message because {}" , e. err) ;
531
+ encode_and_send_msg!( msg) ;
532
+ continue ;
533
+ } ,
534
+ }
535
+ }
536
+ } ;
537
+ }
538
+ }
539
+
533
540
let mut messages = conduit. decrypt_message_stream ( Some ( & peer. pending_read_buffer ) ) ;
534
541
535
542
if messages. len ( ) != 1 {
0 commit comments