Skip to content

Commit 1b3249a

Browse files
committed
Handle sending and receiving warning messages
1 parent f676f55 commit 1b3249a

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

lightning/src/ln/msgs.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,16 @@ pub enum ErrorAction {
731731
/// The peer did something incorrect. Tell them.
732732
SendErrorMessage {
733733
/// The message to send.
734-
msg: ErrorMessage
734+
msg: ErrorMessage,
735+
},
736+
/// The peer did something incorrect. Tell them without closing any channels.
737+
SendWarningMessage {
738+
/// The message to send.
739+
msg: WarningMessage,
740+
/// The peer may have done something harmless that we weren't able to meaningfully process,
741+
/// though we should still tell them about it.
742+
/// If this event is logged, log it at the given level.
743+
log_level: logger::Level,
735744
},
736745
}
737746

lightning/src/ln/peer_handler.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,11 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
821821
self.enqueue_message(peer, &msg);
822822
continue;
823823
},
824+
msgs::ErrorAction::SendWarningMessage { msg, log_level } => {
825+
log_given_level!(self.logger, log_level, "Error handling message{}; sending warning message with: {}", OptionalFromDebugger(&peer.their_node_id), e.err);
826+
self.enqueue_message(peer, &msg);
827+
continue;
828+
},
824829
}
825830
}
826831
}
@@ -1022,6 +1027,21 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
10221027
return Err(PeerHandleError{ no_connection_possible: true }.into());
10231028
}
10241029
},
1030+
wire::Message::Warning(msg) => {
1031+
let mut data_is_printable = true;
1032+
for b in msg.data.bytes() {
1033+
if b < 32 || b > 126 {
1034+
data_is_printable = false;
1035+
break;
1036+
}
1037+
}
1038+
1039+
if data_is_printable {
1040+
log_debug!(self.logger, "Got warning message from {}: {}", log_pubkey!(peer.their_node_id.unwrap()), msg.data);
1041+
} else {
1042+
log_debug!(self.logger, "Got warning message from {} with non-ASCII error message", log_pubkey!(peer.their_node_id.unwrap()));
1043+
}
1044+
},
10251045

10261046
wire::Message::Ping(msg) => {
10271047
if msg.ponglen < 65532 {
@@ -1419,6 +1439,12 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
14191439
msg.data);
14201440
self.enqueue_message(get_peer_for_forwarding!(node_id), msg);
14211441
},
1442+
msgs::ErrorAction::SendWarningMessage { ref msg, ref log_level } => {
1443+
log_given_level!(self.logger, *log_level, "Handling SendWarningMessage HandleError event in peer_handler for node {} with message {}",
1444+
log_pubkey!(node_id),
1445+
msg.data);
1446+
self.enqueue_message(get_peer_for_forwarding!(node_id), msg);
1447+
},
14221448
}
14231449
},
14241450
MessageSendEvent::SendChannelRangeQuery { ref node_id, ref msg } => {

lightning/src/ln/wire.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ pub trait CustomMessageReader {
3535
pub(crate) enum Message<T> where T: core::fmt::Debug + Type {
3636
Init(msgs::Init),
3737
Error(msgs::ErrorMessage),
38+
Warning(msgs::WarningMessage),
3839
Ping(msgs::Ping),
3940
Pong(msgs::Pong),
4041
OpenChannel(msgs::OpenChannel),
@@ -74,6 +75,7 @@ impl<T> Message<T> where T: core::fmt::Debug + Type {
7475
match self {
7576
&Message::Init(ref msg) => msg.type_id(),
7677
&Message::Error(ref msg) => msg.type_id(),
78+
&Message::Warning(ref msg) => msg.type_id(),
7779
&Message::Ping(ref msg) => msg.type_id(),
7880
&Message::Pong(ref msg) => msg.type_id(),
7981
&Message::OpenChannel(ref msg) => msg.type_id(),
@@ -133,6 +135,9 @@ where
133135
msgs::ErrorMessage::TYPE => {
134136
Ok(Message::Error(Readable::read(buffer)?))
135137
},
138+
msgs::WarningMessage::TYPE => {
139+
Ok(Message::Warning(Readable::read(buffer)?))
140+
},
136141
msgs::Ping::TYPE => {
137142
Ok(Message::Ping(Readable::read(buffer)?))
138143
},
@@ -264,6 +269,10 @@ impl Encode for msgs::ErrorMessage {
264269
const TYPE: u16 = 17;
265270
}
266271

272+
impl Encode for msgs::WarningMessage {
273+
const TYPE: u16 = 1;
274+
}
275+
267276
impl Encode for msgs::Ping {
268277
const TYPE: u16 = 18;
269278
}

0 commit comments

Comments
 (0)