watchtower/wtwire/error: add generic error message
This commit is contained in:
parent
d171df5184
commit
999466c860
62
watchtower/wtwire/error.go
Normal file
62
watchtower/wtwire/error.go
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
package wtwire
|
||||||
|
|
||||||
|
import "io"
|
||||||
|
|
||||||
|
// Error is a generic error message that can be sent to a client if a request
|
||||||
|
// fails outside of prescribed protocol errors. Typically this would be followed
|
||||||
|
// by the server disconnecting the client, and so can be useful to transfering
|
||||||
|
// the exact reason.
|
||||||
|
type Error struct {
|
||||||
|
// Code specifies the error code encountered by the server.
|
||||||
|
Code ErrorCode
|
||||||
|
|
||||||
|
// Data encodes a payload whose contents can be interpreted by the
|
||||||
|
// client in response to the error code.
|
||||||
|
Data []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewError returns an freshly-initialized Error message.
|
||||||
|
func NewError() *Error {
|
||||||
|
return &Error{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A compile time check to ensure Error implements the wtwire.Message interface.
|
||||||
|
var _ Message = (*Error)(nil)
|
||||||
|
|
||||||
|
// Decode deserializes a serialized Error message stored in the passed io.Reader
|
||||||
|
// observing the specified protocol version.
|
||||||
|
//
|
||||||
|
// This is part of the wtwire.Message interface.
|
||||||
|
func (e *Error) Decode(r io.Reader, pver uint32) error {
|
||||||
|
return ReadElements(r,
|
||||||
|
&e.Code,
|
||||||
|
&e.Data,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encode serializes the target Error into the passed io.Writer observing the
|
||||||
|
// protocol version specified.
|
||||||
|
//
|
||||||
|
// This is part of the wtwire.Message interface.
|
||||||
|
func (e *Error) Encode(w io.Writer, prver uint32) error {
|
||||||
|
return WriteElements(w,
|
||||||
|
e.Code,
|
||||||
|
e.Data,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MsgType returns the integer uniquely identifying this message type on the
|
||||||
|
// wire.
|
||||||
|
//
|
||||||
|
// This is part of the wtwire.Message interface.
|
||||||
|
func (e *Error) MsgType() MessageType {
|
||||||
|
return MsgError
|
||||||
|
}
|
||||||
|
|
||||||
|
// MaxPayloadLength returns the maximum allowed payload size for a Error
|
||||||
|
// complete message observing the specified protocol version.
|
||||||
|
//
|
||||||
|
// This is part of the wtwire.Message interface.
|
||||||
|
func (e *Error) MaxPayloadLength(uint32) uint32 {
|
||||||
|
return MaxMessagePayload
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user