diff --git a/wsdiscovery/cmdline.py b/wsdiscovery/cmdline.py index a180eb9..9edd850 100644 --- a/wsdiscovery/cmdline.py +++ b/wsdiscovery/cmdline.py @@ -15,9 +15,9 @@ @contextmanager def discovery(capture=None, unicast_num=UNICAST_UDP_REPEAT, - multicast_num=MULTICAST_UDP_REPEAT): + multicast_num=MULTICAST_UDP_REPEAT, relates_to=False): wsd = WSDiscovery(capture=capture, unicast_num=unicast_num, - multicast_num=multicast_num) + multicast_num=multicast_num, relates_to=relates_to) wsd.start() yield wsd wsd.stop() @@ -54,13 +54,15 @@ def setup_logger(name, loglevel): show_default=True, help='Number of Unicast messages to send') @click.option('--multicast-num', '-mn', type=int, default=MULTICAST_UDP_REPEAT, show_default=True, help='Number of Multicast messages to send') +@click.option('--relates-to', '-rt', is_flag=True, + help='Also use RelatesTo tag to recognize incoming messages.') def discover(scope, address, port, loglevel, capture, timeout, unicast_num, - multicast_num): + multicast_num, relates_to): "Discover services using WS-Discovery" logger = setup_logger("ws-discovery", loglevel) - with discovery(capture, unicast_num, multicast_num) as wsd: + with discovery(capture, unicast_num, multicast_num, relates_to) as wsd: scopes = [Scope(scope)] if scope else [] svcs = wsd.searchServices(scopes=scopes, address=address, port=port, timeout=timeout) diff --git a/wsdiscovery/threaded.py b/wsdiscovery/threaded.py index 3276125..914b466 100644 --- a/wsdiscovery/threaded.py +++ b/wsdiscovery/threaded.py @@ -82,6 +82,7 @@ def __init__(self, observer): self._iidMap = {} self._observer = observer self._capture = observer._capture + self._relates_to = observer._relates_to self._seqnum = 1 # capture sequence number self._selector = selectors.DefaultSelector() @@ -219,7 +220,10 @@ def _recvMessages(self): mid = env.getMessageId() if mid in self._knownMessageIds: - continue # https://github.com/andreikop/python-ws-discovery/issues/38 # TODO + if self._relates_to and env.getRelatesTo() in self._knownMessageIds: + pass + else: + continue else: if self._capture: self._capture.write("NEW KNOWN MSG IDS %s\n" % (mid)) @@ -367,7 +371,8 @@ class ThreadedNetworking: def __init__(self, unicast_num=UNICAST_UDP_REPEAT, - multicast_num=MULTICAST_UDP_REPEAT, **kwargs): + multicast_num=MULTICAST_UDP_REPEAT, + relates_to=False, **kwargs): self._networkingThread_v4 = None self._networkingThread_v6 = None self._addrsMonitorThread_v4 = None @@ -375,6 +380,7 @@ def __init__(self, self._serverStarted = False self._unicast_num = unicast_num self._multicast_num = multicast_num + self._relates_to = relates_to super().__init__(**kwargs) def _startThreads(self):