feat(eventserver): send UDP ping ack reply to Yatse client

This commit is contained in:
bart
2026-11-02 22:46:33 +01:00
parent 91657aad56
commit 8a08620866
+10 -2
View File
@@ -47,17 +47,25 @@ class KodiEventServerProtocol(asyncio.DatagramProtocol):
return return
payload = data[HEADER_SIZE : HEADER_SIZE + paylen] 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: except Exception as e:
logger.debug("Error parsing EventServer packet: %s", 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: if pkttype == PT_HELO:
# Client registration # Client registration
devname = payload.split(b"\x00")[0].decode("utf-8", errors="ignore") devname = payload.split(b"\x00")[0].decode("utf-8", errors="ignore")
logger.info("Yatse EventServer connected from %s (Device: %s)", addr, devname) 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: elif pkttype == PT_PING:
logger.debug("Yatse EventServer PING from %s", addr) 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: elif pkttype == PT_BUTTON:
self._handle_button(payload) self._handle_button(payload)
elif pkttype == PT_ACTION: elif pkttype == PT_ACTION: