mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-10-10 22:52:41 +02:00
lnd+server+watchtower: allow Standalone access to the tor controller
This commit lets the watchtower automatically create hidden services by giving it a pointer to a TorController. The server was also slightly refactored so that it was not the sole owner of the TorController.
This commit is contained in:
32
server.go
32
server.go
@@ -322,7 +322,8 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
|
||||
towerClientDB *wtdb.ClientDB, cc *chainControl,
|
||||
privKey *btcec.PrivateKey,
|
||||
chansToRestore walletunlocker.ChannelsToRecover,
|
||||
chanPredicate chanacceptor.ChannelAcceptor) (*server, error) {
|
||||
chanPredicate chanacceptor.ChannelAcceptor,
|
||||
torController *tor.Controller) (*server, error) {
|
||||
|
||||
var err error
|
||||
|
||||
@@ -428,6 +429,8 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
|
||||
// schedule
|
||||
sphinx: hop.NewOnionProcessor(sphinxRouter),
|
||||
|
||||
torController: torController,
|
||||
|
||||
persistentPeers: make(map[string]bool),
|
||||
persistentPeersBackoff: make(map[string]time.Duration),
|
||||
persistentConnReqs: make(map[string][]*connmgr.ConnReq),
|
||||
@@ -598,16 +601,6 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
|
||||
selfAddrs = append(selfAddrs, ip)
|
||||
}
|
||||
|
||||
// If we were requested to route connections through Tor and to
|
||||
// automatically create an onion service, we'll initiate our Tor
|
||||
// controller and establish a connection to the Tor server.
|
||||
if cfg.Tor.Active && (cfg.Tor.V2 || cfg.Tor.V3) {
|
||||
s.torController = tor.NewController(
|
||||
cfg.Tor.Control, cfg.Tor.TargetIPAddress,
|
||||
cfg.Tor.Password,
|
||||
)
|
||||
}
|
||||
|
||||
chanGraph := chanDB.ChannelGraph()
|
||||
|
||||
// We'll now reconstruct a node announcement based on our current
|
||||
@@ -1251,7 +1244,7 @@ func (s *server) Start() error {
|
||||
var startErr error
|
||||
s.start.Do(func() {
|
||||
if s.torController != nil {
|
||||
if err := s.initTorController(); err != nil {
|
||||
if err := s.createNewHiddenService(); err != nil {
|
||||
startErr = err
|
||||
return
|
||||
}
|
||||
@@ -1442,10 +1435,6 @@ func (s *server) Stop() error {
|
||||
|
||||
close(s.quit)
|
||||
|
||||
if s.torController != nil {
|
||||
s.torController.Stop()
|
||||
}
|
||||
|
||||
// Shutdown the wallet, funding manager, and the rpc server.
|
||||
s.chanStatusMgr.Stop()
|
||||
s.cc.chainNotifier.Stop()
|
||||
@@ -1965,14 +1954,9 @@ func (s *server) initialPeerBootstrap(ignore map[autopilot.NodeID]struct{},
|
||||
}
|
||||
}
|
||||
|
||||
// initTorController initiliazes the Tor controller backed by lnd and
|
||||
// automatically sets up a v2 onion service in order to listen for inbound
|
||||
// connections over Tor.
|
||||
func (s *server) initTorController() error {
|
||||
if err := s.torController.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// createNewHiddenService automatically sets up a v2 or v3 onion service in
|
||||
// order to listen for inbound connections over Tor.
|
||||
func (s *server) createNewHiddenService() error {
|
||||
// Determine the different ports the server is listening on. The onion
|
||||
// service's virtual port will map to these ports and one will be picked
|
||||
// at random when the onion service is being accessed.
|
||||
|
Reference in New Issue
Block a user