Exemplo n.º 1
0
            def do(local_address, evt):
                while not self.__event.isSet():
                    devices = []
                    try:
                        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                        sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,
                                        1)
                        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,
                                        1)
                        sock.settimeout(self.__interval)
                        sock.bind((local_address, 0))
                        sock.sendto(_discover.DISCOVERY_QUERY[4:],
                                    (_discover.QUERY_TARGET, 9999))

                    except socket.error:
                        continue
                    else:
                        try:
                            while True:
                                data, addr = sock.recvfrom(4096)
                                ip, p = addr
                                info = json.loads(protocol.decrypt(data))

                                for key in ('schedule', 'count_down',
                                            'anti_theft'):
                                    try:
                                        err = (
                                            info[key]['get_rules']['err_code'])
                                        if err == -11:

                                            class Device(object):
                                                @staticmethod
                                                def query(**kwargs):
                                                    return protocol.query(
                                                        ip, **kwargs)

                                            from dtime import DTime

                                            time_setter = DTime(Device)
                                            time_setter.set()
                                            break
                                    except KeyError:
                                        pass
                                else:
                                    sys_info = info['system']['get_sysinfo']
                                    info['ip'] = ip
                                    info['id'] = sys_info['deviceId']
                                    devices.append(info)
                        except socket.error:
                            if devices:
                                self._update(devices)

                                for new_device in devices:
                                    for old_device in self:
                                        if old_device.id == new_device['id']:
                                            old_device.polling_data = (
                                                new_device)

                evt.set()
Exemplo n.º 2
0
        def do(local_address, prt, evt):
            dvcs = []
            global restart

            _LOGGER.debug(
                "Sending discovery to 255.255.255.255:%s on local address %s",
                prt, local_address)

            try:
                sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
                sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
                sock.settimeout(timeout)
                sock.bind((local_address, 1025))
                sock.sendto(DISCOVERY_QUERY[4:], (QUERY_TARGET, prt))
            except socket.error:
                raise TPLinkException.SocketError('Discover Socket Error:')
            else:
                try:
                    while True:
                        data, addr = sock.recvfrom(4096)
                        ip, p = addr
                        info = json.loads(protocol.decrypt(data))

                        for key in ('schedule', 'count_down', 'anti_theft'):
                            if ('err_code' in info[key]['get_rules'] and
                                    info[key]['get_rules']['err_code'] == -11):

                                class Device(object):
                                    @staticmethod
                                    def query(**kwargs):
                                        import protocol
                                        return protocol.query(ip, **kwargs)

                                from dtime import DTime
                                time_setter = DTime(Device)
                                time_setter.set()
                                restart = True
                                break

                        info['ip'] = ip
                        info['port'] = port
                        dvcs.append(info)

                except socket.timeout:
                    if not restart:
                        _LOGGER.debug("Found %d devices on local address %s",
                                      len(dvcs), local_address)
                        devices.extend(dvcs)

                except socket.error:
                    _LOGGER.error("Got exception %s")
            finally:
                evt.set()
Exemplo n.º 3
0
def clientFunc(target, message):
    try:
        print("Message sent to {}:{}.".format(*target))
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(10)
        sock.connect(target)
        sock.send(message)
        sock.shutdown(socket.SHUT_RDWR)

    except KeyboardInterrupt:
        print("Killed.")

    except:
        print("TauNet node {}:{}".format(*target) + " is offline.")
        print("Saving Message in Log...")
        logMessage.append(protocol.decrypt(message,str.encode('password')))
        logTarget.append(target)

    finally:
        sock.close()
Exemplo n.º 4
0
        def send():
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

            def close_socket():
                try:
                    sock.shutdown(socket.SHUT_RDWR)
                    sock.close()
                except socket.error:
                    pass

            try:
                sock.connect((self._ip, 9999))
            except socket.error:
                close_socket()
                raise TPLinkException.SocketError("Socket Connection Error:")

            sock.send(protocol.encrypt(data))

            buf = bytes()
            length = -1
            while True:
                chunk = sock.recv(4096)
                if not chunk:
                    break
                if length == -1:
                    length = struct.unpack(">I", chunk[0:4])[0]
                buf += chunk
                if length > 0 and len(buf) >= length + 4:
                    break

            close_socket()

            if not len(buf):
                raise TPLinkException.CorruptedDataError('No Data Received')

            return protocol.decrypt(buf[4:])