summaryrefslogtreecommitdiff
path: root/exports/exports.go
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2022-09-14 13:56:49 +0200
committerjwijenbergh <jeroenwijenbergh@protonmail.com>2022-09-14 13:56:49 +0200
commitda83f54606c9c1d2786d87074ee17ed972d2e1b2 (patch)
tree0be57934f9f467c87576abb0b457fb54b2d25d52 /exports/exports.go
parentfd34e72da8c604517050ada7e883ba982829d985 (diff)
Refactor: Return without json
Diffstat (limited to 'exports/exports.go')
-rw-r--r--exports/exports.go66
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)