feat(eventserver): send UDP ping ack reply to Yatse client
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user