summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2024-02-06 14:23:26 +0100
committerJeroen Wijenbergh <46386452+jwijenbergh@users.noreply.github.com>2024-02-19 14:15:07 +0100
commit900b5acf1445eab22fc2833828abd5649eb9f12a (patch)
tree1d85e8b7b45a0d41d7d588de3e9c2fd47d7a5ce6
parentd3e1494a5bb9a71d30b4f0d0d48683343a26f330 (diff)
Exports + Python: New API for Token Getter and Setter
First argument is the server id and type instead of a single argument with JSON
-rw-r--r--exports/exports.go36
-rw-r--r--wrappers/python/eduvpn_common/main.py8
-rw-r--r--wrappers/python/eduvpn_common/types.py4
3 files changed, 19 insertions, 29 deletions
diff --git a/exports/exports.go b/exports/exports.go
index 919b9c8..58b12b4 100644
--- a/exports/exports.go
+++ b/exports/exports.go
@@ -21,8 +21,8 @@ typedef long long int (*ReadRxBytes)();
typedef int (*StateCB)(int oldstate, int newstate, void* data);
-typedef void (*TokenGetter)(const char* server, char* out, size_t len);
-typedef void (*TokenSetter)(const char* server, const char* tokens);
+typedef void (*TokenGetter)(const char* server_id, int server_type, char* out, size_t len);
+typedef void (*TokenSetter)(const char* server_id, int server_type, const char* tokens);
static long long int get_read_rx_bytes(ReadRxBytes read)
{
@@ -32,13 +32,13 @@ static int call_callback(StateCB callback, int oldstate, int newstate, void* dat
{
return callback(oldstate, newstate, data);
}
-static void call_token_getter(TokenGetter getter, const char* server, char* out, size_t len)
+static void call_token_getter(TokenGetter getter, const char* server_id, int server_type, char* out, size_t len)
{
- getter(server, out, len);
+ getter(server_id, server_type, out, len);
}
-static void call_token_setter(TokenSetter setter, const char* server, const char* tokens)
+static void call_token_setter(TokenSetter setter, const char* server_id, int server_type, const char* tokens)
{
- setter(server, tokens);
+ setter(server_id, server_type, tokens);
}
*/
import "C"
@@ -983,36 +983,26 @@ func SetTokenHandler(getter C.TokenGetter, setter C.TokenSetter) *C.char {
if stateErr != nil {
return getCError(stateErr)
}
- state.TokenSetter = func(c srvtypes.Current, t srvtypes.Tokens) {
- cJSON, err := getReturnData(c)
- if err != nil {
- log.Logger.Warningf("failed to get current server for setting tokens in exports: %v", err)
- return
- }
+ state.TokenSetter = func(sid string, stype srvtypes.Type, t srvtypes.Tokens) {
tJSON, err := getReturnData(t)
if err != nil {
log.Logger.Warningf("failed to get tokens for setting tokens in exports: %v", err)
return
}
- c1 := C.CString(cJSON)
+ c1 := C.CString(sid)
c2 := C.CString(tJSON)
- C.call_token_setter(setter, c1, c2)
+ C.call_token_setter(setter, c1, C.int(stype), c2)
FreeString(c1)
FreeString(c2)
}
- state.TokenGetter = func(c srvtypes.Current) *srvtypes.Tokens {
- cJSON, err := getReturnData(c)
- if err != nil {
- log.Logger.Warningf("failed to get current server for getting tokens in exports: %v", err)
- return nil
- }
- c1 := C.CString(cJSON)
+ state.TokenGetter = func(sid string, stype srvtypes.Type) *srvtypes.Tokens {
// create an output buffer with size 2048
// In my testing tokens seem to be ~1033 bytes marshalled as JSON
d := make([]byte, 2048)
- C.call_token_getter(getter, c1, (*C.char)(unsafe.Pointer(&d[0])), C.size_t(len(d)))
+ c1 := C.CString(sid)
+ C.call_token_getter(getter, c1, C.int(stype), (*C.char)(unsafe.Pointer(&d[0])), C.size_t(len(d)))
FreeString(c1)
// get null pointer index as unmarshalling wants it without
@@ -1029,7 +1019,7 @@ func SetTokenHandler(getter C.TokenGetter, setter C.TokenSetter) *C.char {
}
var gotT srvtypes.Tokens
- err = json.Unmarshal(d[:null], &gotT)
+ err := json.Unmarshal(d[:null], &gotT)
if err != nil {
log.Logger.Warningf("failed to get JSON data for getting tokens in exports: %v", err)
return nil
diff --git a/wrappers/python/eduvpn_common/main.py b/wrappers/python/eduvpn_common/main.py
index 2c5165f..798c9a4 100644
--- a/wrappers/python/eduvpn_common/main.py
+++ b/wrappers/python/eduvpn_common/main.py
@@ -344,23 +344,23 @@ global_object: Optional[EduVPN] = None
@TokenSetter
-def token_setter(server: ctypes.c_char_p, tokens: ctypes.c_char_p):
+def token_setter(server_id: ctypes.c_char_p, server_type: ctypes.c_int, tokens: ctypes.c_char_p):
global global_object
if global_object is None:
return
if global_object.token_setter is None:
return 0
- global_object.token_setter(server.decode(), tokens.decode())
+ global_object.token_setter(server_id.decode(), server_type, tokens.decode())
@TokenGetter
-def token_getter(server: ctypes.c_char_p, buf: ctypes.c_char_p, size: ctypes.c_size_t):
+def token_getter(server_id: ctypes.c_char_p, server_type: ctypes.c_int, buf: ctypes.c_char_p, size: ctypes.c_size_t):
global global_object
if global_object is None:
return
if global_object.token_getter is None:
return
- got = global_object.token_getter(server.decode())
+ got = global_object.token_getter(server_id.decode(), server_type)
if got is None:
return
diff --git a/wrappers/python/eduvpn_common/types.py b/wrappers/python/eduvpn_common/types.py
index f1be42c..e2498b3 100644
--- a/wrappers/python/eduvpn_common/types.py
+++ b/wrappers/python/eduvpn_common/types.py
@@ -35,8 +35,8 @@ class BoolError(Structure):
# The type for a Go state change callback
VPNStateChange = CFUNCTYPE(c_int, c_int, c_int, c_char_p)
ReadRxBytes = CFUNCTYPE(c_ulonglong)
-TokenGetter = CFUNCTYPE(c_void_p, c_char_p, POINTER(c_char), c_size_t)
-TokenSetter = CFUNCTYPE(c_void_p, c_char_p, c_char_p)
+TokenGetter = CFUNCTYPE(c_void_p, c_char_p, c_int, POINTER(c_char), c_size_t)
+TokenSetter = CFUNCTYPE(c_void_p, c_char_p, c_int, c_char_p)
def encode_args(args: List[Any], types: List[Any]) -> Iterator[Any]: