diff --git a/contrib/mobile/mobile.go b/contrib/mobile/mobile.go index ff22b9d7..68ad5660 100644 --- a/contrib/mobile/mobile.go +++ b/contrib/mobile/mobile.go @@ -169,6 +169,11 @@ func GenerateConfigJSON() []byte { return nil } +// Connects first peer from config, just to reconnect fast after network switch +func (m *Yggdrasil) ConnectFirstPeer() { + m.core.ConnectFirstPeer() +} + // GetAddressString gets the node's IPv6 address func (m *Yggdrasil) GetAddressString() string { ip := m.core.Address() diff --git a/src/core/core.go b/src/core/core.go index 67f927a6..efc0bce6 100644 --- a/src/core/core.go +++ b/src/core/core.go @@ -121,6 +121,27 @@ func (c *Core) _addPeerLoop() { }) } +// Connects first peer from config, just to reconnect fast after network switch +// Used in mobile +func (c *Core) ConnectFirstPeer() { + select { + case <-c.ctx.Done(): + return + default: + } + // Add peers from the Peers section + for peer := range c.config._peers { + u, err := url.Parse(peer.URI) + if err != nil { + c.log.Errorln("Failed to parse peer url:", peer, err) + } + if err := c.CallPeer(u, peer.SourceInterface); err != nil { + c.log.Errorln("Failed to add peer:", err) + } + break + } +} + // Stop shuts down the Yggdrasil node. func (c *Core) Stop() { phony.Block(c, func() {