Skip to content

Commit f274d20

Browse files
committed
feat: attached mdns instance with host
1 parent 28d0e57 commit f274d20

File tree

5 files changed

+23
-9
lines changed

5 files changed

+23
-9
lines changed

libp2p/__init__.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -269,12 +269,8 @@ def new_host(
269269
listen_addrs=listen_addrs,
270270
)
271271

272-
if enable_mDNS:
273-
mdns = MDNSDiscovery(swarm)
274-
mdns.start()
275-
276272
if disc_opt is not None:
277-
return RoutedHost(swarm, disc_opt)
278-
return BasicHost(swarm)
273+
return RoutedHost(swarm, disc_opt, enable_mDNS)
274+
return BasicHost(swarm, enable_mDNS)
279275

280276
__version__ = __version("libp2p")

libp2p/discovery/mdns/listener.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def __init__(
3636
def add_service(self, zc: Zeroconf, type_: str, name: str) -> None:
3737
if name == self.service_name:
3838
return
39+
logger.debug(f"Adding service: {name}")
3940
info = zc.get_service_info(type_, name, timeout=5000)
4041
if not info:
4142
return
@@ -47,6 +48,9 @@ def add_service(self, zc: Zeroconf, type_: str, name: str) -> None:
4748
logger.debug("Discovered Peer:", peer_info.peer_id)
4849

4950
def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:
51+
if name == self.service_name:
52+
return
53+
logger.debug(f"Removing service: {name}")
5054
peer_id = self.discovered_services.pop(name)
5155
self.peerstore.clear_addrs(peer_id)
5256
logger.debug(f"Removed Peer: {peer_id}")

libp2p/discovery/mdns/mdns.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,6 @@ def start(self) -> None:
6868

6969
def stop(self) -> None:
7070
"""Unregister this peer and clean up zeroconf resources."""
71+
logger.debug("Stopping mDNS discovery")
7172
self.broadcaster.unregister()
7273
self.zeroconf.close()

libp2p/host/basic_host.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
StreamHandlerFn,
3030
TProtocol,
3131
)
32+
from libp2p.discovery.mdns.mdns import MDNSDiscovery
3233
from libp2p.host.defaults import (
3334
get_default_protocols,
3435
)
@@ -89,6 +90,7 @@ class BasicHost(IHost):
8990
def __init__(
9091
self,
9192
network: INetworkService,
93+
enable_mDNS: bool = False,
9294
default_protocols: Optional["OrderedDict[TProtocol, StreamHandlerFn]"] = None,
9395
) -> None:
9496
self._network = network
@@ -98,6 +100,8 @@ def __init__(
98100
default_protocols = default_protocols or get_default_protocols(self)
99101
self.multiselect = Multiselect(dict(default_protocols.items()))
100102
self.multiselect_client = MultiselectClient()
103+
if enable_mDNS:
104+
self.mDNS = MDNSDiscovery(network)
101105

102106
def get_id(self) -> ID:
103107
"""
@@ -162,7 +166,14 @@ async def _run() -> AsyncIterator[None]:
162166
network = self.get_network()
163167
async with background_trio_service(network):
164168
await network.listen(*listen_addrs)
165-
yield
169+
if self.mDNS is not None:
170+
logger.debug("Starting mDNS Discovery")
171+
self.mDNS.start()
172+
try:
173+
yield
174+
finally:
175+
if self.mDNS is not None:
176+
self.mDNS.stop()
166177

167178
return _run()
168179

libp2p/host/routed_host.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
class RoutedHost(BasicHost):
1919
_router: IPeerRouting
2020

21-
def __init__(self, network: INetworkService, router: IPeerRouting):
22-
super().__init__(network)
21+
def __init__(
22+
self, network: INetworkService, router: IPeerRouting, enable_mDNS: bool = False
23+
):
24+
super().__init__(network, enable_mDNS)
2325
self._router = router
2426

2527
async def connect(self, peer_info: PeerInfo) -> None:

0 commit comments

Comments
 (0)