diff --git a/watchtower/wtwire/create_session_reply.go b/watchtower/wtwire/create_session_reply.go new file mode 100644 index 00000000..b1224cb8 --- /dev/null +++ b/watchtower/wtwire/create_session_reply.go @@ -0,0 +1,91 @@ +package wtwire + +import "io" + +// CreateSessionCode is an error code returned by a watchtower in response to a +// CreateSession message. The code directs the client in interpreting the payload +// in the reply. +type CreateSessionCode = ErrorCode + +const ( + // CreateSessionCodeAlreadyExists is returned when a session is already + // active for the public key used to connect to the watchtower. The + // response includes the serialized reward address in case the original + // reply was never received and/or processed by the client. + CreateSessionCodeAlreadyExists CreateSessionCode = 60 + + // CreateSessionCodeRejectRejectMaxUpdates the tower rejected the maximum + // number of state updates proposed by the client. + CreateSessionCodeRejectRejectMaxUpdates CreateSessionCode = 61 + + // CreateSessionCodeRejectRewardRate the tower rejected the reward rate + // proposed by the client. + CreateSessionCodeRejectRewardRate CreateSessionCode = 62 + + // CreateSessionCodeRejectSweepFeeRate the tower rejected the sweep fee + // rate proposed by the client. + CreateSessionCodeRejectSweepFeeRate CreateSessionCode = 63 +) + +// MaxCreateSessionReplyDataLength is the maximum size of the Data payload +// returned in a CreateSessionReply message. This does not include the length of +// the Data field, which is a varint up to 3 bytes in size. +const MaxCreateSessionReplyDataLength = 1024 + +// CreateSessionReply is a message sent from watchtower to client in response to a +// CreateSession message, and signals either an acceptance or rejection of the +// proposed session parameters. +type CreateSessionReply struct { + // Code will be non-zero if the watchtower rejected the session init. + Code CreateSessionCode + + // Data is a byte slice returned the caller of the message, and is to be + // interpreted according to the error Code. When the response is + // CreateSessionCodeOK, data encodes the reward address to be included in + // any sweep transactions if the reward is not dusty. Otherwise, it may + // encode the watchtowers configured parameters for any policy + // rejections. + Data []byte +} + +// A compile time check to ensure CreateSessionReply implements the wtwire.Message +// interface. +var _ Message = (*CreateSessionReply)(nil) + +// Decode deserializes a serialized CreateSessionReply message stored in the passed +// io.Reader observing the specified protocol version. +// +// This is part of the wtwire.Message interface. +func (m *CreateSessionReply) Decode(r io.Reader, pver uint32) error { + return ReadElements(r, + &m.Code, + &m.Data, + ) +} + +// Encode serializes the target CreateSessionReply into the passed io.Writer +// observing the protocol version specified. +// +// This is part of the wtwire.Message interface. +func (m *CreateSessionReply) Encode(w io.Writer, pver uint32) error { + return WriteElements(w, + m.Code, + m.Data, + ) +} + +// MsgType returns the integer uniquely identifying this message type on the +// wire. +// +// This is part of the wtwire.Message interface. +func (m *CreateSessionReply) MsgType() MessageType { + return MsgCreateSessionReply +} + +// MaxPayloadLength returns the maximum allowed payload size for a CreateSessionReply +// complete message observing the specified protocol version. +// +// This is part of the wtwire.Message interface. +func (m *CreateSessionReply) MaxPayloadLength(uint32) uint32 { + return 2 + 3 + MaxCreateSessionReplyDataLength +}