summaryrefslogtreecommitdiff
path: root/wrappers/python/src/event.py
diff options
context:
space:
mode:
Diffstat (limited to 'wrappers/python/src/event.py')
-rw-r--r--wrappers/python/src/event.py26
1 files changed, 23 insertions, 3 deletions
diff --git a/wrappers/python/src/event.py b/wrappers/python/src/event.py
index 0e0f5ae..cf1a9d0 100644
--- a/wrappers/python/src/event.py
+++ b/wrappers/python/src/event.py
@@ -2,7 +2,12 @@ from . import VPNStateChange, get_ptr_string
from enum import Enum
from typing import Callable
from .state import State, StateType
-from .server import get_locations, get_servers
+from .server import (
+ get_locations,
+ get_transition_profiles,
+ get_transition_server,
+ get_servers,
+)
EDUVPN_CALLBACK_PROPERTY = "_eduvpn_property_callback"
@@ -16,6 +21,7 @@ def class_state_transition(state: int, state_type: StateType) -> Callable:
return wrapper
+
def convert_data(state: State, data):
if not data:
return None
@@ -25,6 +31,16 @@ def convert_data(state: State, data):
return get_ptr_string(data)
if state is State.ASK_LOCATION:
return get_locations(data)
+ if state is State.ASK_PROFILE:
+ return get_transition_profiles(data)
+ if state in [
+ State.DISCONNECTED,
+ State.DISCONNECTING,
+ State.CONNECTING,
+ State.CONNECTED,
+ ]:
+ return get_transition_server(data)
+
class EventHandler(object):
def __init__(self):
@@ -80,10 +96,14 @@ class EventHandler(object):
for func in self.handlers[(state, state_type)]:
func(other_state, data)
- def run(self, old_state: int, new_state: int, data: str) -> None:
+ def run(
+ self, old_state: int, new_state: int, data: str, convert: bool = True
+ ) -> None:
# First run leave transitions, then enter
# The state is done when the wait event finishes
- converted = convert_data(new_state, data)
+ converted = data
+ if convert:
+ converted = convert_data(new_state, data)
self.run_state(old_state, new_state, StateType.Leave, converted)
self.run_state(new_state, old_state, StateType.Enter, converted)
self.run_state(new_state, old_state, StateType.Wait, converted)