diff options
| author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-08-19 16:32:35 +0200 |
|---|---|---|
| committer | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-08-19 16:32:35 +0200 |
| commit | d8c7f962e4fe2d4a46f0aeb1c9d9a371d5e41ee0 (patch) | |
| tree | d98c682b31cccb975483111e5b817d5c8d029838 /exports | |
| parent | f81d05226fe61b697baa91e926dd86efad9d8084 (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.go | 29 |
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)) |
