diff --git a/src/remotes/kodi_eventserver.py b/src/remotes/kodi_eventserver.py index 68ab955..bc86481 100644 --- a/src/remotes/kodi_eventserver.py +++ b/src/remotes/kodi_eventserver.py @@ -47,17 +47,25 @@ class KodiEventServerProtocol(asyncio.DatagramProtocol): return payload = data[HEADER_SIZE : HEADER_SIZE + paylen] - self._handle_packet(pkttype, payload, addr) + self._handle_packet(pkttype, payload, addr, client_token) except Exception as e: logger.debug("Error parsing EventServer packet: %s", e) - def _handle_packet(self, pkttype: int, payload: bytes, addr: tuple[str, int]) -> None: + def _handle_packet(self, pkttype: int, payload: bytes, addr: tuple[str, int], client_token: int) -> None: if pkttype == PT_HELO: # Client registration devname = payload.split(b"\x00")[0].decode("utf-8", errors="ignore") logger.info("Yatse EventServer connected from %s (Device: %s)", addr, devname) + # Echo ping ack back to client + if self.transport: + ack = struct.pack(HEADER_FORMAT, b"XBMC", 2, 0, PT_PING, 1, 1, 0, client_token, b"\x00" * 10) + self.transport.sendto(ack, addr) elif pkttype == PT_PING: logger.debug("Yatse EventServer PING from %s", addr) + if self.transport: + ack = struct.pack(HEADER_FORMAT, b"XBMC", 2, 0, PT_PING, 1, 1, 0, client_token, b"\x00" * 10) + self.transport.sendto(ack, addr) + elif pkttype == PT_BUTTON: self._handle_button(payload) elif pkttype == PT_ACTION: