Skip to content

Commit

Permalink
Remove wire::MessageType in favor of u16
Browse files Browse the repository at this point in the history
With custom messages, wire::Type was introduced. wire::MessageType is a
bit redundant, so use u16 instead and move is_even to wire::Message.
  • Loading branch information
jkczyz authored and Tibo-lg committed Aug 19, 2021
1 parent b6f743f commit 6fbbc74
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 36 deletions.
11 changes: 5 additions & 6 deletions lightning/src/ln/peer_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ use ln::channelmanager::{SimpleArcChannelManager, SimpleRefChannelManager};
use util::ser::{VecWriter, Writeable, Writer};
use ln::peer_channel_encryptor::{PeerChannelEncryptor,NextNoiseStep};
use ln::wire;
use ln::wire::MessageType;
use util::byte_utils;
use util::events::{MessageSendEvent, MessageSendEventsProvider};
use util::logger::Logger;
Expand Down Expand Up @@ -86,7 +85,7 @@ pub struct IgnoringCustomMessageHandler{}
type DummyCustomType = ();

impl wire::Type for DummyCustomType {
fn type_id(&self) -> MessageType {
fn type_id(&self) -> u16 {
// We should never call this for `DummyCustomType`
unreachable!();
}
Expand Down Expand Up @@ -1086,13 +1085,13 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
},

// Unknown messages:
wire::Message::Unknown(msg_type) if msg_type.is_even() => {
log_debug!(self.logger, "Received unknown even message of type {}, disconnecting peer!", msg_type);
wire::Message::Unknown(type_id) if message.is_even() => {
log_debug!(self.logger, "Received unknown even message of type {}, disconnecting peer!", type_id);
// Fail the channel if message is an even, unknown type as per BOLT #1.
return Err(PeerHandleError{ no_connection_possible: true }.into());
},
wire::Message::Unknown(msg_type) => {
log_trace!(self.logger, "Received unknown odd message of type {}, ignoring", msg_type);
wire::Message::Unknown(type_id) => {
log_trace!(self.logger, "Received unknown odd message of type {}, ignoring", type_id);
},
wire::Message::Custom(custom) => {
self.custom_message_handler.handle_custom_message(custom)?;
Expand Down
47 changes: 17 additions & 30 deletions lightning/src/ln/wire.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,18 +68,13 @@ pub(crate) enum Message<T> where T: core::fmt::Debug + Type {
ReplyChannelRange(msgs::ReplyChannelRange),
GossipTimestampFilter(msgs::GossipTimestampFilter),
/// A message that could not be decoded because its type is unknown.
Unknown(MessageType),
Unknown(u16),
Custom(T),
}

/// A number identifying a message to determine how it is encoded on the wire.
#[derive(Clone, Copy, Debug)]
pub struct MessageType(u16);

impl<T> Message<T> where T: core::fmt::Debug + Type {
#[allow(dead_code)] // This method is only used in tests
/// Returns the type that was used to decode the message payload.
pub fn type_id(&self) -> MessageType {
pub fn type_id(&self) -> u16 {
match self {
&Message::Init(ref msg) => msg.type_id(),
&Message::Error(ref msg) => msg.type_id(),
Expand Down Expand Up @@ -113,18 +108,10 @@ impl<T> Message<T> where T: core::fmt::Debug + Type {
&Message::Custom(ref msg) => msg.type_id(),
}
}
}

impl MessageType {
/// Returns whether the message type is even, indicating both endpoints must support it.
/// Returns whether the message's type is even, indicating both endpoints must support it.
pub fn is_even(&self) -> bool {
(self.0 & 1) == 0
}
}

impl ::core::fmt::Display for MessageType {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
write!(f, "{}", self.0)
(self.type_id() & 1) == 0
}
}

Expand Down Expand Up @@ -232,7 +219,7 @@ where
if let Some(custom) = custom_reader.read(message_type, buffer)? {
Ok(Message::Custom(custom))
} else {
Ok(Message::Unknown(MessageType(message_type)))
Ok(Message::Unknown(message_type))
}
},
}
Expand All @@ -245,7 +232,7 @@ where
///
/// Returns an I/O error if the write could not be completed.
pub fn write<M: Type + Writeable, W: Writer>(message: &M, buffer: &mut W) -> Result<(), io::Error> {
message.type_id().0.write(buffer)?;
message.type_id().write(buffer)?;
message.write(buffer)
}

Expand All @@ -264,12 +251,12 @@ pub(crate) use self::encode::Encode;
/// Messages implementing this trait specify a type and must be [`Writeable`] to use with [`write()`].
pub trait Type {
/// Returns the type identifying the message payload.
fn type_id(&self) -> MessageType;
fn type_id(&self) -> u16;
}

impl<T> Type for T where T: Encode {
fn type_id(&self) -> MessageType {
MessageType(T::TYPE)
fn type_id(&self) -> u16 {
T::TYPE
}
}

Expand Down Expand Up @@ -440,7 +427,7 @@ mod tests {
let mut reader = io::Cursor::new(buffer);
let message = read(&mut reader, &IgnoringCustomMessageHandler{}).unwrap();
match message {
Message::Unknown(MessageType(::core::u16::MAX)) => (),
Message::Unknown(::core::u16::MAX) => (),
_ => panic!("Expected message type {}; found: {}", ::core::u16::MAX, message.type_id()),
}
}
Expand Down Expand Up @@ -476,14 +463,14 @@ mod tests {

#[test]
fn is_even_message_type() {
let message = Message::<()>::Unknown(MessageType(42));
assert!(message.type_id().is_even());
let message = Message::<()>::Unknown(42);
assert!(message.is_even());
}

#[test]
fn is_odd_message_type() {
let message = Message::<()>::Unknown(MessageType(43));
assert!(!message.type_id().is_even());
let message = Message::<()>::Unknown(43);
assert!(!message.is_even());
}

#[test]
Expand Down Expand Up @@ -553,8 +540,8 @@ mod tests {
const CUSTOM_MESSAGE_TYPE : u16 = 9000;

impl Type for TestCustomMessage {
fn type_id(&self) -> MessageType {
MessageType(CUSTOM_MESSAGE_TYPE)
fn type_id(&self) -> u16 {
CUSTOM_MESSAGE_TYPE
}
}

Expand Down Expand Up @@ -591,7 +578,7 @@ mod tests {
let decoded_msg = read(&mut reader, &TestCustomMessageReader{}).unwrap();
match decoded_msg {
Message::Custom(custom) => {
assert_eq!(custom.type_id().0, CUSTOM_MESSAGE_TYPE);
assert_eq!(custom.type_id(), CUSTOM_MESSAGE_TYPE);
assert_eq!(custom, TestCustomMessage {});
},
_ => panic!("Expected custom message, found message type: {}", decoded_msg.type_id()),
Expand Down

0 comments on commit 6fbbc74

Please sign in to comment.