5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-09-20 03:42:32 +00:00

Keep AWDL awake, or wake it up again after a minute if suspended for some reason (e.g. sleep)

This commit is contained in:
Neil Alexander 2019-03-10 18:05:27 +00:00
parent 9507117a3c
commit 3c2cdfea1c
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944
5 changed files with 38 additions and 16 deletions

View File

@ -57,7 +57,7 @@ func (m *multicast) start() error {
// Windows can't set this flag, so we need to handle it in other ways // Windows can't set this flag, so we need to handle it in other ways
} }
m.multicastWake() go m.multicastStarted()
go m.listen() go m.listen()
go m.announce() go m.announce()
} }

View File

@ -6,24 +6,46 @@ package yggdrasil
#cgo CFLAGS: -x objective-c #cgo CFLAGS: -x objective-c
#cgo LDFLAGS: -framework Foundation #cgo LDFLAGS: -framework Foundation
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
void WakeUpAWDL() { NSNetServiceBrowser *serviceBrowser;
NSNetServiceBrowser *serviceBrowser; void StartAWDLBrowsing() {
if (serviceBrowser == nil) {
serviceBrowser = [[NSNetServiceBrowser alloc] init]; serviceBrowser = [[NSNetServiceBrowser alloc] init];
serviceBrowser.includesPeerToPeer = YES; serviceBrowser.includesPeerToPeer = YES;
}
[serviceBrowser searchForServicesOfType:@"_yggdrasil._tcp" inDomain:@""]; [serviceBrowser searchForServicesOfType:@"_yggdrasil._tcp" inDomain:@""];
} }
void StopAWDLBrowsing() {
if (serviceBrowser == nil) {
return;
}
[serviceBrowser stop];
}
*/ */
import "C" import "C"
import "syscall" import (
import "golang.org/x/sys/unix" "syscall"
"time"
func (m *multicast) multicastWake() { "golang.org/x/sys/unix"
for _, intf := range m.interfaces() { )
if intf.Name == "awdl0" {
m.core.log.Infoln("Multicast discovery is waking up AWDL") var awdlGoroutineStarted bool
C.WakeUpAWDL()
func (m *multicast) multicastStarted() {
if awdlGoroutineStarted {
return
}
m.core.log.Infoln("Multicast discovery will wake up AWDL if required")
awdlGoroutineStarted = true
for {
C.StopAWDLBrowsing()
for _, intf := range m.interfaces() {
if intf.Name == "awdl0" {
C.StartAWDLBrowsing()
break
}
} }
time.Sleep(time.Minute)
} }
} }

View File

@ -4,7 +4,7 @@ package yggdrasil
import "syscall" import "syscall"
func (m *multicast) multicastWake() { func (m *multicast) multicastStarted() {
} }

View File

@ -5,7 +5,7 @@ package yggdrasil
import "syscall" import "syscall"
import "golang.org/x/sys/unix" import "golang.org/x/sys/unix"
func (m *multicast) multicastWake() { func (m *multicast) multicastStarted() {
} }

View File

@ -5,7 +5,7 @@ package yggdrasil
import "syscall" import "syscall"
import "golang.org/x/sys/windows" import "golang.org/x/sys/windows"
func (m *multicast) multicastWake() { func (m *multicast) multicastStarted() {
} }