diff options
Diffstat (limited to 'wrappers/python/eduvpn_common')
| -rw-r--r-- | wrappers/python/eduvpn_common/loader.py | 31 | ||||
| -rw-r--r-- | wrappers/python/eduvpn_common/main.py | 44 | ||||
| -rw-r--r-- | wrappers/python/eduvpn_common/types.py | 1 |
3 files changed, 75 insertions, 1 deletions
diff --git a/wrappers/python/eduvpn_common/loader.py b/wrappers/python/eduvpn_common/loader.py index 888b53f..d902453 100644 --- a/wrappers/python/eduvpn_common/loader.py +++ b/wrappers/python/eduvpn_common/loader.py @@ -6,6 +6,7 @@ from eduvpn_common.types import ( BoolError, DataError, HandlerError, + ProxySetup, ReadRxBytes, RefreshList, TokenGetter, @@ -131,3 +132,33 @@ def initialize_functions(lib: CDLL) -> None: ], BoolError, ) + lib.NewProxyguard.argtypes, lib.NewProxyguard.restype = ( + [ + c_int, + c_int, + c_int, + c_char_p, + ProxySetup, + ], + HandlerError, + ) + lib.ProxyguardRestart.argtypes, lib.ProxyguardRestart.restype = ( + [ + c_int, + ], + c_char_p, + ) + lib.ProxyguardTunnel.argtypes, lib.ProxyguardTunnel.restype = ( + [ + c_int, + c_int, + c_int, + ], + c_char_p, + ) + lib.ProxyguardPeerIPs.argtypes, lib.ProxyguardPeerIPs.restype = ( + [ + c_int, + ], + DataError, + ) diff --git a/wrappers/python/eduvpn_common/main.py b/wrappers/python/eduvpn_common/main.py index 2bd221d..e63ea92 100644 --- a/wrappers/python/eduvpn_common/main.py +++ b/wrappers/python/eduvpn_common/main.py @@ -1,12 +1,13 @@ import ctypes import json from enum import IntEnum -from typing import Any, Callable, Iterator, Optional +from typing import Any, Callable, Iterator, List, Optional from eduvpn_common.event import EventHandler from eduvpn_common.loader import initialize_functions, load_lib from eduvpn_common.state import State from eduvpn_common.types import ( + ProxySetup, ReadRxBytes, RefreshList, TokenGetter, @@ -19,6 +20,29 @@ from eduvpn_common.types import ( global_object = None +class Proxyguard(object): + def __init__(self, parent, handler): + self.parent = parent + self.handler = handler + + def tunnel(self, wglisten: int): + tunnel_err = self.parent.go_cookie_function(self.parent.lib.ProxyguardTunnel, self.handler, wglisten) + if tunnel_err: + forwardError(tunnel_err) + + @property + def peer_ips(self) -> List[str]: + peer_ips, peer_ips_err = self.parent.go_function(self.parent.lib.ProxyguardPeerIPs, self.handler) + if peer_ips_err: + forwardError(peer_ips_err) + return json.loads(peer_ips) + + def restart(self): + restart_err = self.parent.go_function(self.parent.lib.ProxyguardRestart, self.handler) + if restart_err: + forwardError(restart_err) + + class WrappedError(Exception): def __init__(self, translations, language, misc): self.translations = translations @@ -350,6 +374,24 @@ class EduVPN(object): forwardError(dropped_err) return dropped + def new_proxyguard( + self, + listen_port: int, + tcp_source_port: int, + peer: str, + setup: ProxySetup, + ) -> Proxyguard: + proxy, proxy_err = self.go_cookie_function( + self.lib.NewProxyguard, + listen_port, + tcp_source_port, + peer, + setup, + ) + if proxy_err: + forwardError(proxy_err) + return Proxyguard(self, proxy) + def cancel(self): self.jar.cancel() diff --git a/wrappers/python/eduvpn_common/types.py b/wrappers/python/eduvpn_common/types.py index 999fbdd..5e23d61 100644 --- a/wrappers/python/eduvpn_common/types.py +++ b/wrappers/python/eduvpn_common/types.py @@ -45,6 +45,7 @@ class BoolError(Structure): # The type for a Go state change callback VPNStateChange = CFUNCTYPE(c_int, c_int, c_int, c_char_p) +ProxySetup = CFUNCTYPE(c_void_p, c_int) ReadRxBytes = CFUNCTYPE(c_ulonglong) RefreshList = CFUNCTYPE(c_void_p) TokenGetter = CFUNCTYPE(c_void_p, c_char_p, c_int, POINTER(c_char), c_size_t) |
