Пример #1
0
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'
Пример #2
0
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]
Пример #3
0
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'