diff --git a/lnwire/lnwire_test.go b/lnwire/lnwire_test.go index ec528a38a..44d6cfb9b 100644 --- a/lnwire/lnwire_test.go +++ b/lnwire/lnwire_test.go @@ -964,6 +964,12 @@ func TestLightningWireProtocol(t *testing.T) { return mainScenario(&m) }, }, + { + msgType: MsgWarning, + scenario: func(m Warning) bool { + return mainScenario(&m) + }, + }, { msgType: MsgError, scenario: func(m Error) bool { diff --git a/lnwire/message.go b/lnwire/message.go index e6de25d25..ac57c8a29 100644 --- a/lnwire/message.go +++ b/lnwire/message.go @@ -22,7 +22,8 @@ type MessageType uint16 // The currently defined message types within this current version of the // Lightning protocol. const ( - MsgInit MessageType = 16 + MsgWarning MessageType = 1 + MsgInit = 16 MsgError = 17 MsgPing = 18 MsgPong = 19 @@ -75,6 +76,8 @@ func ErrorPayloadTooLarge(size int) error { // String return the string representation of message type. func (t MessageType) String() string { switch t { + case MsgWarning: + return "Warning" case MsgInit: return "Init" case MsgOpenChannel: @@ -175,6 +178,8 @@ func makeEmptyMessage(msgType MessageType) (Message, error) { var msg Message switch msgType { + case MsgWarning: + msg = &Warning{} case MsgInit: msg = &Init{} case MsgOpenChannel: diff --git a/lnwire/warning.go b/lnwire/warning.go new file mode 100644 index 000000000..bc75eaf6b --- /dev/null +++ b/lnwire/warning.go @@ -0,0 +1,22 @@ +package lnwire + +// A compile time check to ensure Warning implements the lnwire.Message +// interface. +var _ Message = (*Warning)(nil) + +// Warning is used to express non-critical errors in the protocol, providing +// a "soft" way for nodes to communicate failures. Since it has the same +// structure as errors, warnings simply include an Error so that we can leverage +// their encode/decode functionality, and over write the MsgType function to +// differentiate them. +type Warning struct { + Error +} + +// MsgType returns the integer uniquely identifying an Warning message on the +// wire. +// +// This is part of the lnwire.Message interface. +func (c *Warning) MsgType() MessageType { + return MsgWarning +}