Skip to content

Commit

Permalink
[mdns] small enhancements (#2000)
Browse files Browse the repository at this point in the history
This commit contains smaller changes in `Mdns::Publisher`:
- Use the already defined `AddressList` in methods
- Declare `OnCompleted()` method in `{Host/Service}Registeration`
  that is intended for use by the base class only as `private` instead
  of `protected`
  • Loading branch information
abtink authored Sep 7, 2023
1 parent 8f15ce5 commit 7ec70b0
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 55 deletions.
12 changes: 5 additions & 7 deletions src/mdns/mdns.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,7 @@ void Publisher::PublishService(const std::string &aHostName,
}
}

void Publisher::PublishHost(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback)
void Publisher::PublishHost(const std::string &aName, const AddressList &aAddresses, ResultCallback &&aCallback)
{
otbrError error;

Expand Down Expand Up @@ -368,9 +366,9 @@ Publisher::ResultCallback Publisher::HandleDuplicateServiceRegistration(const st
return std::move(aCallback);
}

Publisher::ResultCallback Publisher::HandleDuplicateHostRegistration(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback)
Publisher::ResultCallback Publisher::HandleDuplicateHostRegistration(const std::string &aName,
const AddressList &aAddresses,
ResultCallback &&aCallback)
{
HostRegistration *hostReg = FindHostRegistration(aName);

Expand Down Expand Up @@ -468,7 +466,7 @@ void Publisher::ServiceRegistration::OnComplete(otbrError aError)
}
}

bool Publisher::HostRegistration::IsOutdated(const std::string &aName, const std::vector<Ip6Address> &aAddresses) const
bool Publisher::HostRegistration::IsOutdated(const std::string &aName, const AddressList &aAddresses) const
{
return !(mName == aName && mAddresses == aAddresses);
}
Expand Down
57 changes: 31 additions & 26 deletions src/mdns/mdns.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,9 @@ class Publisher : private NonCopyable
*/
struct DiscoveredHostInfo
{
std::string mHostName; ///< Full host name.
std::vector<Ip6Address> mAddresses; ///< IP6 addresses.
uint32_t mTtl = 0; ///< Host TTL.
std::string mHostName; ///< Full host name.
AddressList mAddresses; ///< IP6 addresses.
uint32_t mTtl = 0; ///< Host TTL.
};

/**
Expand Down Expand Up @@ -255,7 +255,7 @@ class Publisher : private NonCopyable
* alternative name is available/acceptable.
*
*/
void PublishHost(const std::string &aName, const std::vector<Ip6Address> &aAddresses, ResultCallback &&aCallback);
void PublishHost(const std::string &aName, const AddressList &aAddresses, ResultCallback &&aCallback);

/**
* This method un-publishes a host.
Expand Down Expand Up @@ -344,7 +344,7 @@ class Publisher : private NonCopyable
* @returns The MdnsTelemetryInfo of the publisher.
*
*/
const MdnsTelemetryInfo &GetMdnsTelemetryInfo() const { return mTelemetryInfo; }
const MdnsTelemetryInfo &GetMdnsTelemetryInfo(void) const { return mTelemetryInfo; }

virtual ~Publisher(void) = default;

Expand Down Expand Up @@ -465,22 +465,23 @@ class Publisher : private NonCopyable

void Complete(otbrError aError);

void OnComplete(otbrError aError);

// Tells whether this `ServiceRegistration` object is outdated comparing to the given parameters.
bool IsOutdated(const std::string &aHostName,
const std::string &aName,
const std::string &aType,
const SubTypeList &aSubTypeList,
uint16_t aPort,
const TxtData &aTxtData) const;

private:
void OnComplete(otbrError aError);
};

class HostRegistration : public Registration
{
public:
std::string mName;
std::vector<Ip6Address> mAddresses;
std::string mName;
AddressList mAddresses;

HostRegistration(std::string aName, AddressList aAddresses, ResultCallback &&aCallback, Publisher *aPublisher)
: Registration(std::move(aCallback), aPublisher)
Expand All @@ -489,14 +490,15 @@ class Publisher : private NonCopyable
{
}

~HostRegistration(void) { OnComplete(OTBR_ERROR_ABORTED); }
~HostRegistration(void) override { OnComplete(OTBR_ERROR_ABORTED); }

void Complete(otbrError aError);

void OnComplete(otbrError);

// Tells whether this `HostRegistration` object is outdated comparing to the given parameters.
bool IsOutdated(const std::string &aName, const std::vector<Ip6Address> &aAddresses) const;
bool IsOutdated(const std::string &aName, const AddressList &aAddresses) const;

private:
void OnComplete(otbrError aError);
};

using ServiceRegistrationPtr = std::unique_ptr<ServiceRegistration>;
Expand All @@ -515,14 +517,17 @@ class Publisher : private NonCopyable
const SubTypeList &aSubTypeList,
uint16_t aPort,
const TxtData &aTxtData,
ResultCallback &&aCallback) = 0;
virtual otbrError PublishHostImpl(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback) = 0;
virtual void OnServiceResolveFailedImpl(const std::string &aType,
const std::string &aInstanceName,
int32_t aErrorCode) = 0;
virtual void OnHostResolveFailedImpl(const std::string &aHostName, int32_t aErrorCode) = 0;
ResultCallback &&aCallback) = 0;

virtual otbrError PublishHostImpl(const std::string &aName,
const AddressList &aAddresses,
ResultCallback &&aCallback) = 0;

virtual void OnServiceResolveFailedImpl(const std::string &aType,
const std::string &aInstanceName,
int32_t aErrorCode) = 0;

virtual void OnHostResolveFailedImpl(const std::string &aHostName, int32_t aErrorCode) = 0;

virtual otbrError DnsErrorToOtbrError(int32_t aError) = 0;

Expand All @@ -547,15 +552,15 @@ class Publisher : private NonCopyable
const TxtData &aTxtData,
ResultCallback &&aCallback);

ResultCallback HandleDuplicateHostRegistration(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback);
ResultCallback HandleDuplicateHostRegistration(const std::string &aName,
const AddressList &aAddresses,
ResultCallback &&aCallback);

void AddHostRegistration(HostRegistrationPtr &&aHostReg);
void RemoveHostRegistration(const std::string &aName, otbrError aError);
HostRegistration *FindHostRegistration(const std::string &aName);

static void UpdateMdnsResponseCounters(otbr::MdnsResponseCounters &aCounters, otbrError aError);
static void UpdateMdnsResponseCounters(MdnsResponseCounters &aCounters, otbrError aError);
static void UpdateEmaLatency(uint32_t &aEmaLatency, uint32_t aLatency, otbrError aError);

void UpdateServiceRegistrationEmaLatency(const std::string &aInstanceName,
Expand All @@ -582,7 +587,7 @@ class Publisher : private NonCopyable
// host name -> the timepoint to begin host resolution
std::map<std::string, Timepoint> mHostResolutionBeginTime;

otbr::MdnsTelemetryInfo mTelemetryInfo{};
MdnsTelemetryInfo mTelemetryInfo{};
};

/**
Expand Down
6 changes: 3 additions & 3 deletions src/mdns/mdns_avahi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -723,9 +723,9 @@ void PublisherAvahi::UnpublishService(const std::string &aName, const std::strin
std::move(aCallback)(error);
}

otbrError PublisherAvahi::PublishHostImpl(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback)
otbrError PublisherAvahi::PublishHostImpl(const std::string &aName,
const AddressList &aAddresses,
ResultCallback &&aCallback)
{
otbrError error = OTBR_ERROR_NONE;
int avahiError = AVAHI_OK;
Expand Down
16 changes: 8 additions & 8 deletions src/mdns/mdns_avahi.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,9 @@ class PublisherAvahi : public Publisher
uint16_t aPort,
const TxtData &aTxtData,
ResultCallback &&aCallback) override;
otbrError PublishHostImpl(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback) override;
otbrError PublishHostImpl(const std::string &aName,
const AddressList &aAddresses,
ResultCallback &&aCallback) override;
void OnServiceResolveFailedImpl(const std::string &aType,
const std::string &aInstanceName,
int32_t aErrorCode) override;
Expand Down Expand Up @@ -141,11 +141,11 @@ class PublisherAvahi : public Publisher
class AvahiHostRegistration : public HostRegistration
{
public:
AvahiHostRegistration(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback,
AvahiEntryGroup *aEntryGroup,
PublisherAvahi *aPublisher)
AvahiHostRegistration(const std::string &aName,
const AddressList &aAddresses,
ResultCallback &&aCallback,
AvahiEntryGroup *aEntryGroup,
PublisherAvahi *aPublisher)
: HostRegistration(aName, aAddresses, std::move(aCallback), aPublisher)
, mEntryGroup(aEntryGroup)
{
Expand Down
6 changes: 3 additions & 3 deletions src/mdns/mdns_mdnssd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -556,9 +556,9 @@ void PublisherMDnsSd::UnpublishService(const std::string &aName, const std::stri
std::move(aCallback)(error);
}

otbrError PublisherMDnsSd::PublishHostImpl(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback)
otbrError PublisherMDnsSd::PublishHostImpl(const std::string &aName,
const AddressList &aAddresses,
ResultCallback &&aCallback)
{
otbrError ret = OTBR_ERROR_NONE;
int error = 0;
Expand Down
16 changes: 8 additions & 8 deletions src/mdns/mdns_mdnssd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ class PublisherMDnsSd : public MainloopProcessor, public Publisher
uint16_t aPort,
const TxtData &aTxtData,
ResultCallback &&aCallback) override;
otbrError PublishHostImpl(const std::string &aName,
const std::vector<Ip6Address> &aAddress,
ResultCallback &&aCallback) override;
otbrError PublishHostImpl(const std::string &aName,
const AddressList &aAddress,
ResultCallback &&aCallback) override;
void OnServiceResolveFailedImpl(const std::string &aType,
const std::string &aInstanceName,
int32_t aErrorCode) override;
Expand Down Expand Up @@ -137,11 +137,11 @@ class PublisherMDnsSd : public MainloopProcessor, public Publisher
class DnssdHostRegistration : public HostRegistration
{
public:
DnssdHostRegistration(const std::string &aName,
const std::vector<Ip6Address> &aAddresses,
ResultCallback &&aCallback,
DNSServiceRef aServiceRef,
Publisher *aPublisher)
DnssdHostRegistration(const std::string &aName,
const AddressList &aAddresses,
ResultCallback &&aCallback,
DNSServiceRef aServiceRef,
Publisher *aPublisher)
: HostRegistration(aName, aAddresses, std::move(aCallback), aPublisher)
, mServiceRef(aServiceRef)
, mRecordRefMap()
Expand Down

0 comments on commit 7ec70b0

Please sign in to comment.