77use crate :: events:: { Event , EventQueue } ;
88use crate :: lsps0:: event:: LSPS0ClientEvent ;
99use crate :: lsps0:: msgs:: {
10- LSPS0Message , LSPS0Request , LSPS0Response , LSPSMessage , ListProtocolsRequest ,
11- ListProtocolsResponse , ProtocolMessageHandler , ResponseError ,
10+ LSPS0Message , LSPS0Request , LSPS0Response , ListProtocolsRequest , ListProtocolsResponse ,
11+ ProtocolMessageHandler , ResponseError ,
1212} ;
13- use crate :: prelude :: Vec ;
14- use crate :: sync:: { Arc , Mutex } ;
13+ use crate :: message_queue :: MessageQueue ;
14+ use crate :: sync:: Arc ;
1515use crate :: utils;
1616
1717use lightning:: ln:: msgs:: { ErrorAction , LightningError } ;
@@ -23,23 +23,24 @@ use bitcoin::secp256k1::PublicKey;
2323use core:: ops:: Deref ;
2424
2525/// A message handler capable of sending and handling LSPS0 messages.
26- pub struct LSPS0ClientHandler < ES : Deref >
26+ pub struct LSPS0ClientHandler < ES : Deref , MQ : Deref >
2727where
2828 ES :: Target : EntropySource ,
29+ MQ :: Target : MessageQueue ,
2930{
3031 entropy_source : ES ,
31- pending_messages : Arc < Mutex < Vec < ( PublicKey , LSPSMessage ) > > > ,
32+ pending_messages : MQ ,
3233 pending_events : Arc < EventQueue > ,
3334}
3435
35- impl < ES : Deref > LSPS0ClientHandler < ES >
36+ impl < ES : Deref , MQ : Deref > LSPS0ClientHandler < ES , MQ >
3637where
3738 ES :: Target : EntropySource ,
39+ MQ :: Target : MessageQueue ,
3840{
3941 /// Returns a new instance of [`LSPS0ClientHandler`].
4042 pub ( crate ) fn new (
41- entropy_source : ES , pending_messages : Arc < Mutex < Vec < ( PublicKey , LSPSMessage ) > > > ,
42- pending_events : Arc < EventQueue > ,
43+ entropy_source : ES , pending_messages : MQ , pending_events : Arc < EventQueue > ,
4344 ) -> Self {
4445 Self { entropy_source, pending_messages, pending_events }
4546 }
@@ -49,17 +50,13 @@ where
4950 /// Please refer to the [LSPS0
5051 /// specifcation](https://github.com/BitcoinAndLightningLayerSpecs/lsp/tree/main/LSPS0#lsps-specification-support-query)
5152 /// for more information.
52- pub fn list_protocols ( & self , counterparty_node_id : PublicKey ) {
53+ pub fn list_protocols ( & self , counterparty_node_id : & PublicKey ) {
5354 let msg = LSPS0Message :: Request (
5455 utils:: generate_request_id ( & self . entropy_source ) ,
5556 LSPS0Request :: ListProtocols ( ListProtocolsRequest { } ) ,
5657 ) ;
5758
58- self . enqueue_message ( counterparty_node_id, msg) ;
59- }
60-
61- fn enqueue_message ( & self , counterparty_node_id : PublicKey , message : LSPS0Message ) {
62- self . pending_messages . lock ( ) . unwrap ( ) . push ( ( counterparty_node_id, message. into ( ) ) ) ;
59+ self . pending_messages . enqueue ( counterparty_node_id, msg. into ( ) ) ;
6360 }
6461
6562 fn handle_response (
8885 }
8986}
9087
91- impl < ES : Deref > ProtocolMessageHandler for LSPS0ClientHandler < ES >
88+ impl < ES : Deref , MQ : Deref > ProtocolMessageHandler for LSPS0ClientHandler < ES , MQ >
9289where
9390 ES :: Target : EntropySource ,
91+ MQ :: Target : MessageQueue ,
9492{
9593 type ProtocolMessage = LSPS0Message ;
9694 const PROTOCOL_NUMBER : Option < u16 > = None ;
@@ -119,20 +117,14 @@ mod tests {
119117 use alloc:: string:: ToString ;
120118 use alloc:: sync:: Arc ;
121119
122- use crate :: lsps0:: msgs:: RequestId ;
120+ use crate :: lsps0:: msgs:: { LSPSMessage , RequestId } ;
121+ use crate :: tests:: utils:: { TestEntropy , TestMessageQueue } ;
123122
124123 use super :: * ;
125124
126- struct TestEntropy { }
127- impl EntropySource for TestEntropy {
128- fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
129- [ 0 ; 32 ]
130- }
131- }
132-
133125 #[ test]
134126 fn test_list_protocols ( ) {
135- let pending_messages = Arc :: new ( Mutex :: new ( vec ! [ ] ) ) ;
127+ let pending_messages = Arc :: new ( TestMessageQueue :: new ( ) ) ;
136128 let entropy_source = Arc :: new ( TestEntropy { } ) ;
137129 let event_queue = Arc :: new ( EventQueue :: new ( ) ) ;
138130
@@ -147,8 +139,8 @@ mod tests {
147139 )
148140 . unwrap ( ) ;
149141
150- lsps0_handler. list_protocols ( counterparty_node_id) ;
151- let pending_messages = pending_messages. lock ( ) . unwrap ( ) ;
142+ lsps0_handler. list_protocols ( & counterparty_node_id) ;
143+ let pending_messages = pending_messages. get_and_clear_pending_msgs ( ) ;
152144
153145 assert_eq ! ( pending_messages. len( ) , 1 ) ;
154146
0 commit comments