Skip to content

Commit

Permalink
Restrict Responder sub types for QueryResponder (#7474)
Browse files Browse the repository at this point in the history
QueryResponder is derived from Responder, and has an AddResponder
function that looks like it can take other QueryResponders as
arguments. In reality, it's expecting one of IP/TXT/SRV/PTR Responders.
This add a subclass over the IP/TXT/SRV/PTR responder classes to
clarify the required function arguments for AddResponder.
  • Loading branch information
cecille authored and pull[bot] committed Jul 26, 2021
1 parent ccc5b67 commit 05cf195
Show file tree
Hide file tree
Showing 10 changed files with 55 additions and 20 deletions.
4 changes: 2 additions & 2 deletions src/lib/mdns/Advertiser_ImplMinimalMdns.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ class AdvertiserMinMdns : public ServiceAdvertiser,
/// interfaces on which the mDNS server is listening
bool ShouldAdvertiseOn(const chip::Inet::InterfaceId id, const chip::Inet::IPAddress & addr);

QueryResponderSettings AddAllocatedResponder(Responder * responder)
QueryResponderSettings AddAllocatedResponder(RecordResponder * responder)
{
if (responder == nullptr)
{
Expand Down Expand Up @@ -230,7 +230,7 @@ class AdvertiserMinMdns : public ServiceAdvertiser,
uint32_t mMessageId = 0;

// dynamically allocated items
Responder * mAllocatedResponders[kMaxAllocatedResponders];
RecordResponder * mAllocatedResponders[kMaxAllocatedResponders];
void * mAllocatedQNameParts[kMaxAllocatedQNameData];

const char * mEmptyTextEntries[1] = {
Expand Down
1 change: 1 addition & 0 deletions src/lib/mdns/minimal/responders/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ static_library("responders") {
"Ptr.h",
"QueryResponder.cpp",
"QueryResponder.h",
"RecordResponder.h",
"ReplyFilter.h",
"Responder.h",
"Srv.h",
Expand Down
10 changes: 5 additions & 5 deletions src/lib/mdns/minimal/responders/IP.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,23 @@

#pragma once

#include <mdns/minimal/responders/Responder.h>
#include <mdns/minimal/responders/RecordResponder.h>

namespace mdns {
namespace Minimal {

class IPv4Responder : public Responder
class IPv4Responder : public RecordResponder
{
public:
IPv4Responder(const FullQName & qname) : Responder(QType::A, qname) {}
IPv4Responder(const FullQName & qname) : RecordResponder(QType::A, qname) {}

void AddAllResponses(const chip::Inet::IPPacketInfo * source, ResponderDelegate * delegate) override;
};

class IPv6Responder : public Responder
class IPv6Responder : public RecordResponder
{
public:
IPv6Responder(const FullQName & qname) : Responder(QType::AAAA, qname) {}
IPv6Responder(const FullQName & qname) : RecordResponder(QType::AAAA, qname) {}

void AddAllResponses(const chip::Inet::IPPacketInfo * source, ResponderDelegate * delegate) override;
};
Expand Down
6 changes: 3 additions & 3 deletions src/lib/mdns/minimal/responders/Ptr.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@
#pragma once

#include <mdns/minimal/records/Ptr.h>
#include <mdns/minimal/responders/Responder.h>
#include <mdns/minimal/responders/RecordResponder.h>

namespace mdns {
namespace Minimal {

class PtrResponder : public Responder
class PtrResponder : public RecordResponder
{
public:
PtrResponder(const FullQName & qname, const FullQName & target) : Responder(QType::PTR, qname), mTarget(target) {}
PtrResponder(const FullQName & qname, const FullQName & target) : RecordResponder(QType::PTR, qname), mTarget(target) {}

void AddAllResponses(const chip::Inet::IPPacketInfo * source, ResponderDelegate * delegate) override
{
Expand Down
2 changes: 1 addition & 1 deletion src/lib/mdns/minimal/responders/QueryResponder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ void QueryResponderBase::Init()
}
}

QueryResponderSettings QueryResponderBase::AddResponder(Responder * responder)
QueryResponderSettings QueryResponderBase::AddResponder(RecordResponder * responder)
{
if (responder == nullptr)
{
Expand Down
3 changes: 2 additions & 1 deletion src/lib/mdns/minimal/responders/QueryResponder.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

#pragma once

#include "RecordResponder.h"
#include "ReplyFilter.h"
#include "Responder.h"

Expand Down Expand Up @@ -245,7 +246,7 @@ class QueryResponderBase : public Responder // "_services._dns-sd._udp.local"
/// Add a new responder to be processed
///
/// Return valid QueryResponderSettings on add success.
QueryResponderSettings AddResponder(Responder * responder);
QueryResponderSettings AddResponder(RecordResponder * responder);

/// Implementation of the responder delegate.
///
Expand Down
33 changes: 33 additions & 0 deletions src/lib/mdns/minimal/responders/RecordResponder.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
*
* Copyright (c) 2021 Project CHIP Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#pragma once

#include <mdns/minimal/responders/Responder.h>
namespace mdns {
namespace Minimal {

// This is a container class for the various record responders (PTR, SRV, TXT, A, AAAA etc.)
// This class is used to restrict the set of possible responders added to a QueryResponder.
class RecordResponder : public Responder
{
public:
RecordResponder(QType qType, const FullQName & qName) : Responder(qType, qName) {}
};

} // namespace Minimal
} // namespace mdns
6 changes: 3 additions & 3 deletions src/lib/mdns/minimal/responders/Srv.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@
#pragma once

#include <mdns/minimal/records/Srv.h>
#include <mdns/minimal/responders/Responder.h>
#include <mdns/minimal/responders/RecordResponder.h>

namespace mdns {
namespace Minimal {

class SrvResponder : public Responder
class SrvResponder : public RecordResponder
{
public:
SrvResponder(const SrvResourceRecord & record) : Responder(QType::SRV, record.GetName()), mRecord(record) {}
SrvResponder(const SrvResourceRecord & record) : RecordResponder(QType::SRV, record.GetName()), mRecord(record) {}

void AddAllResponses(const chip::Inet::IPPacketInfo * source, ResponderDelegate * delegate) override
{
Expand Down
6 changes: 3 additions & 3 deletions src/lib/mdns/minimal/responders/Txt.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@
#pragma once

#include <mdns/minimal/records/Txt.h>
#include <mdns/minimal/responders/Responder.h>
#include <mdns/minimal/responders/RecordResponder.h>

namespace mdns {
namespace Minimal {

class TxtResponder : public Responder
class TxtResponder : public RecordResponder
{
public:
TxtResponder(const TxtResourceRecord & record) : Responder(QType::TXT, record.GetName()), mRecord(record) {}
TxtResponder(const TxtResourceRecord & record) : RecordResponder(QType::TXT, record.GetName()), mRecord(record) {}

void AddAllResponses(const chip::Inet::IPPacketInfo * source, ResponderDelegate * delegate) override
{
Expand Down
4 changes: 2 additions & 2 deletions src/lib/mdns/minimal/responders/tests/TestQueryResponder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ const QNamePart kDnsSdname[] = { "_services", "_dns-sd", "_udp", "local" };
const QNamePart kName1[] = { "some", "test" };
const QNamePart kName2[] = { "some", "other", "test" };

class EmptyResponder : public Responder
class EmptyResponder : public RecordResponder
{
public:
EmptyResponder(const FullQName & qName) : Responder(QType::NULLVALUE, qName) {}
EmptyResponder(const FullQName & qName) : RecordResponder(QType::NULLVALUE, qName) {}
void AddAllResponses(const chip::Inet::IPPacketInfo *, ResponderDelegate *) override {}
};

Expand Down

0 comments on commit 05cf195

Please sign in to comment.