diff options
Diffstat (limited to 'exports/exports.go')
| -rw-r--r-- | exports/exports.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/exports/exports.go b/exports/exports.go index d9ec122..a11c0fa 100644 --- a/exports/exports.go +++ b/exports/exports.go @@ -3,6 +3,7 @@ package main /* #include <stdlib.h> #include "error.h" +#include "server.h" typedef long long int (*ReadRxBytes)(); typedef struct token { @@ -11,6 +12,8 @@ typedef struct token { unsigned long long int expired; } token; +typedef void (*UpdateToken)(const char* name, server* srv, token* tok); + typedef struct configData { const char* config; const char* config_type; @@ -23,6 +26,12 @@ static long long int get_read_rx_bytes(ReadRxBytes read) { return read(); } + +static void update_token(UpdateToken func, const char* name, server* srv, token* tok) +{ + func(name, srv, tok); +} + static int call_callback(PythonCB callback, const char *name, int oldstate, int newstate, void* data) { return callback(name, oldstate, newstate, data); @@ -34,6 +43,8 @@ import ( "time" "unsafe" + "github.com/eduvpn/eduvpn-common/internal/log" + "github.com/eduvpn/eduvpn-common/internal/server" "github.com/eduvpn/eduvpn-common/internal/oauth" "github.com/go-errors/errors" @@ -145,6 +156,28 @@ func Register( return getError(registerErr) } +//export SetTokenUpdater +func SetTokenUpdater(name *C.char, updater C.UpdateToken) *C.error { + nameStr := C.GoString(name) + state, stateErr := GetVPNState(nameStr) + if stateErr != nil { + return getError(stateErr) + } + state.SetTokenUpdater(func(srv server.Server, tok oauth.Token) { + b, err := srv.Base() + if err != nil { + log.Logger.Warningf("No server base found for token updating with error: %v", err) + return + } + cName := C.CString(nameStr) + cSrv := getCPtrServer(state, b) + cTok := cToken(tok) + C.update_token(updater, cName, cSrv, cTok) + FreeString(cName) + }) + return nil +} + //export Deregister func Deregister(name *C.char) *C.error { nameStr := C.GoString(name) @@ -284,6 +317,13 @@ func cConfig(config *client.ConfigData) *C.configData { return cConf } +//export FreeTokens +func FreeTokens(tokens *C.token) { + C.free(unsafe.Pointer(tokens.access)) + C.free(unsafe.Pointer(tokens.refresh)) + C.free(unsafe.Pointer(tokens)) +} + //export FreeConfig func FreeConfig(config *C.configData) { C.free(unsafe.Pointer(config.config)) |
