Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit fa53ad4

Browse files
committed
Add missing GetInfoResponse handling
1 parent 0c46dc8 commit fa53ad4

File tree

3 files changed

+63
-6
lines changed

3 files changed

+63
-6
lines changed

src/lsps0/msgs.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,9 @@ impl Serialize for LSPSMessage {
274274
LSPS1Response::GetInfo(result) => {
275275
jsonrpc_object.serialize_field(JSONRPC_RESULT_FIELD_KEY, result)?
276276
}
277+
LSPS1Response::GetInfoError(error) => {
278+
jsonrpc_object.serialize_field(JSONRPC_ERROR_FIELD_KEY, error)?
279+
}
277280
LSPS1Response::CreateOrder(result) => {
278281
jsonrpc_object.serialize_field(JSONRPC_RESULT_FIELD_KEY, result)?
279282
}
@@ -455,6 +458,24 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
455458
}
456459
}
457460
#[cfg(lsps1)]
461+
LSPSMethod::LSPS1GetInfo => {
462+
if let Some(error) = error {
463+
Ok(LSPSMessage::LSPS1(LSPS1Message::Response(
464+
id,
465+
LSPS1Response::GetInfoError(error),
466+
)))
467+
} else if let Some(result) = result {
468+
let response =
469+
serde_json::from_value(result).map_err(de::Error::custom)?;
470+
Ok(LSPSMessage::LSPS1(LSPS1Message::Response(
471+
id,
472+
LSPS1Response::GetInfo(response),
473+
)))
474+
} else {
475+
Err(de::Error::custom("Received invalid JSON-RPC object: one of method, result, or error required"))
476+
}
477+
}
478+
#[cfg(lsps1)]
458479
LSPSMethod::LSPS1CreateOrder => {
459480
if let Some(error) = error {
460481
Ok(LSPSMessage::LSPS1(LSPS1Message::Response(
@@ -524,10 +545,6 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
524545
Err(de::Error::custom("Received invalid JSON-RPC object: one of method, result, or error required"))
525546
}
526547
}
527-
_ => Err(de::Error::custom(format!(
528-
"Received response for an unknown request method: {}",
529-
method
530-
))),
531548
},
532549
None => Err(de::Error::custom(format!(
533550
"Received response for unknown request id: {}",

src/lsps1/client.rs

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,41 @@ where
318318
Ok(())
319319
}
320320

321+
fn handle_get_info_error(
322+
&self, request_id: RequestId, counterparty_node_id: &PublicKey, error: ResponseError,
323+
) -> Result<(), LightningError> {
324+
let outer_state_lock = self.per_peer_state.read().unwrap();
325+
match outer_state_lock.get(&counterparty_node_id) {
326+
Some(inner_state_lock) => {
327+
let mut peer_state_lock = inner_state_lock.lock().unwrap();
328+
329+
let user_channel_id =
330+
peer_state_lock.request_to_cid.remove(&request_id).ok_or(LightningError {
331+
err: format!(
332+
"Received GetInfo error for an unknown request: {:?}",
333+
request_id
334+
),
335+
action: ErrorAction::IgnoreAndLog(Level::Debug),
336+
})?;
337+
338+
let inbound_channel = peer_state_lock
339+
.inbound_channels_by_id
340+
.get_mut(&user_channel_id)
341+
.ok_or(LightningError {
342+
err: format!(
343+
"Received GetInfo error for an unknown channel: {:?}",
344+
user_channel_id
345+
),
346+
action: ErrorAction::IgnoreAndLog(Level::Info),
347+
})?;
348+
Ok(())
349+
}
350+
None => {
351+
return Err(LightningError { err: format!("Received error response for a create order request from an unknown counterparty ({:?})",counterparty_node_id), action: ErrorAction::IgnoreAndLog(Level::Info)});
352+
}
353+
}
354+
}
355+
321356
/// Places an order with the connected LSP given its `counterparty_node_id`.
322357
/// The client agrees to paying channel fees according to the provided parameters.
323358
///
@@ -621,11 +656,14 @@ where
621656
LSPS1Response::GetInfo(params) => {
622657
self.handle_get_info_response(request_id, counterparty_node_id, params)
623658
}
659+
LSPS1Response::GetInfoError(error) => {
660+
self.handle_get_info_error(request_id, counterparty_node_id, error)
661+
}
624662
LSPS1Response::CreateOrder(params) => {
625663
self.handle_create_order_response(request_id, counterparty_node_id, params)
626664
}
627-
LSPS1Response::CreateOrderError(params) => {
628-
self.handle_create_order_error(request_id, counterparty_node_id, params)
665+
LSPS1Response::CreateOrderError(error) => {
666+
self.handle_create_order_error(request_id, counterparty_node_id, error)
629667
}
630668
LSPS1Response::GetOrder(params) => {
631669
self.handle_get_order_response(request_id, counterparty_node_id, params)

src/lsps1/msgs.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,8 @@ pub enum LSPS1Request {
254254
pub enum LSPS1Response {
255255
/// A successful response to a [`GetInfoRequest`].
256256
GetInfo(GetInfoResponse),
257+
/// An error response to a [`GetInfoRequest`].
258+
GetInfoError(ResponseError),
257259
/// A successful response to a [`CreateOrderRequest`].
258260
CreateOrder(CreateOrderResponse),
259261
/// An error response to a [`CreateOrderRequest`].

0 commit comments

Comments
 (0)