lnd.xprv/watchtower/wtserver/interface.go

71 lines
2.2 KiB
Go

package wtserver
import (
"io"
"net"
"time"
"github.com/btcsuite/btcd/btcec"
"github.com/lightningnetwork/lnd/watchtower/wtdb"
)
// Interface represents a simple, listen-only service that accepts watchtower
// clients, and provides responses to their requests.
type Interface interface {
// InboundPeerConnected accepts a new watchtower client, and handles any
// requests sent by the peer.
InboundPeerConnected(Peer)
// Start sets up the watchtower server.
Start() error
// Stop cleans up the watchtower's current connections and resources.
Stop() error
}
// Peer is the primary interface used to abstract watchtower clients.
type Peer interface {
io.WriteCloser
// ReadNextMessage pulls the next framed message from the client.
ReadNextMessage() ([]byte, error)
// SetWriteDeadline specifies the time by which the client must have
// read a message sent by the server. In practice, the connection is
// buffered, so the client must read enough from the connection to
// support the server adding another reply.
SetWriteDeadline(time.Time) error
// SetReadDeadline specifies the time by which the client must send
// another message.
SetReadDeadline(time.Time) error
// RemotePub returns the client's public key.
RemotePub() *btcec.PublicKey
// RemoteAddr returns the client's network address.
RemoteAddr() net.Addr
}
// DB provides the server access to session creation and retrieval, as well as
// persisting state updates sent by clients.
type DB interface {
// InsertSessionInfo saves a newly agreed-upon session from a client.
// This method should fail if a session with the same session id already
// exists.
InsertSessionInfo(*wtdb.SessionInfo) error
// GetSessionInfo retrieves the SessionInfo associated with the session
// id, if it exists.
GetSessionInfo(*wtdb.SessionID) (*wtdb.SessionInfo, error)
// InsertStateUpdate persists a state update sent by a client, and
// validates the update against the current SessionInfo stored under the
// update's session id..
InsertStateUpdate(*wtdb.SessionStateUpdate) (uint16, error)
// DeleteSession removes all data associated with a particular session
// id from the tower's database.
DeleteSession(wtdb.SessionID) error
}