]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
go-bridge: Add context support for wgSetLogger
authorJason A. Donenfeld <Jason@zx2c4.com>
Thu, 5 Nov 2020 16:14:16 +0000 (17:14 +0100)
committerAndrej Mihajlov <and@mullvad.net>
Wed, 2 Dec 2020 10:08:08 +0000 (11:08 +0100)
Cherry picked cda99bf45c3cb95ca56204549689a0ae91ff4813 from jd/loggerCtx with the fix for wgSetLogger signature in the C header file.

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
wireguard-go-bridge/api-ios.go
wireguard-go-bridge/wireguard.h

index d6eccd8f28c1a8a5ba2980e0e809b4dc01424de0..0f803849b9256038ff584b765c778f2112df08b2 100644 (file)
@@ -7,9 +7,9 @@ package main
 
 // #include <stdlib.h>
 // #include <sys/types.h>
-// static void callLogger(void *func, int level, const char *msg)
+// static void callLogger(void *func, void *ctx, int level, const char *msg)
 // {
-//     ((void(*)(int, const char *))func)(level, msg);
+//     ((void(*)(void *, int, const char *))func)(ctx, level, msg);
 // }
 import "C"
 
@@ -30,6 +30,7 @@ import (
 )
 
 var loggerFunc unsafe.Pointer
+var loggerCtx unsafe.Pointer
 var versionString *C.char
 
 type CLogger struct {
@@ -41,7 +42,7 @@ func (l *CLogger) Write(p []byte) (int, error) {
                return 0, errors.New("No logger initialized")
        }
        message := C.CString(string(p))
-       C.callLogger(loggerFunc, l.level, message)
+       C.callLogger(loggerFunc, loggerCtx, l.level, message)
        C.free(unsafe.Pointer(message))
        return len(p), nil
 }
@@ -66,7 +67,7 @@ func init() {
                                n := runtime.Stack(buf, true)
                                buf[n] = 0
                                if uintptr(loggerFunc) != 0 {
-                                       C.callLogger(loggerFunc, 0, (*C.char)(unsafe.Pointer(&buf[0])))
+                                       C.callLogger(loggerFunc, loggerCtx, 0, (*C.char)(unsafe.Pointer(&buf[0])))
                                }
                        }
                }
@@ -79,7 +80,8 @@ func wgEnableRoaming(enabled bool) {
 }
 
 //export wgSetLogger
-func wgSetLogger(loggerFn uintptr) {
+func wgSetLogger(context, loggerFn uintptr) {
+       loggerCtx = unsafe.Pointer(context)
        loggerFunc = unsafe.Pointer(loggerFn)
 }
 
index 5c30ee91bd36ff1048f23b648b657c942ee0d241..18bf6bd762db9de330b1218b774c6ea2930d94e1 100644 (file)
@@ -10,9 +10,9 @@
 #include <stdint.h>
 #include <stdbool.h>
 
-typedef void(*logger_fn_t)(int level, const char *msg);
+typedef void(*logger_fn_t)(void *context, int level, const char *msg);
 extern void wgEnableRoaming(bool enabled);
-extern void wgSetLogger(logger_fn_t logger_fn);
+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);