1111
1212use crate :: events:: { Event , EventQueue } ;
1313use crate :: lsps0:: ser:: {
14- ProtocolMessageHandler , RequestId , ResponseError , LSPS0_CLIENT_REJECTED_ERROR_CODE ,
14+ LSPSMessage , ProtocolMessageHandler , RequestId , ResponseError , LSPS0_CLIENT_REJECTED_ERROR_CODE ,
1515} ;
1616use crate :: lsps2:: event:: LSPS2ServiceEvent ;
1717use crate :: lsps2:: payment_queue:: { InterceptedHTLC , PaymentQueue } ;
1818use crate :: lsps2:: utils:: { compute_opening_fee, is_valid_opening_fee_params} ;
1919use crate :: message_queue:: MessageQueue ;
2020use crate :: prelude:: { new_hash_map, HashMap , String , ToString , Vec } ;
21- use crate :: sync:: { Arc , Mutex , RwLock } ;
21+ use crate :: sync:: { Arc , Mutex , MutexGuard , RwLock } ;
2222
2323use lightning:: events:: HTLCDestination ;
2424use lightning:: ln:: channelmanager:: { AChannelManager , InterceptId } ;
@@ -506,9 +506,9 @@ where
506506
507507 match outer_state_lock. get ( counterparty_node_id) {
508508 Some ( inner_state_lock) => {
509- let mut peer_state = inner_state_lock. lock ( ) . unwrap ( ) ;
509+ let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
510510
511- match peer_state . pending_requests . remove ( & request_id) {
511+ match self . remove_pending_request ( & mut peer_state_lock , & request_id) {
512512 Some ( LSPS2Request :: GetInfo ( _) ) => {
513513 let response = LSPS2Response :: GetInfoError ( ResponseError {
514514 code : LSPS2_GET_INFO_REQUEST_UNRECOGNIZED_OR_STALE_TOKEN_ERROR_CODE ,
@@ -562,9 +562,9 @@ where
562562
563563 match outer_state_lock. get ( counterparty_node_id) {
564564 Some ( inner_state_lock) => {
565- let mut peer_state = inner_state_lock. lock ( ) . unwrap ( ) ;
565+ let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
566566
567- match peer_state . pending_requests . remove ( & request_id) {
567+ match self . remove_pending_request ( & mut peer_state_lock , & request_id) {
568568 Some ( LSPS2Request :: GetInfo ( _) ) => {
569569 let response = LSPS2Response :: GetInfo ( GetInfoResponse {
570570 opening_fee_params_menu : opening_fee_params_menu
@@ -621,9 +621,9 @@ where
621621
622622 match outer_state_lock. get ( counterparty_node_id) {
623623 Some ( inner_state_lock) => {
624- let mut peer_state = inner_state_lock. lock ( ) . unwrap ( ) ;
624+ let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
625625
626- match peer_state . pending_requests . remove ( & request_id) {
626+ match self . remove_pending_request ( & mut peer_state_lock , & request_id) {
627627 Some ( LSPS2Request :: Buy ( buy_request) ) => {
628628 {
629629 let mut peer_by_intercept_scid =
@@ -638,10 +638,10 @@ where
638638 user_channel_id,
639639 ) ;
640640
641- peer_state
641+ peer_state_lock
642642 . intercept_scid_by_user_channel_id
643643 . insert ( user_channel_id, intercept_scid) ;
644- peer_state
644+ peer_state_lock
645645 . insert_outbound_channel ( intercept_scid, outbound_jit_channel) ;
646646
647647 let response = LSPS2Response :: Buy ( BuyResponse {
@@ -992,35 +992,24 @@ where
992992 . entry ( * counterparty_node_id)
993993 . or_insert ( Mutex :: new ( PeerState :: new ( ) ) ) ;
994994 let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
995- if peer_state_lock. pending_requests . len ( ) < MAX_PENDING_REQUESTS_PER_PEER {
996- peer_state_lock
997- . pending_requests
998- . insert ( request_id. clone ( ) , LSPS2Request :: GetInfo ( params. clone ( ) ) ) ;
999-
1000- let event = Event :: LSPS2Service ( LSPS2ServiceEvent :: GetInfo {
1001- request_id,
1002- counterparty_node_id : * counterparty_node_id,
1003- token : params. token ,
1004- } ) ;
1005- self . pending_events . enqueue ( event) ;
1006- ( Ok ( ( ) ) , None )
1007- } else {
1008- let response = LSPS2Response :: GetInfoError ( ResponseError {
1009- code : LSPS0_CLIENT_REJECTED_ERROR_CODE ,
1010- message : "Reached maximum number of pending requests. Please try again later."
1011- . to_string ( ) ,
1012- data : None ,
1013- } ) ;
1014- let msg = Some ( LSPS2Message :: Response ( request_id, response) . into ( ) ) ;
1015-
1016- let err = format ! (
1017- "Peer {} reached maximum number of pending requests: {}" ,
1018- counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
1019- ) ;
995+ let request = LSPS2Request :: GetInfo ( params. clone ( ) ) ;
996+ match self . insert_pending_request (
997+ & mut peer_state_lock,
998+ request_id. clone ( ) ,
999+ * counterparty_node_id,
1000+ request,
1001+ ) {
1002+ ( Ok ( ( ) ) , msg) => {
1003+ let event = Event :: LSPS2Service ( LSPS2ServiceEvent :: GetInfo {
1004+ request_id,
1005+ counterparty_node_id : * counterparty_node_id,
1006+ token : params. token ,
1007+ } ) ;
1008+ self . pending_events . enqueue ( event) ;
10201009
1021- let result =
1022- Err ( LightningError { err , action : ErrorAction :: IgnoreAndLog ( Level :: Debug ) } ) ;
1023- ( result , msg)
1010+ ( Ok ( ( ) ) , msg )
1011+ } ,
1012+ ( e , msg) => ( e , msg ) ,
10241013 }
10251014 } ;
10261015
@@ -1123,37 +1112,25 @@ where
11231112 . or_insert ( Mutex :: new ( PeerState :: new ( ) ) ) ;
11241113 let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
11251114
1126- if peer_state_lock. pending_requests . len ( ) < MAX_PENDING_REQUESTS_PER_PEER {
1127- peer_state_lock
1128- . pending_requests
1129- . insert ( request_id. clone ( ) , LSPS2Request :: Buy ( params. clone ( ) ) ) ;
1130-
1131- let event = Event :: LSPS2Service ( LSPS2ServiceEvent :: BuyRequest {
1132- request_id,
1133- counterparty_node_id : * counterparty_node_id,
1134- opening_fee_params : params. opening_fee_params ,
1135- payment_size_msat : params. payment_size_msat ,
1136- } ) ;
1137- self . pending_events . enqueue ( event) ;
1138-
1139- ( Ok ( ( ) ) , None )
1140- } else {
1141- let response = LSPS2Response :: BuyError ( ResponseError {
1142- code : LSPS0_CLIENT_REJECTED_ERROR_CODE ,
1143- message : "Reached maximum number of pending requests. Please try again later."
1144- . to_string ( ) ,
1145- data : None ,
1146- } ) ;
1147- let msg = Some ( LSPS2Message :: Response ( request_id, response) . into ( ) ) ;
1148-
1149- let err = format ! (
1150- "Peer {} reached maximum number of pending requests: {}" ,
1151- counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
1152- ) ;
1153- let result =
1154- Err ( LightningError { err, action : ErrorAction :: IgnoreAndLog ( Level :: Debug ) } ) ;
1115+ let request = LSPS2Request :: Buy ( params. clone ( ) ) ;
1116+ match self . insert_pending_request (
1117+ & mut peer_state_lock,
1118+ request_id. clone ( ) ,
1119+ * counterparty_node_id,
1120+ request,
1121+ ) {
1122+ ( Ok ( ( ) ) , msg) => {
1123+ let event = Event :: LSPS2Service ( LSPS2ServiceEvent :: BuyRequest {
1124+ request_id,
1125+ counterparty_node_id : * counterparty_node_id,
1126+ opening_fee_params : params. opening_fee_params ,
1127+ payment_size_msat : params. payment_size_msat ,
1128+ } ) ;
1129+ self . pending_events . enqueue ( event) ;
11551130
1156- ( result, msg)
1131+ ( Ok ( ( ) ) , msg)
1132+ } ,
1133+ ( e, msg) => ( e, msg) ,
11571134 }
11581135 } ;
11591136
@@ -1163,6 +1140,39 @@ where
11631140
11641141 result
11651142 }
1143+
1144+ fn insert_pending_request < ' a > (
1145+ & self , peer_state_lock : & mut MutexGuard < ' a , PeerState > , request_id : RequestId ,
1146+ counterparty_node_id : PublicKey , request : LSPS2Request ,
1147+ ) -> ( Result < ( ) , LightningError > , Option < LSPSMessage > ) {
1148+ if peer_state_lock. pending_requests . len ( ) < MAX_PENDING_REQUESTS_PER_PEER {
1149+ peer_state_lock. pending_requests . insert ( request_id, request) ;
1150+ ( Ok ( ( ) ) , None )
1151+ } else {
1152+ let response = LSPS2Response :: BuyError ( ResponseError {
1153+ code : LSPS0_CLIENT_REJECTED_ERROR_CODE ,
1154+ message : "Reached maximum number of pending requests. Please try again later."
1155+ . to_string ( ) ,
1156+ data : None ,
1157+ } ) ;
1158+ let msg = Some ( LSPS2Message :: Response ( request_id, response) . into ( ) ) ;
1159+
1160+ let err = format ! (
1161+ "Peer {} reached maximum number of pending requests: {}" ,
1162+ counterparty_node_id, MAX_PENDING_REQUESTS_PER_PEER
1163+ ) ;
1164+ let result =
1165+ Err ( LightningError { err, action : ErrorAction :: IgnoreAndLog ( Level :: Debug ) } ) ;
1166+
1167+ ( result, msg)
1168+ }
1169+ }
1170+
1171+ fn remove_pending_request < ' a > (
1172+ & self , peer_state_lock : & mut MutexGuard < ' a , PeerState > , request_id : & RequestId ,
1173+ ) -> Option < LSPS2Request > {
1174+ peer_state_lock. pending_requests . remove ( request_id)
1175+ }
11661176}
11671177
11681178impl < CM : Deref + Clone > ProtocolMessageHandler for LSPS2ServiceHandler < CM >
0 commit comments