@@ -15,6 +15,7 @@ use lightning::util::errors::APIError;
15
15
use lightning:: util:: logger:: { Level , Logger } ;
16
16
17
17
use crate :: channel_request:: msgs:: { CreateOrderRequest , Message , Order , Request } ;
18
+ use crate :: channel_request:: utils:: check_if_valid;
18
19
use crate :: transport:: message_handler:: ProtocolMessageHandler ;
19
20
use crate :: transport:: msgs:: { LSPSMessage , RequestId } ;
20
21
use crate :: utils;
@@ -64,12 +65,12 @@ struct CRChannel {
64
65
pub struct CRManager <
65
66
ES : Deref ,
66
67
Descriptor : SocketDescriptor + Send + Sync + ' static ,
67
- L : Deref + Send + Sync + ' static ,
68
- RM : Deref + Send + Sync + ' static ,
69
- CM : Deref + Send + Sync + ' static ,
70
- OM : Deref + Send + Sync + ' static ,
71
- CMH : Deref + Send + Sync + ' static ,
72
- NS : Deref + Send + Sync + ' static ,
68
+ L : Deref ,
69
+ RM : Deref ,
70
+ CM : Deref ,
71
+ OM : Deref ,
72
+ CMH : Deref ,
73
+ NS : Deref ,
73
74
> where
74
75
ES :: Target : EntropySource ,
75
76
L :: Target : Logger ,
@@ -157,12 +158,16 @@ where
157
158
}
158
159
159
160
fn handle_get_info_request (
160
- & self , request_id : RequestId , counterparty_node_id : PublicKey , request : GetInfoRequest
161
- ) -> Result < ( ) , LightningError > {
161
+ & self , request_id : RequestId , counterparty_node_id : PublicKey , request : GetInfoRequest ,
162
+ ) -> Result < ( ) , LightningError > {
162
163
self . enqueue_response (
163
164
counterparty_node_id,
164
165
request_id,
165
- Response :: GetInfo ( GetInfoResponse { supported_versions : vec ! [ 1 ] , website : request. website , options : request. options } ) ,
166
+ Response :: GetInfo ( GetInfoResponse {
167
+ supported_versions : vec ! [ 1 ] ,
168
+ website : request. website ,
169
+ options : request. options ,
170
+ } ) ,
166
171
) ;
167
172
Ok ( ( ) )
168
173
}
@@ -238,17 +243,19 @@ where
238
243
Some ( peer_state_mutex) => {
239
244
// TODO- For optimization; one variable is set to immuatable reference for pattern matching,
240
245
// other variable is mutable to change it.
241
- let state = & * peer_state_mutex. lock ( ) . unwrap ( ) ;
246
+ let state = & * peer_state_mutex. lock ( ) . unwrap ( ) ;
242
247
let peer_state = & mut * peer_state_mutex. lock ( ) . unwrap ( ) ;
243
248
244
-
245
249
match state {
246
- CRState :: InfoRequested { request_id, counterparty_node_id } => {
250
+ CRState :: InfoRequested { request_id, counterparty_node_id } => {
247
251
// Should the request_id change for a new request message?
248
252
// or should it be passed to different state of enum
249
253
if request_id == & req_id {
250
254
// TODO: optimization- remove the clone
251
- * peer_state = CRState :: OrderRequested { request_id : request_id. clone ( ) , order : order. clone ( ) } ;
255
+ * peer_state = CRState :: OrderRequested {
256
+ request_id : request_id. clone ( ) ,
257
+ order : order. clone ( ) ,
258
+ } ;
252
259
253
260
{
254
261
let mut pending_messages = self . pending_messages . lock ( ) . unwrap ( ) ;
@@ -292,50 +299,53 @@ where
292
299
// Again by client in create order response.
293
300
// To implement the error codes.
294
301
fn is_valid_order(
295
- request_id: RequestId ,order: &Order, options: &OptionsSupported,
302
+ &self, request_id: RequestId ,order: &Order, options: &OptionsSupported, counterparty_node_id: &PublicKey
296
303
) -> Result<(), LightningError> {
297
- let per_peer_state = self.per_peer_state .read().unwrap();
304
+ let mut per_peer_state = self.per_new_peer_state .read().unwrap();
298
305
match per_peer_state.get(&counterparty_node_id) {
299
306
Some(peer_state_mutex) => {
300
- let peer_state = peer_state_mutex.lock().unwrap();
307
+ let mut peer_state = peer_state_mutex.lock().unwrap();
301
308
302
- if let Some(channel) = peer_state.channels_by_id.get_mut(&channel_id) {
303
- if channel.state == ChannelState::OrderRequested {
309
+ match &*peer_state {
310
+ CRState::InfoRequested { request_id, counterparty_node_id } => {
304
311
check_if_valid(
305
- order.lsp_balance_sat.into(),
306
- options.max_initial_lsp_balance_sat.into(),
307
- options.min_initial_lsp_balance_sat.into(),
312
+ order.lsp_balance_sat.into(),
313
+ options.max_initial_lsp_balance_sat.into(),
314
+ options.min_initial_lsp_balance_sat.into(),
308
315
);
309
316
310
317
check_if_valid(
311
- order.client_balance_sat.into(),
312
- options.max_initial_client_balance_sat.into(),
313
- options.min_initial_client_balance_sat.into(),
318
+ order.client_balance_sat.into(),
319
+ options.max_initial_client_balance_sat.into(),
320
+ options.min_initial_client_balance_sat.into(),
314
321
);
315
322
316
323
check_if_valid(
317
- order.channel_expiry_blocks.into(),
318
- options.max_channel_expiry_blocks.into(),
319
- 0,
324
+ order.channel_expiry_blocks.into(),
325
+ options.max_channel_expiry_blocks.into(),
326
+ 0,
320
327
);
321
- } else if channel.state == ChannelState::PendingPayment {
322
- }
323
- }
328
+ }
329
+ &CRState::OrderRequested { request_id, order } => {
330
+
331
+ }
332
+ }
333
+ }
334
+ None => {
335
+
324
336
}
325
- None => {}
326
337
}
327
- // Check the condition for supported version
338
+ // Check the condition for supported version
328
339
329
- // Other measures to implement
330
- // The client MUST check if option_support_large_channel is enabled
331
- // before they order a channel larger than 16,777,216 satoshi.
340
+ // Other measures to implement
341
+ // The client MUST check if option_support_large_channel is enabled
342
+ // before they order a channel larger than 16,777,216 satoshi.
332
343
333
- // Token validity to check.
344
+ // Token validity to check.
334
345
335
346
Ok(())
336
347
}
337
348
*/
338
-
339
349
// Enqueue the event of CreateChannel as LSP would need to calculate the fees.
340
350
fn handle_create_order_request (
341
351
& self , request_id : RequestId , counterparty_node_id : & PublicKey , request : CreateOrderRequest ,
@@ -412,10 +422,9 @@ where
412
422
let per_peer_state = self . per_new_peer_state . read ( ) . unwrap ( ) ;
413
423
match per_peer_state. get ( counterparty_node_id) {
414
424
Some ( peer_state_mutex) => {
415
- let state = & * peer_state_mutex. lock ( ) . unwrap ( ) ;
425
+ let state = & * peer_state_mutex. lock ( ) . unwrap ( ) ;
416
426
let peer_state = & mut * peer_state_mutex. lock ( ) . unwrap ( ) ;
417
427
418
-
419
428
match state {
420
429
CRState :: OrderRequested { request_id, order } => {
421
430
if request_id == & requestid {
@@ -507,7 +516,7 @@ where
507
516
} else {
508
517
// err, high fees
509
518
// abort and remove the CRState associated with this requestid
510
-
519
+
511
520
// Call an Event to abort the flow
512
521
}
513
522
}
@@ -536,21 +545,28 @@ where
536
545
let per_peer_state = self . per_new_peer_state . read ( ) . unwrap ( ) ;
537
546
match per_peer_state. get ( & counterparty_node_id) {
538
547
Some ( peer_state_mutex) => {
539
- let state = & * peer_state_mutex. lock ( ) . unwrap ( ) ;
548
+ let state = & * peer_state_mutex. lock ( ) . unwrap ( ) ;
540
549
let peer_state = & mut * peer_state_mutex. lock ( ) . unwrap ( ) ;
541
550
542
-
543
551
match state {
544
552
CRState :: PendingSelection { request_id, order_id, order } => {
545
553
if request_id == & requestid {
546
554
let res = response. clone ( ) ;
547
-
555
+
548
556
* peer_state = CRState :: PendingPayment {
549
557
request_id : request_id. clone ( ) ,
550
558
order_id : response. order_id ,
551
559
payment : response. payment ,
552
560
order : response. order ,
553
561
} ;
562
+
563
+ self . enqueue_event ( Event :: LSPS1 ( super :: event:: Event :: PayforChannel {
564
+ request_id : request_id. clone ( ) ,
565
+ counterparty_node_id : * counterparty_node_id,
566
+ order : response. order ,
567
+ payment : response. payment ,
568
+ channel : response. channel ,
569
+ } ) ) ;
554
570
}
555
571
}
556
572
_ => {
@@ -614,15 +630,18 @@ where
614
630
let per_peer_state = self . per_new_peer_state . read ( ) . unwrap ( ) ;
615
631
match per_peer_state. get ( & counterparty_node_id) {
616
632
Some ( peer_state_mutex) => {
617
- let state = & * peer_state_mutex. lock ( ) . unwrap ( ) ;
633
+ let state = & * peer_state_mutex. lock ( ) . unwrap ( ) ;
618
634
let peer_state = & mut * peer_state_mutex. lock ( ) . unwrap ( ) ;
619
635
620
636
match state {
621
637
CRState :: PendingPayment { request_id, order_id, order, payment } => {
622
638
if order_id == & orderid {
623
639
let request_id = self . generate_request_id ( ) ;
624
- * peer_state =
625
- CRState :: PendingConfirmation { request_id : request_id. clone ( ) , order_id : order_id. clone ( ) , invoice : payment. clone ( ) } ;
640
+ * peer_state = CRState :: PendingConfirmation {
641
+ request_id : request_id. clone ( ) ,
642
+ order_id : order_id. clone ( ) ,
643
+ invoice : payment. clone ( ) ,
644
+ } ;
626
645
627
646
{
628
647
let mut pending_messages = self . pending_messages . lock ( ) . unwrap ( ) ;
@@ -664,7 +683,7 @@ where
664
683
fn handle_get_order_request (
665
684
& self , request_id : RequestId , counterparty_node_id : & PublicKey , request : GetOrderRequest ,
666
685
) -> Result < ( ) , APIError > {
667
- let mut pending_orders = self . pending_orders . read ( ) . unwrap ( ) ;
686
+ let mut pending_orders = self . pending_orders . read ( ) . unwrap ( ) ;
668
687
669
688
match pending_orders. get ( & request_id) {
670
689
Some ( orderid) => {
@@ -688,30 +707,26 @@ where
688
707
) -> Result < ( ) , APIError > {
689
708
let mut pending_orders = self . pending_orders . read ( ) . unwrap ( ) ;
690
709
691
- match pending_orders. get ( & request_id) {
692
- Some ( order_id) => {
693
- self . enqueue_response (
694
- counterparty_node_id,
695
- request_id,
696
- Response :: GetOrder ( GetOrderResponse { response : params. order_id } ) ,
697
- )
698
- }
699
- None => {
700
-
701
- }
710
+ match pending_orders. get ( & request_id) {
711
+ Some ( order_id) => self . enqueue_response (
712
+ counterparty_node_id,
713
+ request_id,
714
+ Response :: GetOrder ( GetOrderResponse { response : params. order_id } ) ,
715
+ ) ,
716
+ None => { }
702
717
}
703
718
Ok ( ( ) )
704
719
}
705
720
706
- // Just to show the client about the status, no event or change in state
707
- fn handle_get_order_response ( & self , request_id : RequestId , counterparty_node_id : & PublicKey , response : GetOrderResponse )
708
- -> Result < ( ) , LightningError > {
709
-
721
+ /* // Just to show the client about the status, no event or change in state
722
+ fn handle_get_order_response(
723
+ &self, request_id: RequestId, counterparty_node_id: &PublicKey, response: GetOrderResponse,
724
+ ) -> Result<(), LightningError> {
710
725
// Check for different conditions
711
726
// If payment is confirmed or refund is initiated
712
727
Ok(())
713
- }
714
- /*
728
+ } */
729
+ /*
715
730
fn channel_ready() {
716
731
todo!()
717
732
}
@@ -759,7 +774,6 @@ where
759
774
}
760
775
}
761
776
762
-
763
777
impl <
764
778
ES : Deref ,
765
779
Descriptor : SocketDescriptor + Send + Sync + ' static ,
@@ -818,7 +832,6 @@ where
818
832
}
819
833
}
820
834
821
-
822
835
// Order of functions called
823
836
// new
824
837
// set peer
0 commit comments