Skip to content

Commit 903238b

Browse files
Fixes TXT record not available when making direct query with name and type
1 parent e0df481 commit 903238b

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

src/python_testing/mdns_discovery/mdns_discovery.py

+20-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from enum import Enum
2323
from typing import Dict, List, Optional
2424

25-
from zeroconf import IPVersion, ServiceStateChange, Zeroconf
25+
from zeroconf import IPVersion, ServiceListener, ServiceStateChange, Zeroconf
2626
from zeroconf.asyncio import AsyncServiceBrowser, AsyncServiceInfo, AsyncZeroconfServiceTypes
2727

2828

@@ -75,6 +75,20 @@ class MdnsServiceType(Enum):
7575
BORDER_ROUTER = "_meshcop._udp.local."
7676

7777

78+
class DummyServiceListener(ServiceListener):
79+
"""
80+
A service listener required for the TXT record data to get populated and come back
81+
"""
82+
def add_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None:
83+
pass
84+
85+
def remove_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None:
86+
pass
87+
88+
def update_service(self, zeroconf: Zeroconf, service_type: str, name: str) -> None:
89+
pass
90+
91+
7892
class MdnsDiscovery:
7993

8094
DISCOVERY_TIMEOUT_SEC = 15
@@ -160,10 +174,13 @@ async def get_operational_service(self, service_name: str = None,
160174
mdns_service_info = await self._get_service(MdnsServiceType.OPERATIONAL, log_output, discovery_timeout_sec)
161175
else:
162176
print(f"Looking for MDNS service type '{service_type}', service name '{service_name}'")
163-
164-
# Get service info
177+
service_listener = DummyServiceListener()
178+
self._zc.add_service_listener(MdnsServiceType.OPERATIONAL.value, service_listener)
179+
# Adds delay so TXT record is able to get populated
180+
await asyncio.sleep(1)
165181
service_info = AsyncServiceInfo(service_type, service_name)
166182
is_discovered = await service_info.async_request(self._zc, 3000)
183+
self._zc.remove_service_listener(service_listener)
167184
if is_discovered:
168185
mdns_service_info = self._to_mdns_service_info_class(service_info)
169186
self._discovered_services = {}

0 commit comments

Comments
 (0)