class DtlsServer(Server): def __init__(self, psk_identity, psk_key, listen_port=0, debug=False): self.psk_identity = psk_identity self.psk_key = psk_key self.server_socket = None self.debug = debug super().__init__(listen_port) def connect(self, remote_addr: Tuple[str, int]) -> None: from pymbedtls import Socket self.close() try: self.server_socket = None self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = Socket(self.socket, self.psk_identity, self.psk_key, self.debug) self.socket.connect(remote_addr) except: self.close() raise def close(self): super().close() if self.server_socket: self.server_socket.close() self.server_socket = None def reset(self, listen_port=None) -> None: if self.server_socket and listen_port is None: super().close() else: try: from pymbedtls import ServerSocket super().reset(listen_port) self.server_socket = ServerSocket(self.socket, self.psk_identity, self.psk_key, self.debug) self.socket = None except ImportError: raise ImportError( 'could not import pymbedtls! run ' '`python3 setup.py install --user` in the ' 'pymbedtls/ subdirectory of nsh-lwm2m submodule ' 'or export PYTHONPATH properly') def listen(self, timeout_s: float = -1) -> None: with _override_timeout(self.server_socket, timeout_s): self.socket = self.server_socket.accept() if self.socket_timeout is not None: self.socket.settimeout(self.socket_timeout) def get_listen_port(self) -> int: return self.server_socket.getsockname()[1] def security_mode(self): return 'psk'
def connect(self, remote_addr: Tuple[str, int]) -> None: from pymbedtls import Socket self.close() try: self.server_socket = None self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = Socket(self.socket, self.psk_identity, self.psk_key, self.debug) self.socket.connect(remote_addr) except: self.close() raise
class DtlsServer(Server): def __init__(self, psk_identity, psk_key, listen_port=0): self.psk_identity = psk_identity self.psk_key = psk_key self.server_socket = None super().__init__(listen_port) def connect(self, remote_addr: Tuple[str, int]) -> None: with _enable_native_lib_import_from_script_dir(): from pymbedtls import Socket self.close() try: self.server_socket = None self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = Socket(self.socket, self.psk_identity, self.psk_key) self.socket.connect(remote_addr) except: self.close() raise def close(self): super().close() if self.server_socket: self.server_socket.close() self.server_socket = None def reset(self, listen_port=None) -> None: try: with _enable_native_lib_import_from_script_dir(): from pymbedtls import ServerSocket super().reset(listen_port) self.server_socket = ServerSocket(self.socket, self.psk_identity, self.psk_key) self.socket = None except ImportError: raise ImportError('could not import pymbedtls! run ' '`python3 setup.py install --user` in the ' 'pymbedtls/ subdirectory of nsh-lwm2m submodule') def listen(self, timeout_s: float = -1) -> None: with _override_timeout(self.server_socket, timeout_s): self.socket = self.server_socket.accept() if self.socket_timeout is not None: self.socket.settimeout(self.socket_timeout) def get_listen_port(self) -> int: return self.server_socket.getsockname()[1]
def connect(self, remote_addr: Tuple[str, int]) -> None: with _enable_native_lib_import_from_script_dir(): from pymbedtls import Socket self.close() try: self.server_socket = None self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = Socket(self.socket, self.psk_identity, self.psk_key) self.socket.connect(remote_addr) except: self.close() raise
class DtlsServer(Server): def __init__(self, psk_identity, psk_key, listen_port=0, debug=False, use_ipv6=False): self.psk_identity = psk_identity self.psk_key = psk_key self.server_socket = None self.debug = debug super().__init__(listen_port, use_ipv6) def connect(self, remote_addr: Tuple[str, int]) -> None: from pymbedtls import Socket self.close() try: self.server_socket = None self.socket = socket.socket(self.family, socket.SOCK_DGRAM) self.socket = Socket(self.socket, self.psk_identity, self.psk_key, self.debug) self.socket.connect(remote_addr) except: self.close() raise @property def _raw_udp_socket(self) -> None: return self.socket.py_socket @_raw_udp_socket.setter def _raw_udp_socket(self, value) -> None: self.socket.py_socket = value def _fake_close(self): super()._fake_close() # we cannot use the same fake remote endpoint as for the "client" socket # because BSD does not allow two sockets with the same local/remote # endpoints. For details, see comment in Server._fake_close. self.server_socket.connect(('', 2)) def _fake_unclose(self): super()._fake_unclose() self.server_socket = _disconnect_socket(self.server_socket, self.family) def close(self): super().close() if self.server_socket: self.server_socket.close() self.server_socket = None def reset(self, listen_port=None) -> None: if self.server_socket and listen_port is None: super().close() else: try: from pymbedtls import ServerSocket super().reset(listen_port) self.server_socket = ServerSocket(self.socket, self.psk_identity, self.psk_key, self.debug) self.socket = None except ImportError: raise ImportError( 'could not import pymbedtls! run ' '`python3 setup.py install --user` in the ' 'pymbedtls/ subdirectory of nsh-lwm2m submodule ' 'or export PYTHONPATH properly') def listen(self, timeout_s: float = -1) -> None: with _override_timeout(self.server_socket, timeout_s): self.socket = self.server_socket.accept() if self.socket_timeout is not None: self.socket.settimeout(self.socket_timeout) def get_listen_port(self) -> int: return self.server_socket.getsockname()[1] def security_mode(self): return 'psk'