mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2024-11-27 12:05:23 +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:
parent
9507117a3c
commit
3c2cdfea1c
@ -57,7 +57,7 @@ func (m *multicast) start() error {
|
||||
// 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.announce()
|
||||
}
|
||||
|
@ -6,24 +6,46 @@ package yggdrasil
|
||||
#cgo CFLAGS: -x objective-c
|
||||
#cgo LDFLAGS: -framework Foundation
|
||||
#import <Foundation/Foundation.h>
|
||||
void WakeUpAWDL() {
|
||||
NSNetServiceBrowser *serviceBrowser;
|
||||
|
||||
serviceBrowser = [[NSNetServiceBrowser alloc] init];
|
||||
serviceBrowser.includesPeerToPeer = YES;
|
||||
NSNetServiceBrowser *serviceBrowser;
|
||||
void StartAWDLBrowsing() {
|
||||
if (serviceBrowser == nil) {
|
||||
serviceBrowser = [[NSNetServiceBrowser alloc] init];
|
||||
serviceBrowser.includesPeerToPeer = YES;
|
||||
}
|
||||
[serviceBrowser searchForServicesOfType:@"_yggdrasil._tcp" inDomain:@""];
|
||||
}
|
||||
void StopAWDLBrowsing() {
|
||||
if (serviceBrowser == nil) {
|
||||
return;
|
||||
}
|
||||
[serviceBrowser stop];
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
import "syscall"
|
||||
import "golang.org/x/sys/unix"
|
||||
import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
func (m *multicast) multicastWake() {
|
||||
for _, intf := range m.interfaces() {
|
||||
if intf.Name == "awdl0" {
|
||||
m.core.log.Infoln("Multicast discovery is waking up AWDL")
|
||||
C.WakeUpAWDL()
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
var awdlGoroutineStarted bool
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@ package yggdrasil
|
||||
|
||||
import "syscall"
|
||||
|
||||
func (m *multicast) multicastWake() {
|
||||
func (m *multicast) multicastStarted() {
|
||||
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ package yggdrasil
|
||||
import "syscall"
|
||||
import "golang.org/x/sys/unix"
|
||||
|
||||
func (m *multicast) multicastWake() {
|
||||
func (m *multicast) multicastStarted() {
|
||||
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ package yggdrasil
|
||||
import "syscall"
|
||||
import "golang.org/x/sys/windows"
|
||||
|
||||
func (m *multicast) multicastWake() {
|
||||
func (m *multicast) multicastStarted() {
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user