Skip to content

Commit d7b33fc

Browse files
committed
Support ignoring some errors, deserialize empty flags types
1 parent 3cf262c commit d7b33fc

File tree

3 files changed

+17
-11
lines changed

3 files changed

+17
-11
lines changed

src/ln/msgs.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,9 @@ pub enum ErrorAction {
357357
msg: UpdateFailHTLC
358358
},
359359
/// The peer took some action which made us think they were useless. Disconnect them.
360-
DisconnectPeer {},
360+
DisconnectPeer,
361+
/// The peer did something harmless that we weren't able to process, just log and ignore
362+
IgnoreError,
361363
}
362364

363365
pub struct HandleError { //TODO: rename me
@@ -506,7 +508,7 @@ macro_rules! secp_signature {
506508

507509
impl MsgDecodable for LocalFeatures {
508510
fn decode(v: &[u8]) -> Result<Self, DecodeError> {
509-
if v.len() < 3 { return Err(DecodeError::WrongLength); }
511+
if v.len() < 2 { return Err(DecodeError::WrongLength); }
510512
let len = byte_utils::slice_to_be16(&v[0..2]) as usize;
511513
if v.len() < len + 2 { return Err(DecodeError::WrongLength); }
512514
let mut flags = Vec::with_capacity(len);
@@ -528,7 +530,7 @@ impl MsgEncodable for LocalFeatures {
528530

529531
impl MsgDecodable for GlobalFeatures {
530532
fn decode(v: &[u8]) -> Result<Self, DecodeError> {
531-
if v.len() < 3 { return Err(DecodeError::WrongLength); }
533+
if v.len() < 2 { return Err(DecodeError::WrongLength); }
532534
let len = byte_utils::slice_to_be16(&v[0..2]) as usize;
533535
if v.len() < len + 2 { return Err(DecodeError::WrongLength); }
534536
let mut flags = Vec::with_capacity(len);

src/ln/peer_handler.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,16 +272,19 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
272272
match $thing {
273273
Ok(x) => x,
274274
Err(e) => {
275-
// TODO: Log e.err
275+
println!("Got error handling message: {}!", e.err);
276276
if let Some(action) = e.msg {
277277
match action {
278278
msgs::ErrorAction::UpdateFailHTLC { msg } => {
279279
encode_and_send_msg!(msg, 131);
280280
continue;
281281
},
282-
msgs::ErrorAction::DisconnectPeer {} => {
282+
msgs::ErrorAction::DisconnectPeer => {
283283
return Err(PeerHandleError{ no_connection_possible: false });
284284
},
285+
msgs::ErrorAction::IgnoreError => {
286+
continue;
287+
},
285288
}
286289
} else {
287290
return Err(PeerHandleError{ no_connection_possible: false });
@@ -296,6 +299,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
296299
match $thing {
297300
Ok(x) => x,
298301
Err(_e) => {
302+
println!("Error decoding message");
299303
//TODO: Handle e?
300304
return Err(PeerHandleError{ no_connection_possible: false });
301305
}

src/ln/router.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use secp256k1::{Secp256k1,Message};
33

44
use bitcoin::util::hash::Sha256dHash;
55

6-
use ln::msgs::{HandleError,RoutingMessageHandler,MsgEncodable,NetAddress,GlobalFeatures};
6+
use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,MsgEncodable,NetAddress,GlobalFeatures};
77
use ln::msgs;
88

99
use std::cmp;
@@ -122,10 +122,10 @@ impl RoutingMessageHandler for Router {
122122

123123
let mut network = self.network_map.write().unwrap();
124124
match network.nodes.get_mut(&msg.contents.node_id) {
125-
None => Err(HandleError{err: "No existing channels for node_announcement", msg: None}),
125+
None => Err(HandleError{err: "No existing channels for node_announcement", msg: Some(ErrorAction::IgnoreError)}),
126126
Some(node) => {
127127
if node.last_update >= msg.contents.timestamp {
128-
return Err(HandleError{err: "Update older than last processed update", msg: None});
128+
return Err(HandleError{err: "Update older than last processed update", msg: Some(ErrorAction::IgnoreError)});
129129
}
130130

131131
node.features = msg.contents.features.clone();
@@ -159,7 +159,7 @@ impl RoutingMessageHandler for Router {
159159
//TODO: because asking the blockchain if short_channel_id is valid is only optional
160160
//in the blockchain API, we need to handle it smartly here, though its unclear
161161
//exactly how...
162-
return Err(HandleError{err: "Already have knowledge of channel", msg: None})
162+
return Err(HandleError{err: "Already have knowledge of channel", msg: Some(ErrorAction::IgnoreError)})
163163
},
164164
Entry::Vacant(entry) => {
165165
entry.insert(ChannelInfo {
@@ -233,12 +233,12 @@ impl RoutingMessageHandler for Router {
233233
let chan_was_enabled;
234234

235235
match network.channels.get_mut(&NetworkMap::get_key(msg.contents.short_channel_id, msg.contents.chain_hash)) {
236-
None => return Err(HandleError{err: "Couldn't find channel for update", msg: None}),
236+
None => return Err(HandleError{err: "Couldn't find channel for update", msg: Some(ErrorAction::IgnoreError)}),
237237
Some(channel) => {
238238
macro_rules! maybe_update_channel_info {
239239
( $target: expr) => {
240240
if $target.last_update >= msg.contents.timestamp {
241-
return Err(HandleError{err: "Update older than last processed update", msg: None});
241+
return Err(HandleError{err: "Update older than last processed update", msg: Some(ErrorAction::IgnoreError)});
242242
}
243243
chan_was_enabled = $target.enabled;
244244
$target.last_update = msg.contents.timestamp;

0 commit comments

Comments
 (0)