async def METHOD_NAME(self, msg, data):
    try:
        data = {key.lower(): str(value) for key, value in data.items()}
        usn = data["usn"]
        arr = usn.split("::")
        udn = arr[0]
        if len(arr) > 1:
            st = arr[1]
        else:
            st = ""
        self.logger.debug("found: " + usn)
        # filter for listeners
        for listenerFilter in self.listeners:
            listener = listenerFilter["listener"]
            ssdp_filter = listenerFilter["ssdp_filter"]
            filter_udn = None
            filter_st = None
            if "udn" in ssdp_filter:
                filter_udn = ssdp_filter["udn"]
            if "service_type" in ssdp_filter:
                filter_st = ssdp_filter["service_type"]
            if (udn == filter_udn or filter_udn is None) and (
                st == filter_st or filter_st == "ssdp:all"
            ):
                if usn not in listenerFilter["found_devices"] and msg == "alive":
                    self.logger.debug("create device: " + usn)
                    listenerFilter["found_devices"][usn] = await self.create_device(
                        msg, data
                    )
                    if listenerFilter["found_devices"][usn]:
                        self.logger.debug("found device: " + usn)
                        await listener.found_device(
                            listenerFilter["found_devices"][usn]
                        )
                elif usn in listenerFilter["found_devices"] and msg == "byebye":
                    self.logger.debug("removed device: " + usn)
                    await listener.removed_device(
                        listenerFilter["found_devices"][usn]
                    )
                    del listenerFilter["found_devices"][usn]
    except Exception:
        self.logger.exception("Error in handle_msg")