Esempio n. 1
0
    def run(self):
        global timeout
        while run:
            self.run_event.wait()
            global observers
            # print "UDP Broadcast Listener starting listening routine..."
            global sock, wait
            if not sock:
                sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                sock.bind(('', UDP_PORT))
            sock.settimeout(timeout)
            # reset variables
            rec = None
            address = None
            try:
                rec, address = sock.recvfrom(4048)
            except:
                # print "Timeout catched..."
                pass

            if rec and address:
                # print "Incoming data from ", str(address)
                if not address[0] in netutil.ip4_addresses():
                    # print "Incoming data not from own broadcast --> processing..."
                    result, response = interpreter.interpret(rec)
                    if result == INTERPRETER_SERVER_REQUEST:
                        print "RaspMedia player found: ", str(address)
                        if response[1] == TYPE_RASPMEDIA_PLAYER:
                            wx.CallAfter(Publisher.sendMessage,
                                         'host_found',
                                         host=address,
                                         playerName=str(response[0]),
                                         freeSpace=response[3])
                    elif result == INTERPRETER_FILELIST_REQUEST:
                        wx.CallAfter(Publisher.sendMessage,
                                     'remote_files',
                                     serverAddr=address,
                                     files=response)
                    elif result == CONFIG_REQUEST:
                        wx.CallAfter(Publisher.sendMessage,
                                     'config',
                                     config=response)
                    elif result == GROUP_CONFIG_REQUEST:
                        wx.CallAfter(Publisher.sendMessage,
                                     'group_config',
                                     group_config=response,
                                     playerIP=address[0])
                    elif result == PLAYER_UPDATE_ERROR:
                        wx.CallAfter(Publisher.sendMessage, 'update_failed')
                    elif result == PLAYER_BOOT_COMPLETE:
                        wx.CallAfter(Publisher.sendMessage, 'boot_complete')
                        stopListening()
                    elif result == GROUP_CONFIG_ADD_ACTION:
                        wx.CallAfter(Publisher.sendMessage, 'action_saved')
                    elif result == GROUP_CONFIG_ACTION_DELETE:
                        wx.CallAfter(Publisher.sendMessage, 'action_deleted')
                    elif result == DISK_INFO_REQUEST:
                        wx.CallAfter(Publisher.sendMessage,
                                     'disk_info',
                                     diskInfo=response)
Esempio n. 2
0
def sendMessage(data,host='<broadcast>',response_timeout=None):
	if host == '<broadcast>':
		ips = netutil.ip4_addresses()
		for ip in ips:
			print "Broadcasting over IP ",ip
			_sendMessage(data,host,ip,response_timeout)
	else:
		_sendMessage(data,host,None,response_timeout)
Esempio n. 3
0
def sendMessage(data, host='<broadcast>', response_timeout=None):
    if host == '<broadcast>':
        ips = netutil.ip4_addresses()
        for ip in ips:
            print "Broadcasting over IP ", ip
            _sendMessage(data, host, ip, response_timeout)
    else:
        _sendMessage(data, host, None, response_timeout)
Esempio n. 4
0
    def run(self):
        global timeout
        while run:
            self.run_event.wait()
            global observers
            # print "UDP Broadcast Listener starting listening routine..."
            global sock, wait
            if not sock:
                sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                sock.bind(("", UDP_PORT))
            sock.settimeout(timeout)
            # reset variables
            rec = None
            address = None
            try:
                rec, address = sock.recvfrom(4048)
            except:
                # print "Timeout catched..."
                pass

            if rec and address:
                # print "Incoming data from ", str(address)
                if not address[0] in netutil.ip4_addresses():
                    # print "Incoming data not from own broadcast --> processing..."
                    result, response = interpreter.interpret(rec)
                    if result == INTERPRETER_SERVER_REQUEST:
                        print "RaspMedia player found: ", str(address)
                        if response[1] == TYPE_RASPMEDIA_PLAYER:
                            wx.CallAfter(
                                Publisher.sendMessage,
                                "host_found",
                                host=address,
                                playerName=str(response[0]),
                                freeSpace=response[3],
                            )
                    elif result == INTERPRETER_FILELIST_REQUEST:
                        wx.CallAfter(Publisher.sendMessage, "remote_files", serverAddr=address, files=response)
                    elif result == CONFIG_REQUEST:
                        wx.CallAfter(Publisher.sendMessage, "config", config=response)
                    elif result == GROUP_CONFIG_REQUEST:
                        wx.CallAfter(Publisher.sendMessage, "group_config", group_config=response, playerIP=address[0])
                    elif result == PLAYER_UPDATE_ERROR:
                        wx.CallAfter(Publisher.sendMessage, "update_failed")
                    elif result == PLAYER_BOOT_COMPLETE:
                        wx.CallAfter(Publisher.sendMessage, "boot_complete")
                        stopListening()
                    elif result == GROUP_CONFIG_ADD_ACTION:
                        wx.CallAfter(Publisher.sendMessage, "action_saved")
                    elif result == GROUP_CONFIG_ACTION_DELETE:
                        wx.CallAfter(Publisher.sendMessage, "action_deleted")
                    elif result == DISK_INFO_REQUEST:
                        wx.CallAfter(Publisher.sendMessage, "disk_info", diskInfo=response)
Esempio n. 5
0
    def run(self):
        global timeout
        while run:
            self.run_event.wait()
            global observers
            # print "UDP Broadcast Listener starting listening routine..."
            global sock, wait
            if not sock:
                sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                sock.bind(("", UDP_PORT))
            sock.settimeout(timeout)
            # reset variables
            rec = None
            address = None
            # print "INSIDE BROADCASTLISTENER:"
            # print "Waiting for incoming data..."
            try:
                rec, address = sock.recvfrom(4048)
            except:
                # print "Timeout catched..."
                pass

            if rec and address:
                # print "Incoming data from ", str(address)
                if not address[0] in netutil.ip4_addresses():
                    # print "Incoming data not from own broadcast --> processing..."
                    result, response = interpreter.interpret(rec)
                    if result == INTERPRETER_SERVER_REQUEST:
                        print "Server request response - length: ", len(rec)
                        # print ":".join("{:02x}".format(ord(c)) for c in rec)
                        print "Server address: ", str(address)
                        print ""
                        if response[1] == TYPE_RASPMEDIA_PLAYER:
                            wx.CallAfter(Publisher.sendMessage, "host_found", host=address, playerName=str(response[0]))
                    elif result == INTERPRETER_FILELIST_REQUEST:
                        # print "File list received!"
                        # print response
                        wx.CallAfter(Publisher.sendMessage, "remote_files", serverAddr=address, files=response)
                    elif result == CONFIG_REQUEST:
                        # print "Config data received:"
                        wx.CallAfter(Publisher.sendMessage, "config", config=response)
                        # print response
                    elif result == PLAYER_UPDATE_ERROR:
                        # print "Player update failed: " + response
                        wx.CallAfter(Publisher.sendMessage, "update_failed")
                    elif result == PLAYER_BOOT_COMPLETE:
                        # print "Player BOOT_COMPLETE"
                        wx.CallAfter(Publisher.sendMessage, "boot_complete")
                        stopListening()
Esempio n. 6
0
def sendBroadcast(data,wait_for_connection=False):
    if wait_for_connection:
        # wait until at least one interface is connected but not longer as a defined timeout
        t = 0
        while t < STARTUP_IF_TIMEOUT and netutil.num_connected_interfaces() == 0:
            time.sleep(1)
            t += 1
            if t % 5 == 0:
                print t
        print "Connected interface available..."

    ips = netutil.ip4_addresses()
    for ip in ips:
        print "Broadcasting over IP ",ip
        _sendMessage(data,ip)
    cleanExit()
Esempio n. 7
0
def sendBroadcast(data, wait_for_connection=False):
    if wait_for_connection:
        # wait until at least one interface is connected but not longer as a defined timeout
        t = 0
        while t < STARTUP_IF_TIMEOUT and netutil.num_connected_interfaces(
        ) == 0:
            time.sleep(1)
            t += 1
            if t % 5 == 0:
                print t
        print "Connected interface available..."

    ips = netutil.ip4_addresses()
    for ip in ips:
        print "Broadcasting over IP ", ip
        _sendMessage(data, ip)
    cleanExit()
Esempio n. 8
0
    def handle(self):
        data = self.request[0]
        inData = self.request[0].strip()
        cSocket = self.request[1]
        curThread = threading.current_thread()
        if not self.client_address[0] in netutil.ip4_addresses():
            result, msg = interpreter.interpret(data, self.client_address[0])


            if result == SERVER_REQUEST:
                freeSpace = self.FreeDiskSpace()
                responseData = messages.getMessage(SERVER_REQUEST_ACKNOWLEDGE, ["-i", str(TYPE_RASPMEDIA_PLAYER), "-i", "0","-s", str(configtool.readConfig()['player_name']), "-i", str(freeSpace[0]), "-i", str(freeSpace[1])])
                addr = (self.client_address[0], UDP_PORT)
                print "Sending response to client:"
                print (addr)
                if cSocket.sendto(responseData, addr):
                    print "Response sent!"
                else:
                    print "Sending response failed!"
            elif result == FILELIST_REQUEST:
                files = mediaplayer.getMediaFileList()
                args = ['-i', str(len(files))]
                for file in files:
                    args.append('-s')
                    args.append(file)
                responseData = messages.getMessage(FILELIST_RESPONSE,args)
                if cSocket.sendto(responseData, (self.client_address[0], UDP_PORT)):
                    print "Filelist sent!"
            elif result == CONFIG_REQUEST:
                responseData = messages.getConfigMessage()
                if cSocket.sendto(responseData, (self.client_address[0], UDP_PORT)):
                    print "Config sent!"
            elif result == GROUP_CONFIG_REQUEST:
                response = messages.getGroupConfigMessage()
                if cSocket.sendto(response, (self.client_address[0], UDP_PORT)):
                    print "Group Config sent!"
            elif result == GROUP_CONFIG_ADD_ACTION:
                    configtool.addGroupAction(msg)
                    gConf = configtool.readGroupConfig()
                    response = messages.getMessage(GROUP_CONFIG_ADD_ACTION)
                    if cSocket.sendto(response, (self.client_address[0], UDP_PORT)):
                        print "Action saved confirmation sent!"
                    GroupManager.ReInitGroupManager(gConf)
            elif result == GROUP_CONFIG_ACTION_DELETE:
                    configtool.deleteGroupAction(msg)
                    gConf = configtool.readGroupConfig()
                    response = messages.getMessage(GROUP_CONFIG_ACTION_DELETE)
                    if cSocket.sendto(response, (self.client_address[0], UDP_PORT)):
                        print "Action deleted confirmation sent!"
                    GroupManager.ReInitGroupManager(gConf)
            elif result == PLAYER_UPDATE_ERROR:
                responseData = messages.getMessage(PLAYER_UPDATE_ERROR, ["-s", str(msg)])
                cSocket.sendto(responseData, (self.client_address[0], UDP_PORT))
            elif result == FILE_DATA_REQUEST:
                # send images from player over tcp to host in separate thread to not block other udp handling
                t = threading.Thread(target=self.SendImagesOverTCP, args=[self.client_address[0]])
                t.daemon = True
                t.start()
            elif result == DISK_INFO_REQUEST:
                freeSpace = self.FreeDiskSpace()
                responseData = messages.getMessage(DISK_INFO_REQUEST, ["-i", str(freeSpace[0]), "-i", str(freeSpace[1])])
                addr = (self.client_address[0], UDP_PORT)
                if cSocket.sendto(responseData, addr):
                    print "Disk Info sent!"
                else:
                    print "Sending disk info failed!"
        else:
            print "Received own broadcast... ignored."
Esempio n. 9
0
    def handle(self):
        data = self.request[0]
        inData = self.request[0].strip()
        cSocket = self.request[1]
        curThread = threading.current_thread()
        if not self.client_address[0] in netutil.ip4_addresses():
            result, msg = interpreter.interpret(data, self.client_address[0])

            if result == SERVER_REQUEST:
                freeSpace = self.FreeDiskSpace()
                responseData = messages.getMessage(
                    SERVER_REQUEST_ACKNOWLEDGE, [
                        "-i",
                        str(TYPE_RASPMEDIA_PLAYER), "-i", "0", "-s",
                        str(configtool.readConfig()['player_name']), "-i",
                        str(freeSpace[0]), "-i",
                        str(freeSpace[1])
                    ])
                addr = (self.client_address[0], UDP_PORT)
                print "Sending response to client:"
                print(addr)
                if cSocket.sendto(responseData, addr):
                    print "Response sent!"
                else:
                    print "Sending response failed!"
            elif result == FILELIST_REQUEST:
                files = mediaplayer.getMediaFileList()
                args = ['-i', str(len(files))]
                for file in files:
                    args.append('-s')
                    args.append(file)
                responseData = messages.getMessage(FILELIST_RESPONSE, args)
                if cSocket.sendto(responseData,
                                  (self.client_address[0], UDP_PORT)):
                    print "Filelist sent!"
            elif result == CONFIG_REQUEST:
                responseData = messages.getConfigMessage()
                if cSocket.sendto(responseData,
                                  (self.client_address[0], UDP_PORT)):
                    print "Config sent!"
            elif result == GROUP_CONFIG_REQUEST:
                response = messages.getGroupConfigMessage()
                if cSocket.sendto(response,
                                  (self.client_address[0], UDP_PORT)):
                    print "Group Config sent!"
            elif result == GROUP_CONFIG_ADD_ACTION:
                configtool.addGroupAction(msg)
                gConf = configtool.readGroupConfig()
                response = messages.getMessage(GROUP_CONFIG_ADD_ACTION)
                if cSocket.sendto(response,
                                  (self.client_address[0], UDP_PORT)):
                    print "Action saved confirmation sent!"
                GroupManager.ReInitGroupManager(gConf)
            elif result == GROUP_CONFIG_ACTION_DELETE:
                configtool.deleteGroupAction(msg)
                gConf = configtool.readGroupConfig()
                response = messages.getMessage(GROUP_CONFIG_ACTION_DELETE)
                if cSocket.sendto(response,
                                  (self.client_address[0], UDP_PORT)):
                    print "Action deleted confirmation sent!"
                GroupManager.ReInitGroupManager(gConf)
            elif result == PLAYER_UPDATE_ERROR:
                responseData = messages.getMessage(PLAYER_UPDATE_ERROR,
                                                   ["-s", str(msg)])
                cSocket.sendto(responseData,
                               (self.client_address[0], UDP_PORT))
            elif result == FILE_DATA_REQUEST:
                # send images from player over tcp to host in separate thread to not block other udp handling
                t = threading.Thread(target=self.SendImagesOverTCP,
                                     args=[self.client_address[0]])
                t.daemon = True
                t.start()
            elif result == DISK_INFO_REQUEST:
                freeSpace = self.FreeDiskSpace()
                responseData = messages.getMessage(
                    DISK_INFO_REQUEST,
                    ["-i", str(freeSpace[0]), "-i",
                     str(freeSpace[1])])
                addr = (self.client_address[0], UDP_PORT)
                if cSocket.sendto(responseData, addr):
                    print "Disk Info sent!"
                else:
                    print "Sending disk info failed!"
        else:
            print "Received own broadcast... ignored."