summaryrefslogtreecommitdiff
path: root/wrappers/python/src/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'wrappers/python/src/__init__.py')
-rw-r--r--wrappers/python/src/__init__.py36
1 files changed, 31 insertions, 5 deletions
diff --git a/wrappers/python/src/__init__.py b/wrappers/python/src/__init__.py
index c028f09..c96a1b2 100644
--- a/wrappers/python/src/__init__.py
+++ b/wrappers/python/src/__init__.py
@@ -2,6 +2,7 @@ from ctypes import *
from collections import defaultdict
import pathlib
import platform
+from typing import Tuple
_lib_prefixes = defaultdict(
lambda: "lib",
@@ -30,15 +31,31 @@ class DataError(Structure):
_fields_ = [("data", c_void_p), ("error", c_void_p)]
+class MultipleDataError(Structure):
+ _fields_ = [("data", c_void_p), ("other_data", c_void_p), ("error", c_void_p)]
+
+
VPNStateChange = CFUNCTYPE(None, c_char_p, c_char_p, c_char_p)
# Exposed functions
# We have to use c_void_p instead of c_char_p to free it properly
# See https://stackoverflow.com/questions/13445568/python-ctypes-how-to-free-memory-getting-invalid-pointer-error
-lib.GetConnectConfig.argtypes, lib.GetConnectConfig.restype = [c_char_p, c_char_p, c_int, c_int], DataError
+lib.GetConnectConfig.argtypes, lib.GetConnectConfig.restype = [
+ c_char_p,
+ c_char_p,
+ c_int,
+ c_int,
+], MultipleDataError
lib.Deregister.argtypes, lib.Deregister.restype = [c_char_p], c_void_p
-lib.Register.argtypes, lib.Register.restype = [c_char_p, c_char_p, VPNStateChange, c_int], c_void_p
-lib.GetOrganizationsList.argtypes, lib.GetOrganizationsList.restype = [c_char_p], DataError
+lib.Register.argtypes, lib.Register.restype = [
+ c_char_p,
+ c_char_p,
+ VPNStateChange,
+ c_int,
+], c_void_p
+lib.GetOrganizationsList.argtypes, lib.GetOrganizationsList.restype = [
+ c_char_p
+], DataError
lib.GetServersList.argtypes, lib.GetServersList.restype = [c_char_p], DataError
lib.CancelOAuth.argtypes, lib.CancelOAuth.restype = [c_char_p], c_void_p
lib.SetProfileID.argtypes, lib.SetProfileID.restype = [c_char_p, c_char_p], c_void_p
@@ -47,7 +64,7 @@ lib.SetDisconnected.argtypes, lib.SetDisconnected.restype = [c_char_p], c_void_p
lib.FreeString.argtypes, lib.FreeString.restype = [c_void_p], None
-def GetPtrString(ptr):
+def GetPtrString(ptr: c_void_p) -> str:
if ptr:
string = cast(ptr, c_char_p).value
lib.FreeString(ptr)
@@ -56,7 +73,16 @@ def GetPtrString(ptr):
return ""
-def GetDataError(data_error):
+def GetDataError(data_error: DataError) -> Tuple[str, str]:
data = GetPtrString(data_error.data)
error = GetPtrString(data_error.error)
return data, error
+
+
+def GetMultipleDataError(
+ multiple_data_error: MultipleDataError,
+) -> Tuple[str, str, str]:
+ data = GetPtrString(multiple_data_error.data)
+ other_data = GetPtrString(multiple_data_error.other_data)
+ error = GetPtrString(multiple_data_error.error)
+ return data, other_data, error