diff --git a/Sources/WireGuardKit/WireGuardAdapter.swift b/Sources/WireGuardKit/WireGuardAdapter.swift index f2e4040..6c2e956 100644 --- a/Sources/WireGuardKit/WireGuardAdapter.swift +++ b/Sources/WireGuardKit/WireGuardAdapter.swift @@ -152,10 +152,6 @@ public class WireGuardAdapter { return } - #if os(macOS) - wgEnableRoaming(true) - #endif - let networkMonitor = NWPathMonitor() networkMonitor.pathUpdateHandler = { [weak self] path in self?.didReceivePathUpdate(path: path) @@ -238,6 +234,9 @@ public class WireGuardAdapter { self.logEndpointResolutionResults(resolutionResults) wgSetConfig(handle, wgConfig) + #if os(iOS) + wgDisableSomeRoamingForBrokenMobileSemantics(handle) + #endif self.state = .started(handle, settingsGenerator) @@ -346,11 +345,13 @@ public class WireGuardAdapter { } let handle = wgTurnOn(wgConfig, tunnelFileDescriptor) - if handle >= 0 { - return handle - } else { + if handle < 0 { throw WireGuardAdapterError.startWireGuardBackend(handle) } + #if os(iOS) + wgDisableSomeRoamingForBrokenMobileSemantics(handle) + #endif + return handle } /// Resolves the hostnames in the given tunnel configuration and return settings generator. @@ -398,6 +399,7 @@ public class WireGuardAdapter { self.logEndpointResolutionResults(resolutionResults) wgSetConfig(handle, wgConfig) + wgDisableSomeRoamingForBrokenMobileSemantics(handle) wgBumpSockets(handle) } else { self.logHandler(.info, "Connectivity offline, pausing backend.") diff --git a/Sources/WireGuardKitGo/api-ios.go b/Sources/WireGuardKitGo/api-ios.go index 0f80384..eaadea1 100644 --- a/Sources/WireGuardKitGo/api-ios.go +++ b/Sources/WireGuardKitGo/api-ios.go @@ -56,7 +56,6 @@ var tunnelHandles = make(map[int32]tunnelHandle) func init() { versionString = C.CString(device.WireGuardGoVersion) - device.RoamingDisabled = true signals := make(chan os.Signal) signal.Notify(signals, unix.SIGUSR2) go func() { @@ -74,11 +73,6 @@ func init() { }() } -//export wgEnableRoaming -func wgEnableRoaming(enabled bool) { - device.RoamingDisabled = !enabled -} - //export wgSetLogger func wgSetLogger(context, loggerFn uintptr) { loggerCtx = unsafe.Pointer(context) @@ -149,14 +143,17 @@ func wgTurnOff(tunnelHandle int32) { //export wgSetConfig func wgSetConfig(tunnelHandle int32, settings *C.char) int64 { - device, ok := tunnelHandles[tunnelHandle] + dev, ok := tunnelHandles[tunnelHandle] if !ok { return 0 } - err := device.IpcSetOperation(bufio.NewReader(strings.NewReader(C.GoString(settings)))) + err := dev.IpcSetOperation(bufio.NewReader(strings.NewReader(C.GoString(settings)))) if err != nil { - device.Error.Println(err) - return err.ErrorCode() + dev.Error.Println(err) + if ipcErr, ok := err.(*device.IPCError); ok { + return ipcErr.ErrorCode() + } + return -1 } return 0 } @@ -187,6 +184,15 @@ func wgBumpSockets(tunnelHandle int32) { device.SendKeepalivesToPeersWithCurrentKeypair() } +//export wgDisableSomeRoamingForBrokenMobileSemantics +func wgDisableSomeRoamingForBrokenMobileSemantics(tunnelHandle int32) { + device, ok := tunnelHandles[tunnelHandle] + if !ok { + return + } + device.DisableSomeRoamingForBrokenMobileSemantics() +} + //export wgVersion func wgVersion() *C.char { return versionString diff --git a/Sources/WireGuardKitGo/go.mod b/Sources/WireGuardKitGo/go.mod index eddf20c..7eaab21 100644 --- a/Sources/WireGuardKitGo/go.mod +++ b/Sources/WireGuardKitGo/go.mod @@ -3,8 +3,8 @@ module golang.zx2c4.com/wireguard/ios go 1.13 require ( - golang.org/x/crypto v0.0.0-20200117160349-530e935923ad // indirect - golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa // indirect - golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 - golang.zx2c4.com/wireguard v0.0.20200121 + golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 // indirect + golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 // indirect + golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e + golang.zx2c4.com/wireguard v0.0.20201118 ) diff --git a/Sources/WireGuardKitGo/go.sum b/Sources/WireGuardKitGo/go.sum index 74b3b28..3f4e59c 100644 --- a/Sources/WireGuardKitGo/go.sum +++ b/Sources/WireGuardKitGo/go.sum @@ -1,22 +1,24 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc h1:c0o/qxkaO2LF5t6fQrT4b5hzyggAkLLlCUjqfRxd8Q4= -golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200117160349-530e935923ad h1:Jh8cai0fqIK+f6nG0UgPW5wFk8wmiMhM3AyciDBdtQg= -golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604= +golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20191003171128-d98b1b443823 h1:Ypyv6BNJh07T1pUSrehkLemqPKXhus2MkfktJ91kRh4= -golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 h1:lwlPPsmjDKK0J6eG6xDWd5XPehI0R024zxjDnw3esPA= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191003212358-c178f38b412c h1:6Zx7DRlKXf79yfxuQ/7GqV3w2y7aDsk6bGg0MzF5RVU= -golang.org/x/sys v0.0.0-20191003212358-c178f38b412c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201117222635-ba5294a509c7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e h1:AyodaIpKjppX+cBfTASF2E1US3H2JFBj920Ot3rtDjs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.zx2c4.com/wireguard v0.0.20200121 h1:vcswa5Q6f+sylDfjqyrVNNrjsFUUbPsgAQTBCAg/Qf8= -golang.zx2c4.com/wireguard v0.0.20200121/go.mod h1:P2HsVp8SKwZEufsnezXZA4GRX/T49/HlU7DGuelXsU4= +golang.zx2c4.com/wireguard v0.0.20201118 h1:QL8y2C7uO8T6z1GY+UX/hSeWiYEBurQkXjOTRFtCvXU= +golang.zx2c4.com/wireguard v0.0.20201118/go.mod h1:Dz+cq5bnrai9EpgYj4GDof/+qaGzbRWbeaAOs1bUYa0= diff --git a/Sources/WireGuardKitGo/wireguard.h b/Sources/WireGuardKitGo/wireguard.h index 9da8cef..b49464e 100644 --- a/Sources/WireGuardKitGo/wireguard.h +++ b/Sources/WireGuardKitGo/wireguard.h @@ -11,13 +11,13 @@ #include typedef void(*logger_fn_t)(void *context, int level, const char *msg); -extern void wgEnableRoaming(bool enabled); extern void wgSetLogger(void *context, logger_fn_t logger_fn); extern int wgTurnOn(const char *settings, int32_t tun_fd); extern void wgTurnOff(int handle); extern int64_t wgSetConfig(int handle, const char *settings); extern char *wgGetConfig(int handle); extern void wgBumpSockets(int handle); +extern void wgDisableSomeRoamingForBrokenMobileSemantics(int handle); extern const char *wgVersion(); #endif