|
16 | 16 | */
|
17 | 17 |
|
18 | 18 | #include "Resolver.h"
|
| 19 | +#include "lib/dnssd/minimal_mdns/core/Constants.h" |
19 | 20 |
|
| 21 | +#include <cstddef> |
20 | 22 | #include <limits>
|
21 | 23 |
|
22 | 24 | #include <lib/core/CHIPConfig.h>
|
@@ -283,17 +285,20 @@ class MinMdnsResolver : public Resolver, public MdnsPacketDelegate
|
283 | 285 | bool IsInitialized() override;
|
284 | 286 | void Shutdown() override;
|
285 | 287 | void SetOperationalDelegate(OperationalResolveDelegate * delegate) override { mOperationalDelegate = delegate; }
|
| 288 | + |
286 | 289 | CHIP_ERROR ResolveNodeId(const PeerId & peerId) override;
|
287 | 290 | void NodeIdResolutionNoLongerNeeded(const PeerId & peerId) override;
|
288 | 291 | CHIP_ERROR DiscoverCommissionableNodes(DiscoveryFilter filter, DiscoveryContext & context) override;
|
289 | 292 | CHIP_ERROR DiscoverCommissioners(DiscoveryFilter filter, DiscoveryContext & context) override;
|
| 293 | + CHIP_ERROR DiscoverOperational(DiscoveryFilter filter, DiscoveryContext & context) override; |
290 | 294 | CHIP_ERROR StopDiscovery(DiscoveryContext & context) override;
|
291 | 295 | CHIP_ERROR ReconfirmRecord(const char * hostname, Inet::IPAddress address, Inet::InterfaceId interfaceId) override;
|
292 | 296 |
|
293 | 297 | private:
|
294 | 298 | OperationalResolveDelegate * mOperationalDelegate = nullptr;
|
295 | 299 | DiscoveryContext * mDiscoveryContext = nullptr;
|
296 | 300 | System::Layer * mSystemLayer = nullptr;
|
| 301 | + |
297 | 302 | ActiveResolveAttempts mActiveResolves;
|
298 | 303 | PacketParser mPacketParser;
|
299 | 304 |
|
@@ -440,14 +445,19 @@ void MinMdnsResolver::AdvancePendingResolverStates()
|
440 | 445 | {
|
441 | 446 | MATTER_TRACE_SCOPE("Active operational delegate call", "MinMdnsResolver");
|
442 | 447 | ResolvedNodeData nodeData;
|
443 |
| - |
444 | 448 | CHIP_ERROR err = resolver->Take(nodeData);
|
445 | 449 | if (err != CHIP_NO_ERROR)
|
446 | 450 | {
|
447 | 451 | ChipLogError(Discovery, "Failed to take discovery result: %" CHIP_ERROR_FORMAT, err.Format());
|
448 | 452 | }
|
449 | 453 |
|
450 | 454 | mActiveResolves.Complete(nodeData.operationalData.peerId);
|
| 455 | + |
| 456 | + if (mDiscoveryContext != nullptr) |
| 457 | + { |
| 458 | + mDiscoveryContext->OnOperationalNodeDiscovered(nodeData.operationalData); |
| 459 | + } |
| 460 | + |
451 | 461 | if (mOperationalDelegate != nullptr)
|
452 | 462 | {
|
453 | 463 | mOperationalDelegate->OnOperationalNodeResolved(nodeData);
|
@@ -701,6 +711,15 @@ CHIP_ERROR MinMdnsResolver::DiscoverCommissioners(DiscoveryFilter filter, Discov
|
701 | 711 | return BrowseNodes(DiscoveryType::kCommissionerNode, filter);
|
702 | 712 | }
|
703 | 713 |
|
| 714 | + |
| 715 | +CHIP_ERROR MinMdnsResolver::DiscoverOperational(DiscoveryFilter filter, DiscoveryContext & context) |
| 716 | +{ |
| 717 | + // minmdns currently supports only one discovery context at a time so override the previous context |
| 718 | + SetDiscoveryContext(&context); |
| 719 | + |
| 720 | + return BrowseNodes(DiscoveryType::kOperational, filter); |
| 721 | +} |
| 722 | + |
704 | 723 | CHIP_ERROR MinMdnsResolver::StopDiscovery(DiscoveryContext & context)
|
705 | 724 | {
|
706 | 725 | SetDiscoveryContext(nullptr);
|
|
0 commit comments