watchtower: make use of the new AddressIterator
This commit upgrades the wtclient package to make use of the new `AddressIterator`. It does so by first creating new `Tower` and `ClientSession` types. The new `Tower` type has an `AddressIterator` instead of a list of addresses. The `ClientSession` type contains a `Tower`.
This commit is contained in:
13 files changed
+274
-184
No files matched your search
@@ -118,3 +118,50 @@ type ECDHKeyRing interface {
|
||||
// key.
|
||||
DeriveKey(keyLoc keychain.KeyLocator) (keychain.KeyDescriptor, error)
|
||||
}
|
||||
|
||||
// Tower represents the info about a watchtower server that a watchtower client
|
||||
// needs in order to connect to it.
|
||||
type Tower struct {
|
||||
// ID is the unique, db-assigned, identifier for this tower.
|
||||
ID wtdb.TowerID
|
||||
|
||||
// IdentityKey is the public key of the remote node, used to
|
||||
// authenticate the brontide transport.
|
||||
IdentityKey *btcec.PublicKey
|
||||
|
||||
// Addresses is an AddressIterator that can be used to manage the
|
||||
// addresses for this tower.
|
||||
Addresses AddressIterator
|
||||
}
|
||||
|
||||
// NewTowerFromDBTower converts a wtdb.Tower, which uses a static address list,
|
||||
// into a Tower which uses an address iterator.
|
||||
func NewTowerFromDBTower(t *wtdb.Tower) (*Tower, error) {
|
||||
addrs, err := newAddressIterator(t.Addresses...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Tower{
|
||||
ID: t.ID,
|
||||
IdentityKey: t.IdentityKey,
|
||||
Addresses: addrs,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// ClientSession represents the session that a tower client has with a server.
|
||||
type ClientSession struct {
|
||||
// ID is the client's public key used when authenticating with the
|
||||
// tower.
|
||||
ID wtdb.SessionID
|
||||
|
||||
wtdb.ClientSessionBody
|
||||
|
||||
// Tower represents the tower that the client session has been made
|
||||
// with.
|
||||
Tower *Tower
|
||||
|
||||
// SessionKeyECDH is the ECDH capable wrapper of the ephemeral secret
|
||||
// key used to connect to the watchtower.
|
||||
SessionKeyECDH keychain.SingleKeyECDH
|
||||
}
|
||||
Reference in new issue
Block a user