add engine ready listener

This commit is contained in:
Pascal Fischer
2023-11-08 16:37:56 +01:00
parent 2b249ab9c9
commit 0a8249e044
4 changed files with 22 additions and 3 deletions

View File

@@ -3,6 +3,7 @@ package internal
import ( import (
"context" "context"
"fmt" "fmt"
"runtime"
"strings" "strings"
"time" "time"
@@ -43,11 +44,12 @@ func RunClientMobile(ctx context.Context, config *Config, statusRecorder *peer.S
return runClient(ctx, config, statusRecorder, mobileDependency) return runClient(ctx, config, statusRecorder, mobileDependency)
} }
func RunClientiOS(ctx context.Context, config *Config, statusRecorder *peer.Status, fileDescriptor int32, networkChangeListener listener.NetworkChangeListener, dnsManager dns.IosDnsManager, interfaceName string) error { func RunClientiOS(ctx context.Context, config *Config, statusRecorder *peer.Status, fileDescriptor int32, networkChangeListener listener.NetworkChangeListener, dnsManager dns.IosDnsManager, interfaceName string, engineReadyListener listener.EngineReadyListener) error {
mobileDependency := MobileDependency{ mobileDependency := MobileDependency{
FileDescriptor: fileDescriptor, FileDescriptor: fileDescriptor,
InterfaceName: interfaceName, InterfaceName: interfaceName,
NetworkChangeListener: networkChangeListener, NetworkChangeListener: networkChangeListener,
EngineReadyListener: engineReadyListener,
DnsManager: dnsManager, DnsManager: dnsManager,
} }
return runClient(ctx, config, statusRecorder, mobileDependency) return runClient(ctx, config, statusRecorder, mobileDependency)
@@ -189,6 +191,10 @@ func runClient(ctx context.Context, config *Config, statusRecorder *peer.Status,
return wrapErr(err) return wrapErr(err)
} }
if runtime.GOOS == "ios" {
mobileDependency.EngineReadyListener.Notify()
}
log.Print("Netbird engine started, my IP is: ", peerConfig.Address) log.Print("Netbird engine started, my IP is: ", peerConfig.Address)
state.Set(StatusConnected) state.Set(StatusConnected)

View File

@@ -0,0 +1,7 @@
package listener
// EngineReadyListener is a callback interface for mobile system
type EngineReadyListener interface {
// Notify invoke when engine is ready
Notify()
}

View File

@@ -12,6 +12,7 @@ type MobileDependency struct {
TunAdapter iface.TunAdapter TunAdapter iface.TunAdapter
IFaceDiscover stdnet.ExternalIFaceDiscover IFaceDiscover stdnet.ExternalIFaceDiscover
NetworkChangeListener listener.NetworkChangeListener NetworkChangeListener listener.NetworkChangeListener
EngineReadyListener listener.EngineReadyListener
HostDNSAddresses []string HostDNSAddresses []string
DnsReadyListener dns.ReadyListener DnsReadyListener dns.ReadyListener
DnsManager dns.IosDnsManager DnsManager dns.IosDnsManager

View File

@@ -33,6 +33,11 @@ type CustomLogger interface {
Error(message string) Error(message string)
} }
// EngineReadyListener export internal EngineReadyListener for mobile
type EngineReadyListener interface {
listener.EngineReadyListener
}
func init() { func init() {
formatter.SetLogcatFormatter(log.StandardLogger()) formatter.SetLogcatFormatter(log.StandardLogger())
} }
@@ -67,7 +72,7 @@ func NewClient(cfgFile, deviceName string, osVersion string, osName string, netw
} }
// Run start the internal client. It is a blocker function // Run start the internal client. It is a blocker function
func (c *Client) Run(fd int32, interfaceName string) error { func (c *Client) Run(fd int32, interfaceName string, engineReadyListener EngineReadyListener) error {
log.Infof("Starting NetBird client") log.Infof("Starting NetBird client")
log.Debugf("Tunnel uses interface: %s", interfaceName) log.Debugf("Tunnel uses interface: %s", interfaceName)
cfg, err := internal.UpdateOrCreateConfig(internal.ConfigInput{ cfg, err := internal.UpdateOrCreateConfig(internal.ConfigInput{
@@ -98,7 +103,7 @@ func (c *Client) Run(fd int32, interfaceName string) error {
// todo do not throw error in case of cancelled context // todo do not throw error in case of cancelled context
ctx = internal.CtxInitState(ctx) ctx = internal.CtxInitState(ctx)
c.onHostDnsFn = func([]string) {} c.onHostDnsFn = func([]string) {}
return internal.RunClientiOS(ctx, cfg, c.recorder, fd, c.networkChangeListener, c.dnsManager, interfaceName) return internal.RunClientiOS(ctx, cfg, c.recorder, fd, c.networkChangeListener, c.dnsManager, interfaceName, engineReadyListener)
} }
// Stop the internal client and free the resources // Stop the internal client and free the resources