]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
wireguard-go-bridge: use C string instead of gostring_t
authorAndrej Mihajlov <and@mullvad.net>
Fri, 7 Feb 2020 11:31:42 +0000 (12:31 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 7 Feb 2020 21:35:57 +0000 (22:35 +0100)
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
wireguard-go-bridge/api-ios.go
wireguard-go-bridge/wireguard.h

index f8d87d731cfcf4562fc6e2210465d0b035a08a87..fc93630abcced0861f4b4f75e51603f81fd14469 100644 (file)
@@ -70,7 +70,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
                 }
                 ifnamePtr.deallocate()
                 wg_log(.info, message: "Tunnel interface is \(self.ifname ?? "unknown")")
-                let handle = self.packetTunnelSettingsGenerator!.uapiConfiguration().withGoString { return wgTurnOn($0, fileDescriptor) }
+                let handle = self.packetTunnelSettingsGenerator!.uapiConfiguration()
+                    .withCString { return wgTurnOn($0, fileDescriptor) }
                 if handle < 0 {
                     wg_log(.error, message: "Starting tunnel failed with wgTurnOn returning \(handle)")
                     errorNotifier.notify(PacketTunnelProviderError.couldNotStartBackend)
@@ -146,18 +147,10 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
 
         #if os(iOS)
         if let packetTunnelSettingsGenerator = packetTunnelSettingsGenerator {
-            _ = packetTunnelSettingsGenerator.endpointUapiConfiguration().withGoString { return wgSetConfig(handle, $0) }
+            _ = packetTunnelSettingsGenerator.endpointUapiConfiguration()
+                .withCString { return wgSetConfig(handle, $0) }
         }
         #endif
         wgBumpSockets(handle)
     }
 }
-
-extension String {
-    func withGoString<R>(_ call: (gostring_t) -> R) -> R {
-        func helper(_ pointer: UnsafePointer<Int8>?, _ call: (gostring_t) -> R) -> R {
-            return call(gostring_t(p: pointer, n: utf8.count))
-        }
-        return helper(self, call)
-    }
-}
index 55e1b0daa99c08eea91defbd962792621047d66d..93dd323df7a279cbc1bc794e78fc8079c01114f7 100644 (file)
@@ -84,7 +84,7 @@ func wgSetLogger(loggerFn uintptr) {
 }
 
 //export wgTurnOn
-func wgTurnOn(settings string, tunFd int32) int32 {
+func wgTurnOn(settings *C.char, tunFd int32) int32 {
        logger := &device.Logger{
                Debug: log.New(&CLogger{level: 0}, "", 0),
                Info:  log.New(&CLogger{level: 1}, "", 0),
@@ -104,7 +104,7 @@ func wgTurnOn(settings string, tunFd int32) int32 {
        logger.Info.Println("Attaching to interface")
        device := device.NewDevice(tun, logger)
 
-       setError := device.IpcSetOperation(bufio.NewReader(strings.NewReader(settings)))
+       setError := device.IpcSetOperation(bufio.NewReader(strings.NewReader(C.GoString(settings))))
        if setError != nil {
                logger.Error.Println(setError)
                return -1
@@ -137,12 +137,12 @@ func wgTurnOff(tunnelHandle int32) {
 }
 
 //export wgSetConfig
-func wgSetConfig(tunnelHandle int32, settings string) int64 {
+func wgSetConfig(tunnelHandle int32, settings *C.char) int64 {
        device, ok := tunnelHandles[tunnelHandle]
        if !ok {
                return 0
        }
-       err := device.IpcSetOperation(bufio.NewReader(strings.NewReader(settings)))
+       err := device.IpcSetOperation(bufio.NewReader(strings.NewReader(C.GoString(settings))))
        if err != nil {
                device.Error.Println(err)
                return err.ErrorCode()
index e8e451b5e33fe5631e6cadbf7a79511dd2462aa9..5c30ee91bd36ff1048f23b648b657c942ee0d241 100644 (file)
 #include <stdint.h>
 #include <stdbool.h>
 
-typedef struct { const char *p; size_t n; } gostring_t;
 typedef void(*logger_fn_t)(int level, const char *msg);
 extern void wgEnableRoaming(bool enabled);
 extern void wgSetLogger(logger_fn_t logger_fn);
-extern int wgTurnOn(gostring_t settings, int32_t tun_fd);
+extern int wgTurnOn(const char *settings, int32_t tun_fd);
 extern void wgTurnOff(int handle);
-extern int64_t wgSetConfig(int handle, gostring_t settings);
+extern int64_t wgSetConfig(int handle, const char *settings);
 extern char *wgGetConfig(int handle);
 extern void wgBumpSockets(int handle);
 extern const char *wgVersion();