|
|
@@ -193,94 +193,6 @@ func main() {
|
|
|
log.Println("Daemon stopped")
|
|
|
}
|
|
|
|
|
|
-// applyScannerConfig starts/stops scanners based on current config
|
|
|
-func (d *Daemon) applyScannerConfig() {
|
|
|
- d.mu.Lock()
|
|
|
- bleEnabled := d.cfg.BLE.Enabled
|
|
|
- wifiMonitorEnabled := d.cfg.WiFi.MonitorEnabled
|
|
|
- wifiClientEnabled := d.cfg.WiFi.ClientEnabled
|
|
|
- zmqBLE := d.cfg.ZMQAddrBLE
|
|
|
- zmqWiFi := d.cfg.ZMQAddrWiFi
|
|
|
- wifiIface := d.cfg.WiFiIface
|
|
|
- d.mu.Unlock()
|
|
|
-
|
|
|
- // BLE scanner
|
|
|
- if bleEnabled {
|
|
|
- if !d.scanners.IsBLERunning() {
|
|
|
- log.Println("Starting BLE scanner...")
|
|
|
- if err := d.scanners.StartBLE(zmqBLE); err != nil {
|
|
|
- log.Printf("Failed to start BLE scanner: %v", err)
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if d.scanners.IsBLERunning() {
|
|
|
- log.Println("Stopping BLE scanner...")
|
|
|
- d.scanners.StopBLE()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // WiFi scanner - NEVER run if WiFi client is enabled (they share wlan0)
|
|
|
- // Client mode takes priority over monitor mode
|
|
|
- if wifiClientEnabled {
|
|
|
- if d.scanners.IsWiFiRunning() {
|
|
|
- log.Println("Stopping WiFi scanner (client mode enabled in config)...")
|
|
|
- d.scanners.StopWiFi()
|
|
|
- }
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- // WiFi scanner - only if monitor enabled AND client disabled
|
|
|
- // Client has HIGHER priority - if both enabled, client works, scanner doesn't
|
|
|
- if wifiMonitorEnabled {
|
|
|
- if !d.scanners.IsWiFiRunning() {
|
|
|
- log.Println("Starting WiFi scanner...")
|
|
|
- if err := d.scanners.StartWiFi(zmqWiFi, wifiIface); err != nil {
|
|
|
- log.Printf("Failed to start WiFi scanner: %v", err)
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if d.scanners.IsWiFiRunning() {
|
|
|
- log.Println("Stopping WiFi scanner (monitor disabled)...")
|
|
|
- d.scanners.StopWiFi()
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// applyWiFiClientState checks if WiFi client state matches config and applies changes
|
|
|
-func (d *Daemon) applyWiFiClientState() {
|
|
|
- d.mu.Lock()
|
|
|
- clientEnabled := d.cfg.WiFi.ClientEnabled
|
|
|
- ssid := d.cfg.WiFi.SSID
|
|
|
- psk := d.cfg.WiFi.PSK
|
|
|
- d.mu.Unlock()
|
|
|
-
|
|
|
- // Check if wlan0 has an IP (meaning it's connected)
|
|
|
- wlan0IP := getInterfaceIP("wlan0")
|
|
|
- isConnected := wlan0IP != ""
|
|
|
-
|
|
|
- if clientEnabled && ssid != "" {
|
|
|
- // Should be connected
|
|
|
- if !isConnected {
|
|
|
- // Stop WiFi scanner before connecting client (they can't coexist)
|
|
|
- if d.scanners.IsWiFiRunning() {
|
|
|
- log.Println("Stopping WiFi scanner before connecting client...")
|
|
|
- d.scanners.StopWiFi()
|
|
|
- }
|
|
|
-
|
|
|
- log.Printf("WiFi client should be connected (SSID=%s), connecting...", ssid)
|
|
|
- if err := applyWiFiSettings(ssid, psk); err != nil {
|
|
|
- log.Printf("Failed to connect WiFi client: %v", err)
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- // Should be disconnected
|
|
|
- if isConnected {
|
|
|
- log.Println("WiFi client should be disconnected, disconnecting...")
|
|
|
- disconnectWiFiClient()
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
func (d *Daemon) registrationLoop() {
|
|
|
for {
|
|
|
select {
|
|
|
@@ -376,7 +288,6 @@ func (d *Daemon) fetchAndApplyConfig() {
|
|
|
bleChanged := false
|
|
|
wifiMonitorChanged := false
|
|
|
wifiClientChanged := false
|
|
|
- oldClientEnabled := d.cfg.WiFi.ClientEnabled
|
|
|
|
|
|
if effectiveMode == "cloud" {
|
|
|
// Cloud mode: server settings have priority
|
|
|
@@ -418,35 +329,29 @@ func (d *Daemon) fetchAndApplyConfig() {
|
|
|
|
|
|
d.mu.Unlock()
|
|
|
|
|
|
- // Apply scanner config changes
|
|
|
- if bleChanged || wifiMonitorChanged {
|
|
|
- log.Printf("Config changed (mode=%s): ble=%v wifi_monitor=%v", effectiveMode, d.cfg.BLE.Enabled, d.cfg.WiFi.MonitorEnabled)
|
|
|
- d.applyScannerConfig()
|
|
|
- }
|
|
|
-
|
|
|
- // Apply WiFi client changes
|
|
|
- if wifiClientChanged {
|
|
|
- if d.cfg.WiFi.ClientEnabled && d.cfg.WiFi.SSID != "" {
|
|
|
- // Stop WiFi scanner before connecting client
|
|
|
- if d.scanners.IsWiFiRunning() {
|
|
|
- log.Println("Stopping WiFi scanner before connecting client...")
|
|
|
- d.scanners.StopWiFi()
|
|
|
+ // Apply BLE scanner changes (not managed by Network Manager)
|
|
|
+ if bleChanged {
|
|
|
+ log.Printf("BLE config changed (mode=%s): enabled=%v", effectiveMode, d.cfg.BLE.Enabled)
|
|
|
+ if d.cfg.BLE.Enabled {
|
|
|
+ if !d.scanners.IsBLERunning() {
|
|
|
+ log.Println("Starting BLE scanner...")
|
|
|
+ d.scanners.StartBLE(d.cfg.ZMQAddrBLE)
|
|
|
}
|
|
|
-
|
|
|
- log.Printf("WiFi client enabled by server: SSID=%s", d.cfg.WiFi.SSID)
|
|
|
- if err := applyWiFiSettings(d.cfg.WiFi.SSID, d.cfg.WiFi.PSK); err != nil {
|
|
|
- log.Printf("Failed to apply WiFi client settings: %v", err)
|
|
|
+ } else {
|
|
|
+ if d.scanners.IsBLERunning() {
|
|
|
+ log.Println("Stopping BLE scanner...")
|
|
|
+ d.scanners.StopBLE()
|
|
|
}
|
|
|
- // After client connects, update scanner config (will skip WiFi scanner)
|
|
|
- d.applyScannerConfig()
|
|
|
- } else if oldClientEnabled && !d.cfg.WiFi.ClientEnabled {
|
|
|
- log.Println("WiFi client disabled by server")
|
|
|
- disconnectWiFiClient()
|
|
|
- // After client disconnects, WiFi scanner may start (if monitor enabled)
|
|
|
- d.applyScannerConfig()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // Log WiFi config changes (Network Manager will handle automatically)
|
|
|
+ if wifiMonitorChanged || wifiClientChanged {
|
|
|
+ log.Printf("WiFi config changed (mode=%s): monitor=%v client=%v ssid=%s",
|
|
|
+ effectiveMode, d.cfg.WiFi.MonitorEnabled, d.cfg.WiFi.ClientEnabled, d.cfg.WiFi.SSID)
|
|
|
+ log.Println("Network Manager will apply changes automatically")
|
|
|
+ }
|
|
|
+
|
|
|
// Update tunnel config
|
|
|
d.tunnel.UpdateConfig(d.cfg)
|
|
|
if sshChanged {
|
|
|
@@ -459,7 +364,9 @@ func (d *Daemon) fetchAndApplyConfig() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // Update network manager config (eth0 settings are local-only, never from server)
|
|
|
+ // Update network manager config - it will handle all network changes automatically
|
|
|
+ // (eth0 settings are local-only, never from server)
|
|
|
+ // (WiFi client and scanner coordination handled by Network Manager)
|
|
|
d.netmgr.UpdateConfig(d.cfg)
|
|
|
|
|
|
// Save updated config
|