//! Wire encoding/decoding for Lightning messages according to [BOLT #1].
//!
-//! Messages known by this module can be read from the wire using [`read`].
-//! The [`Message`] enum returned by [`read`] wraps the decoded message or the message type (if
+//! Messages known by this module can be read from the wire using [`read()`].
+//! The [`Message`] enum returned by [`read()`] wraps the decoded message or the message type (if
//! unknown) to use with pattern matching.
//!
//! Messages implementing the [`Encode`] trait define a message type and can be sent over the wire
-//! using [`write`].
+//! using [`write()`].
//!
//! [BOLT #1]: https://github.com/lightningnetwork/lightning-rfc/blob/master/01-messaging.md
-//! [`read`]: fn.read.html
-//! [`write`]: fn.write.html
-//! [`Encode`]: trait.Encode.html
-//! [`Message`]: enum.Message.html
use ln::msgs;
use util::ser::{Readable, Writeable, Writer};
-/// A Lightning message returned by [`read`] when decoding bytes received over the wire. Each
-/// variant contains a message from [`ln::msgs`] or otherwise the message type if unknown.
-///
-/// [`read`]: fn.read.html
-/// [`ln::msgs`]: ../msgs/index.html
+/// A Lightning message returned by [`read()`] when decoding bytes received over the wire. Each
+/// variant contains a message from [`msgs`] or otherwise the message type if unknown.
#[allow(missing_docs)]
pub enum Message {
Init(msgs::Init),
ChannelAnnouncement(msgs::ChannelAnnouncement),
NodeAnnouncement(msgs::NodeAnnouncement),
ChannelUpdate(msgs::ChannelUpdate),
+ QueryShortChannelIds(msgs::QueryShortChannelIds),
+ ReplyShortChannelIdsEnd(msgs::ReplyShortChannelIdsEnd),
+ QueryChannelRange(msgs::QueryChannelRange),
+ ReplyChannelRange(msgs::ReplyChannelRange),
+ GossipTimestampFilter(msgs::GossipTimestampFilter),
/// A message that could not be decoded because its type is unknown.
Unknown(MessageType),
}
&Message::ChannelAnnouncement(ref msg) => msg.type_id(),
&Message::NodeAnnouncement(ref msg) => msg.type_id(),
&Message::ChannelUpdate(ref msg) => msg.type_id(),
+ &Message::QueryShortChannelIds(ref msg) => msg.type_id(),
+ &Message::ReplyShortChannelIdsEnd(ref msg) => msg.type_id(),
+ &Message::QueryChannelRange(ref msg) => msg.type_id(),
+ &Message::ReplyChannelRange(ref msg) => msg.type_id(),
+ &Message::GossipTimestampFilter(ref msg) => msg.type_id(),
&Message::Unknown(type_id) => type_id,
}
}
msgs::ChannelUpdate::TYPE => {
Ok(Message::ChannelUpdate(Readable::read(buffer)?))
},
+ msgs::QueryShortChannelIds::TYPE => {
+ Ok(Message::QueryShortChannelIds(Readable::read(buffer)?))
+ },
+ msgs::ReplyShortChannelIdsEnd::TYPE => {
+ Ok(Message::ReplyShortChannelIdsEnd(Readable::read(buffer)?))
+ },
+ msgs::QueryChannelRange::TYPE => {
+ Ok(Message::QueryChannelRange(Readable::read(buffer)?))
+ },
+ msgs::ReplyChannelRange::TYPE => {
+ Ok(Message::ReplyChannelRange(Readable::read(buffer)?))
+ }
+ msgs::GossipTimestampFilter::TYPE => {
+ Ok(Message::GossipTimestampFilter(Readable::read(buffer)?))
+ },
_ => {
Ok(Message::Unknown(MessageType(message_type)))
},
/// Defines a type-identified encoding for sending messages over the wire.
///
-/// Messages implementing this trait specify a type and must be [`Writeable`] to use with [`write`].
-///
-/// [`Writeable`]: ../../util/ser/trait.Writeable.html
-/// [`write`]: fn.write.html
+/// Messages implementing this trait specify a type and must be [`Writeable`] to use with [`write()`].
pub trait Encode {
/// The type identifying the message payload.
const TYPE: u16;
/// Returns the type identifying the message payload. Convenience method for accessing
- /// [`TYPE`](TYPE).
+ /// [`Self::TYPE`].
fn type_id(&self) -> MessageType {
MessageType(Self::TYPE)
}
const TYPE: u16 = 258;
}
+impl Encode for msgs::QueryShortChannelIds {
+ const TYPE: u16 = 261;
+}
+
+impl Encode for msgs::ReplyShortChannelIdsEnd {
+ const TYPE: u16 = 262;
+}
+
+impl Encode for msgs::QueryChannelRange {
+ const TYPE: u16 = 263;
+}
+
+impl Encode for msgs::ReplyChannelRange {
+ const TYPE: u16 = 264;
+}
+
+impl Encode for msgs::GossipTimestampFilter {
+ const TYPE: u16 = 265;
+}
+
#[cfg(test)]
mod tests {
use super::*;