summaryrefslogtreecommitdiff
path: root/exports
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2022-08-19 16:32:35 +0200
committerjwijenbergh <jeroenwijenbergh@protonmail.com>2022-08-19 16:32:35 +0200
commitd8c7f962e4fe2d4a46f0aeb1c9d9a371d5e41ee0 (patch)
treed98c682b31cccb975483111e5b817d5c8d029838 /exports
parentf81d05226fe61b697baa91e926dd86efad9d8084 (diff)
State + FSM: Properly handle the disconnect flow
- /disconnect is now called - A new state is added (DISCONNECTING) that waits for the disconnect to complete - A helper function is exposed (InFSMState) that can be used by clients to see in which state they are in
Diffstat (limited to 'exports')
-rw-r--r--exports/exports.go29
1 files changed, 27 insertions, 2 deletions
diff --git a/exports/exports.go b/exports/exports.go
index e0e8464..3ebd7f0 100644
--- a/exports/exports.go
+++ b/exports/exports.go
@@ -26,7 +26,7 @@ var P_StateCallbacks map[string]C.PythonCB
var VPNStates map[string]*eduvpn.VPNState
-func StateCallback(name string, old_state eduvpn.VPNStateID, new_state eduvpn.VPNStateID, data interface{}) {
+func StateCallback(name string, old_state eduvpn.StateID, new_state eduvpn.StateID, data interface{}) {
P_StateCallback, exists := P_StateCallbacks[name]
if !exists || P_StateCallback == nil {
return
@@ -73,7 +73,7 @@ func Register(name *C.char, config_directory *C.char, stateCallback C.PythonCB,
}
VPNStates[nameStr] = state
P_StateCallbacks[nameStr] = stateCallback
- registerErr := state.Register(nameStr, C.GoString(config_directory), func(old eduvpn.VPNStateID, new eduvpn.VPNStateID, data interface{}) {
+ registerErr := state.Register(nameStr, C.GoString(config_directory), func(old eduvpn.StateID, new eduvpn.StateID, data interface{}) {
StateCallback(nameStr, old, new, data)
}, debug != 0)
@@ -254,6 +254,17 @@ func SetDisconnected(name *C.char) *C.char {
return C.CString(ErrorToString(setDisconnectedErr))
}
+//export SetDisconnecting
+func SetDisconnecting(name *C.char) *C.char {
+ nameStr := C.GoString(name)
+ state, stateErr := GetVPNState(nameStr)
+ if stateErr != nil {
+ return C.CString(ErrorToString(stateErr))
+ }
+ setDisconnectingErr := state.SetDisconnecting()
+ return C.CString(ErrorToString(setDisconnectingErr))
+}
+
//export SetConnecting
func SetConnecting(name *C.char) *C.char {
nameStr := C.GoString(name)
@@ -301,6 +312,20 @@ func ShouldRenewButton(name *C.char) C.int {
return C.int(0)
}
+//export InFSMState
+func InFSMState(name *C.char, checkState C.int) C.int {
+ nameStr := C.GoString(name)
+ state, stateErr := GetVPNState(nameStr)
+ if stateErr != nil {
+ return C.int(0)
+ }
+ inStateBool := state.InFSMState(eduvpn.StateID(checkState))
+ if inStateBool {
+ return C.int(1)
+ }
+ return C.int(0)
+}
+
//export FreeString
func FreeString(addr *C.char) {
C.free(unsafe.Pointer(addr))