diff options
| author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-09-14 13:56:49 +0200 |
|---|---|---|
| committer | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-09-14 13:56:49 +0200 |
| commit | da83f54606c9c1d2786d87074ee17ed972d2e1b2 (patch) | |
| tree | 0be57934f9f467c87576abb0b457fb54b2d25d52 /exports/exports.go | |
| parent | fd34e72da8c604517050ada7e883ba982829d985 (diff) | |
Refactor: Return without json
Diffstat (limited to 'exports/exports.go')
| -rw-r--r-- | exports/exports.go | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/exports/exports.go b/exports/exports.go index b4eb909..797a192 100644 --- a/exports/exports.go +++ b/exports/exports.go @@ -1,15 +1,13 @@ package main /* -#include <stdlib.h> - -typedef void (*PythonCB)(const char* name, int oldstate, int newstate, const char* data); +#cgo CFLAGS: -I${SRCDIR}/c +#cgo LDFLAGS: -Wl,-rpath,${SRCDIR}/c +#cgo LDFLAGS: -L${SRCDIR}/c +#cgo LDFLAGS: -lcommon -__attribute__((weak)) -void call_callback(PythonCB callback, const char *name, int oldstate, int newstate, const char* data) -{ - callback(name, oldstate, newstate, data); -} +#include <stdlib.h> +#include "c/common.h" */ import "C" @@ -26,7 +24,28 @@ var P_StateCallbacks map[string]C.PythonCB var VPNStates map[string]*eduvpn.VPNState +func GetStateData( + state *eduvpn.VPNState, + stateID eduvpn.FSMStateID, + data interface{}, +) unsafe.Pointer { + switch stateID { + case eduvpn.STATE_NO_SERVER: + return (unsafe.Pointer)(getTransitionDataServers(state, data)) + case eduvpn.STATE_OAUTH_STARTED: + if converted, ok := data.(string); ok { + return (unsafe.Pointer)(C.CString(converted)) + } + case eduvpn.STATE_ASK_LOCATION: + return (unsafe.Pointer)(getTransitionSecureLocations(data)) + default: + return nil + } + return nil +} + func StateCallback( + state *eduvpn.VPNState, name string, old_state eduvpn.FSMStateID, new_state eduvpn.FSMStateID, @@ -39,18 +58,10 @@ func StateCallback( name_c := C.CString(name) oldState_c := C.int(old_state) newState_c := C.int(new_state) - data_json, jsonErr := json.Marshal(data) - var dataJsonString string - if jsonErr != nil { - // TODO: How to handle error further? Log? - dataJsonString = "{}" - } else { - dataJsonString = string(data_json) - } - data_c := C.CString(dataJsonString) + data_c := GetStateData(state, new_state, data) C.call_callback(P_StateCallback, name_c, oldState_c, newState_c, data_c) C.free(unsafe.Pointer(name_c)) - C.free(unsafe.Pointer(data_c)) + // data_c gets freed by the wrapper } func GetVPNState(name string) (*eduvpn.VPNState, error) { @@ -87,7 +98,7 @@ func Register( nameStr, C.GoString(config_directory), func(old eduvpn.FSMStateID, new eduvpn.FSMStateID, data interface{}) { - StateCallback(nameStr, old, new, data) + StateCallback(state, nameStr, old, new, data) }, debug != 0, ) @@ -150,7 +161,7 @@ func getConfigJSON(config string, configType string) *C.char { } //export RemoveSecureInternet -func RemoveSecureInternet(name *C.char) (*C.char) { +func RemoveSecureInternet(name *C.char) *C.char { nameStr := C.GoString(name) state, stateErr := GetVPNState(nameStr) if stateErr != nil { @@ -161,7 +172,7 @@ func RemoveSecureInternet(name *C.char) (*C.char) { } //export RemoveInstituteAccess -func RemoveInstituteAccess(name *C.char, url *C.char) (*C.char) { +func RemoveInstituteAccess(name *C.char, url *C.char) *C.char { nameStr := C.GoString(name) state, stateErr := GetVPNState(nameStr) if stateErr != nil { @@ -172,7 +183,7 @@ func RemoveInstituteAccess(name *C.char, url *C.char) (*C.char) { } //export RemoveCustomServer -func RemoveCustomServer(name *C.char, url *C.char) (*C.char) { +func RemoveCustomServer(name *C.char, url *C.char) *C.char { nameStr := C.GoString(name) state, stateErr := GetVPNState(nameStr) if stateErr != nil { @@ -218,17 +229,6 @@ func GetConfigCustomServer(name *C.char, url *C.char, forceTCP C.int) (*C.char, return getConfigJSON(config, configType), C.CString(ErrorToString(configErr)) } -//export GetDiscoOrganizations -func GetDiscoOrganizations(name *C.char) (*C.char, *C.char) { - nameStr := C.GoString(name) - state, stateErr := GetVPNState(nameStr) - if stateErr != nil { - return nil, C.CString(ErrorToString(stateErr)) - } - organizations, organizationsErr := state.GetDiscoOrganizations() - return C.CString(organizations), C.CString(ErrorToString(organizationsErr)) -} - //export GetDiscoServers func GetDiscoServers(name *C.char) (*C.char, *C.char) { nameStr := C.GoString(name) |
