@@ -19,6 +19,7 @@ use super::msgs::{
1919 LSPS1GetOrderRequest , LSPS1Message , LSPS1Options , LSPS1OrderId , LSPS1OrderParams ,
2020 LSPS1OrderState , LSPS1PaymentInfo , LSPS1Request , LSPS1Response ,
2121 LSPS1_CREATE_ORDER_REQUEST_ORDER_MISMATCH_ERROR_CODE ,
22+ LSPS1_GET_ORDER_REQUEST_ORDER_NOT_FOUND_ERROR_CODE ,
2223} ;
2324use super :: peer_state:: PeerState ;
2425use crate :: message_queue:: MessageQueue ;
@@ -245,78 +246,75 @@ where
245246 & self , request_id : LSPSRequestId , counterparty_node_id : & PublicKey ,
246247 params : LSPS1GetOrderRequest ,
247248 ) -> Result < ( ) , LightningError > {
248- let event_queue_notifier = self . pending_events . notifier ( ) ;
249+ let mut message_queue_notifier = self . pending_messages . notifier ( ) ;
249250 let outer_state_lock = self . per_peer_state . read ( ) . unwrap ( ) ;
250251 match outer_state_lock. get ( counterparty_node_id) {
251252 Some ( inner_state_lock) => {
252- let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
253-
254- let request = LSPS1Request :: GetOrder ( params. clone ( ) ) ;
255- peer_state_lock. register_request ( request_id. clone ( ) , request) . map_err ( |e| {
253+ let peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
254+
255+ let order = peer_state_lock. get_order ( & params. order_id ) . map_err ( |e| {
256+ let response = LSPS1Response :: GetOrderError ( LSPSResponseError {
257+ code : LSPS1_GET_ORDER_REQUEST_ORDER_NOT_FOUND_ERROR_CODE ,
258+ message : format ! ( "Order with the requested order_id has not been found." ) ,
259+ data : None ,
260+ } ) ;
261+ let msg = LSPS1Message :: Response ( request_id. clone ( ) , response) . into ( ) ;
262+ message_queue_notifier. enqueue ( counterparty_node_id, msg) ;
256263 let err = format ! ( "Failed to handle request due to: {}" , e) ;
257264 let action = ErrorAction :: IgnoreAndLog ( Level :: Error ) ;
258265 LightningError { err, action }
259266 } ) ?;
260267
261- event_queue_notifier. enqueue ( LSPS1ServiceEvent :: CheckPaymentConfirmation {
262- request_id,
263- counterparty_node_id : * counterparty_node_id,
268+ let response = LSPS1Response :: GetOrder ( LSPS1CreateOrderResponse {
264269 order_id : params. order_id ,
270+ order : order. order_params . clone ( ) ,
271+ order_state : order. order_state . clone ( ) ,
272+ created_at : order. created_at . clone ( ) ,
273+ payment : order. payment_details . clone ( ) ,
274+ channel : order. channel_details . clone ( ) ,
265275 } ) ;
276+ let msg = LSPS1Message :: Response ( request_id, response) . into ( ) ;
277+ message_queue_notifier. enqueue ( & counterparty_node_id, msg) ;
278+ Ok ( ( ) )
266279 } ,
267280 None => {
268- return Err ( LightningError {
269- err : format ! ( "Received error response for a create order request from an unknown counterparty ({:?})" , counterparty_node_id) ,
270- action : ErrorAction :: IgnoreAndLog ( Level :: Info ) ,
281+ let response = LSPS1Response :: GetOrderError ( LSPSResponseError {
282+ code : LSPS1_GET_ORDER_REQUEST_ORDER_NOT_FOUND_ERROR_CODE ,
283+ message : format ! ( "Order with the requested order_id has not been found." ) ,
284+ data : None ,
271285 } ) ;
286+ let msg = LSPS1Message :: Response ( request_id, response) . into ( ) ;
287+ message_queue_notifier. enqueue ( counterparty_node_id, msg) ;
288+ Err ( LightningError {
289+ err : format ! (
290+ "Received get_order request from an unknown counterparty ({:?})" ,
291+ counterparty_node_id
292+ ) ,
293+ action : ErrorAction :: IgnoreAndLog ( Level :: Info ) ,
294+ } )
272295 } ,
273296 }
274-
275- Ok ( ( ) )
276297 }
277298
278299 /// Used by LSP to give details to client regarding the status of channel opening.
279- /// Called to respond to client's `GetOrder` request.
280300 ///
281301 /// The LSP continously polls for checking payment confirmation on-chain or Lightning
282302 /// and then responds to client request.
283- ///
284- /// Should be called in response to receiving a [`LSPS1ServiceEvent::CheckPaymentConfirmation`] event.
285- ///
286- /// [`LSPS1ServiceEvent::CheckPaymentConfirmation`]: crate::lsps1::event::LSPS1ServiceEvent::CheckPaymentConfirmation
287303 pub fn update_order_status (
288- & self , request_id : LSPSRequestId , counterparty_node_id : PublicKey , order_id : LSPS1OrderId ,
304+ & self , counterparty_node_id : PublicKey , order_id : LSPS1OrderId ,
289305 order_state : LSPS1OrderState , channel_details : Option < LSPS1ChannelInfo > ,
290306 ) -> Result < ( ) , APIError > {
291- let mut message_queue_notifier = self . pending_messages . notifier ( ) ;
292-
293307 let outer_state_lock = self . per_peer_state . read ( ) . unwrap ( ) ;
294308
295309 match outer_state_lock. get ( & counterparty_node_id) {
296310 Some ( inner_state_lock) => {
297311 let mut peer_state_lock = inner_state_lock. lock ( ) . unwrap ( ) ;
298- let order = peer_state_lock
299- . update_order ( & order_id, order_state, channel_details)
300- . map_err ( |e| APIError :: APIMisuseError {
301- err : format ! ( "Failed to update order: {:?}" , e) ,
302- } ) ?;
303-
304- peer_state_lock. remove_request ( & request_id) . map_err ( |e| {
305- debug_assert ! ( false , "Failed to send response due to: {}" , e) ;
306- let err = format ! ( "Failed to send response due to: {}" , e) ;
307- APIError :: APIMisuseError { err }
308- } ) ?;
312+ peer_state_lock. update_order ( & order_id, order_state, channel_details) . map_err (
313+ |e| APIError :: APIMisuseError {
314+ err : format ! ( "Failed to update order: {:?}" , e) ,
315+ } ,
316+ ) ?;
309317
310- let response = LSPS1Response :: GetOrder ( LSPS1CreateOrderResponse {
311- order_id,
312- order : order. order_params . clone ( ) ,
313- order_state : order. order_state . clone ( ) ,
314- created_at : order. created_at . clone ( ) ,
315- payment : order. payment_details . clone ( ) ,
316- channel : order. channel_details . clone ( ) ,
317- } ) ;
318- let msg = LSPS1Message :: Response ( request_id, response) . into ( ) ;
319- message_queue_notifier. enqueue ( & counterparty_node_id, msg) ;
320318 Ok ( ( ) )
321319 } ,
322320 None => Err ( APIError :: APIMisuseError {
0 commit comments