11
11
12
12
use crate :: events:: { Event , EventQueue } ;
13
13
use crate :: lsps0:: ser:: {
14
- ProtocolMessageHandler , RequestId , ResponseError , LSPS0_CLIENT_REJECTED_ERROR_CODE ,
14
+ LSPSMessage , ProtocolMessageHandler , RequestId , ResponseError , LSPS0_CLIENT_REJECTED_ERROR_CODE ,
15
15
} ;
16
16
use crate :: lsps2:: event:: LSPS2ServiceEvent ;
17
17
use crate :: lsps2:: payment_queue:: { InterceptedHTLC , PaymentQueue } ;
18
18
use crate :: lsps2:: utils:: { compute_opening_fee, is_valid_opening_fee_params} ;
19
19
use crate :: message_queue:: MessageQueue ;
20
20
use crate :: prelude:: { new_hash_map, HashMap , String , ToString , Vec } ;
21
- use crate :: sync:: { Arc , Mutex , RwLock } ;
21
+ use crate :: sync:: { Arc , Mutex , MutexGuard , RwLock } ;
22
22
23
23
use lightning:: events:: HTLCDestination ;
24
24
use lightning:: ln:: channelmanager:: { AChannelManager , InterceptId } ;
@@ -506,9 +506,9 @@ where
506
506
507
507
match outer_state_lock. get ( counterparty_node_id) {
508
508
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 ( ) ;
510
510
511
- match peer_state . pending_requests . remove ( & request_id) {
511
+ match self . remove_pending_request ( & mut peer_state_lock , & request_id) {
512
512
Some ( LSPS2Request :: GetInfo ( _) ) => {
513
513
let response = LSPS2Response :: GetInfoError ( ResponseError {
514
514
code : LSPS2_GET_INFO_REQUEST_UNRECOGNIZED_OR_STALE_TOKEN_ERROR_CODE ,
@@ -562,9 +562,9 @@ where
562
562
563
563
match outer_state_lock. get ( counterparty_node_id) {
564
564
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 ( ) ;
566
566
567
- match peer_state . pending_requests . remove ( & request_id) {
567
+ match self . remove_pending_request ( & mut peer_state_lock , & request_id) {
568
568
Some ( LSPS2Request :: GetInfo ( _) ) => {
569
569
let response = LSPS2Response :: GetInfo ( GetInfoResponse {
570
570
opening_fee_params_menu : opening_fee_params_menu
@@ -621,9 +621,9 @@ where
621
621
622
622
match outer_state_lock. get ( counterparty_node_id) {
623
623
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 ( ) ;
625
625
626
- match peer_state . pending_requests . remove ( & request_id) {
626
+ match self . remove_pending_request ( & mut peer_state_lock , & request_id) {
627
627
Some ( LSPS2Request :: Buy ( buy_request) ) => {
628
628
{
629
629
let mut peer_by_intercept_scid =
@@ -638,10 +638,10 @@ where
638
638
user_channel_id,
639
639
) ;
640
640
641
- peer_state
641
+ peer_state_lock
642
642
. intercept_scid_by_user_channel_id
643
643
. insert ( user_channel_id, intercept_scid) ;
644
- peer_state
644
+ peer_state_lock
645
645
. insert_outbound_channel ( intercept_scid, outbound_jit_channel) ;
646
646
647
647
let response = LSPS2Response :: Buy ( BuyResponse {
@@ -992,35 +992,24 @@ where
992
992
. entry ( * counterparty_node_id)
993
993
. or_insert ( Mutex :: new ( PeerState :: new ( ) ) ) ;
994
994
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) ;
1020
1009
1021
- let result =
1022
- Err ( LightningError { err , action : ErrorAction :: IgnoreAndLog ( Level :: Debug ) } ) ;
1023
- ( result , msg)
1010
+ ( Ok ( ( ) ) , msg )
1011
+ } ,
1012
+ ( e , msg) => ( e , msg ) ,
1024
1013
}
1025
1014
} ;
1026
1015
@@ -1123,37 +1112,25 @@ where
1123
1112
. or_insert ( Mutex :: new ( PeerState :: new ( ) ) ) ;
1124
1113
let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
1125
1114
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) ;
1155
1130
1156
- ( result, msg)
1131
+ ( Ok ( ( ) ) , msg)
1132
+ } ,
1133
+ ( e, msg) => ( e, msg) ,
1157
1134
}
1158
1135
} ;
1159
1136
@@ -1163,6 +1140,39 @@ where
1163
1140
1164
1141
result
1165
1142
}
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
+ }
1166
1176
}
1167
1177
1168
1178
impl < CM : Deref + Clone > ProtocolMessageHandler for LSPS2ServiceHandler < CM >
0 commit comments