mirror of
https://github.com/passepartoutvpn/wireguard-apple.git
synced 2025-02-17 13:22:06 +00:00
wireguard-go-bridge: use C string instead of gostring_t
Signed-off-by: Andrej Mihajlov <and@mullvad.net> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
edde27a0a0
commit
30406dec6d
@ -70,7 +70,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
}
|
}
|
||||||
ifnamePtr.deallocate()
|
ifnamePtr.deallocate()
|
||||||
wg_log(.info, message: "Tunnel interface is \(self.ifname ?? "unknown")")
|
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 {
|
if handle < 0 {
|
||||||
wg_log(.error, message: "Starting tunnel failed with wgTurnOn returning \(handle)")
|
wg_log(.error, message: "Starting tunnel failed with wgTurnOn returning \(handle)")
|
||||||
errorNotifier.notify(PacketTunnelProviderError.couldNotStartBackend)
|
errorNotifier.notify(PacketTunnelProviderError.couldNotStartBackend)
|
||||||
@ -146,18 +147,10 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
|
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
if let packetTunnelSettingsGenerator = packetTunnelSettingsGenerator {
|
if let packetTunnelSettingsGenerator = packetTunnelSettingsGenerator {
|
||||||
_ = packetTunnelSettingsGenerator.endpointUapiConfiguration().withGoString { return wgSetConfig(handle, $0) }
|
_ = packetTunnelSettingsGenerator.endpointUapiConfiguration()
|
||||||
|
.withCString { return wgSetConfig(handle, $0) }
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
wgBumpSockets(handle)
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -84,7 +84,7 @@ func wgSetLogger(loggerFn uintptr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//export wgTurnOn
|
//export wgTurnOn
|
||||||
func wgTurnOn(settings string, tunFd int32) int32 {
|
func wgTurnOn(settings *C.char, tunFd int32) int32 {
|
||||||
logger := &device.Logger{
|
logger := &device.Logger{
|
||||||
Debug: log.New(&CLogger{level: 0}, "", 0),
|
Debug: log.New(&CLogger{level: 0}, "", 0),
|
||||||
Info: log.New(&CLogger{level: 1}, "", 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")
|
logger.Info.Println("Attaching to interface")
|
||||||
device := device.NewDevice(tun, logger)
|
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 {
|
if setError != nil {
|
||||||
logger.Error.Println(setError)
|
logger.Error.Println(setError)
|
||||||
return -1
|
return -1
|
||||||
@ -137,12 +137,12 @@ func wgTurnOff(tunnelHandle int32) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//export wgSetConfig
|
//export wgSetConfig
|
||||||
func wgSetConfig(tunnelHandle int32, settings string) int64 {
|
func wgSetConfig(tunnelHandle int32, settings *C.char) int64 {
|
||||||
device, ok := tunnelHandles[tunnelHandle]
|
device, ok := tunnelHandles[tunnelHandle]
|
||||||
if !ok {
|
if !ok {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
err := device.IpcSetOperation(bufio.NewReader(strings.NewReader(settings)))
|
err := device.IpcSetOperation(bufio.NewReader(strings.NewReader(C.GoString(settings))))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
device.Error.Println(err)
|
device.Error.Println(err)
|
||||||
return err.ErrorCode()
|
return err.ErrorCode()
|
||||||
|
@ -10,13 +10,12 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
typedef struct { const char *p; size_t n; } gostring_t;
|
|
||||||
typedef void(*logger_fn_t)(int level, const char *msg);
|
typedef void(*logger_fn_t)(int level, const char *msg);
|
||||||
extern void wgEnableRoaming(bool enabled);
|
extern void wgEnableRoaming(bool enabled);
|
||||||
extern void wgSetLogger(logger_fn_t logger_fn);
|
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 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 char *wgGetConfig(int handle);
|
||||||
extern void wgBumpSockets(int handle);
|
extern void wgBumpSockets(int handle);
|
||||||
extern const char *wgVersion();
|
extern const char *wgVersion();
|
||||||
|
Loading…
Reference in New Issue
Block a user