@@ -1381,11 +1381,21 @@ impl ChannelManager {
13811381 match source {
13821382 HTLCSource :: OutboundRoute { .. } => {
13831383 mem:: drop ( channel_state) ;
1384-
1385- let mut pending_events = self . pending_events . lock ( ) . unwrap ( ) ;
1386- pending_events. push ( events:: Event :: PaymentFailed {
1387- payment_hash : payment_hash. clone ( )
1388- } ) ;
1384+ if let & HTLCFailReason :: ErrorPacket { ref err } = & onion_error {
1385+ let ( channel_update, payment_retryable) = self . process_onion_failure ( & source, err. data . clone ( ) ) ;
1386+ let mut pending_events = self . pending_events . lock ( ) . unwrap ( ) ;
1387+ if let Some ( channel_update) = channel_update {
1388+ pending_events. push ( events:: Event :: RouteUpdate {
1389+ update : channel_update,
1390+ } ) ;
1391+ }
1392+ pending_events. push ( events:: Event :: PaymentFailed {
1393+ payment_hash : payment_hash. clone ( ) ,
1394+ rejected_by_dest : !payment_retryable,
1395+ } ) ;
1396+ } else {
1397+ panic ! ( "should have onion error packet here" ) ;
1398+ }
13891399 } ,
13901400 HTLCSource :: PreviousHopData ( HTLCPreviousHopData { short_channel_id, htlc_id, incoming_packet_shared_secret } ) => {
13911401 let err_packet = match onion_error {
@@ -1996,9 +2006,9 @@ impl ChannelManager {
19962006 } else { ( ( None , true ) ) }
19972007 }
19982008
1999- fn internal_update_fail_htlc ( & self , their_node_id : & PublicKey , msg : & msgs:: UpdateFailHTLC ) -> Result < Option < msgs :: HTLCFailChannelUpdate > , MsgHandleErrInternal > {
2009+ fn internal_update_fail_htlc ( & self , their_node_id : & PublicKey , msg : & msgs:: UpdateFailHTLC ) -> Result < ( ) , MsgHandleErrInternal > {
20002010 let mut channel_state = self . channel_state . lock ( ) . unwrap ( ) ;
2001- let htlc_source = match channel_state. by_id . get_mut ( & msg. channel_id ) {
2011+ match channel_state. by_id . get_mut ( & msg. channel_id ) {
20022012 Some ( chan) => {
20032013 if chan. get_their_node_id ( ) != * their_node_id {
20042014 //TODO: here and below MsgHandleErrInternal, #153 case
@@ -2009,17 +2019,7 @@ impl ChannelManager {
20092019 } ,
20102020 None => return Err ( MsgHandleErrInternal :: send_err_msg_no_close ( "Failed to find corresponding channel" , msg. channel_id ) )
20112021 } ?;
2012-
2013- // we are the origin node and update route information
2014- // also determine if the payment is retryable
2015- if let & HTLCSource :: OutboundRoute { .. } = htlc_source {
2016- let ( channel_update, _payment_retry) = self . process_onion_failure ( htlc_source, msg. reason . data . clone ( ) ) ;
2017- Ok ( channel_update)
2018- // TODO: include pyament_retry info in PaymentFailed event that will be
2019- // fired when receiving revoke_and_ack
2020- } else {
2021- Ok ( None )
2022- }
2022+ Ok ( ( ) )
20232023 }
20242024
20252025 fn internal_update_fail_malformed_htlc ( & self , their_node_id : & PublicKey , msg : & msgs:: UpdateFailMalformedHTLC ) -> Result < ( ) , MsgHandleErrInternal > {
@@ -2424,7 +2424,7 @@ impl ChannelMessageHandler for ChannelManager {
24242424 handle_error ! ( self , self . internal_update_fulfill_htlc( their_node_id, msg) , their_node_id)
24252425 }
24262426
2427- fn handle_update_fail_htlc ( & self , their_node_id : & PublicKey , msg : & msgs:: UpdateFailHTLC ) -> Result < Option < msgs :: HTLCFailChannelUpdate > , HandleError > {
2427+ fn handle_update_fail_htlc ( & self , their_node_id : & PublicKey , msg : & msgs:: UpdateFailHTLC ) -> Result < ( ) , HandleError > {
24282428 handle_error ! ( self , self . internal_update_fail_htlc( their_node_id, msg) , their_node_id)
24292429 }
24302430
@@ -3296,8 +3296,9 @@ mod tests {
32963296 let events = origin_node. node . get_and_clear_pending_events ( ) ;
32973297 assert_eq ! ( events. len( ) , 1 ) ;
32983298 match events[ 0 ] {
3299- Event :: PaymentFailed { payment_hash } => {
3299+ Event :: PaymentFailed { payment_hash, rejected_by_dest } => {
33003300 assert_eq ! ( payment_hash, our_payment_hash) ;
3301+ assert ! ( rejected_by_dest) ;
33013302 } ,
33023303 _ => panic ! ( "Unexpected event" ) ,
33033304 }
@@ -5064,8 +5065,9 @@ mod tests {
50645065 _ => panic ! ( "Unexpected event" ) ,
50655066 }
50665067 match events[ 1 ] {
5067- Event :: PaymentFailed { payment_hash } => {
5068+ Event :: PaymentFailed { payment_hash, rejected_by_dest } => {
50685069 assert_eq ! ( payment_hash, payment_hash_5) ;
5070+ assert ! ( rejected_by_dest) ;
50695071 } ,
50705072 _ => panic ! ( "Unexpected event" ) ,
50715073 }
0 commit comments