4
4
#include < string.h>
5
5
#include < support/CodeUtils.h>
6
6
#include < support/logging/CHIPLogging.h>
7
+ #include < lib/core/CHIPSafeCasts.h>
8
+
9
+ using namespace ::chip;
10
+
7
11
namespace chip {
8
12
namespace Inet {
9
13
10
14
using FilterOutcome = EndpointQueueFilter::FilterOutcome;
11
15
12
16
namespace {
13
17
14
- bool IsValidMdnsHostName (const CharSpan & hostName)
18
+ bool IsValidMdnsHostName (const Span< const unsigned char > & hostName)
15
19
{
16
20
for (size_t i = 0 ; i < hostName.size (); ++i)
17
21
{
@@ -30,7 +34,7 @@ bool IsMdnsBroadcastPacket(const IPPacketInfo & pktInfo, const System::PacketBuf
30
34
VerifyOrReturnValue (pktInfo.DestPort == 5353 , false );
31
35
#if INET_CONFIG_ENABLE_IPV4
32
36
ip_addr_t mdnsIPv4BroadcastAddr = IPADDR4_INIT_BYTES (224 , 0 , 0 , 251 );
33
- if (pktInfo.DestAddress == Inet::IPAddress (mdnsIPv4BroadcastAddr)
37
+ if (pktInfo.DestAddress == Inet::IPAddress (mdnsIPv4BroadcastAddr))
34
38
{
35
39
return true ;
36
40
}
@@ -43,7 +47,7 @@ bool IsMdnsBroadcastPacket(const IPPacketInfo & pktInfo, const System::PacketBuf
43
47
return false ;
44
48
}
45
49
46
- bool PayloadContainsCaseInsensitive (const System::PacketBufferHandle & payload, const ByteSpan & pattern)
50
+ bool PayloadContainsCaseInsensitive (const System::PacketBufferHandle & payload, const Span< const unsigned char > & pattern)
47
51
{
48
52
if (payload->TotalLength () == 0 || pattern.size () == 0 )
49
53
{
@@ -55,15 +59,14 @@ bool PayloadContainsCaseInsensitive(const System::PacketBufferHandle & payload,
55
59
return false ;
56
60
}
57
61
58
- CharSpan payloadView (reinterpret_cast <const char *>(payload->Start ()), payload->TotalLength ());
59
- CharSpan patternView (reinterpret_cast <const char *>(pattern.data ()), pattern.size ());
62
+ Span<const unsigned char > payloadView (payload->Start (), payload->TotalLength ());
60
63
61
- auto toLower = [](char c) { return std::tolower (static_cast <unsigned char >(c)); };
64
+ auto toLower = [](unsigned char c) { return std::tolower (static_cast <unsigned char >(c)); };
62
65
63
- auto it = std::search (payloadView.data (), payloadView.data () + payloadView. size (), patternView. data (),
64
- patternView. data () + patternView. size (), [&](char a, char b) { return toLower (a) == toLower (b); });
66
+ auto it = std::search (payloadView.begin (), payloadView.end (), pattern. begin (), pattern. end (),
67
+ [&](unsigned char a, unsigned char b) { return toLower (a) == toLower (b); });
65
68
66
- return (it != payloadView.data () + payloadView. size ());
69
+ return (it != payloadView.end ());
67
70
}
68
71
69
72
} // namespace
@@ -72,16 +75,16 @@ FilterOutcome HostNameFilter::Filter(const void * endpoint, const IPPacketInfo &
72
75
const System::PacketBufferHandle & pktPayload)
73
76
{
74
77
// Drop the mDNS packets which don't contain 'matter' or '<device-hostname>'.
75
- const uint8_t matterBytes[] = { ' m' , ' a' , ' t' , ' t' , ' e' , ' r' };
76
- if (PayloadContainsCaseInsensitive (pktPayload, ByteSpan (matterBytes)) ||
77
- PayloadContainsCaseInsensitive (pktPayload, ByteSpan (mHostName )))
78
+ const unsigned char matterBytes[] = { ' m' , ' a' , ' t' , ' t' , ' e' , ' r' };
79
+ if (PayloadContainsCaseInsensitive (pktPayload, Span< const unsigned char > (matterBytes, sizeof (matterBytes) )) ||
80
+ PayloadContainsCaseInsensitive (pktPayload, Span< const unsigned char > (mHostName , sizeof ( mHostName ) )))
78
81
{
79
82
return FilterOutcome::kAllowPacket ;
80
83
}
81
84
return FilterOutcome::kDropPacket ;
82
85
}
83
86
84
- CHIP_ERROR HostNameFilter::SetHostName (const CharSpan & hostName)
87
+ CHIP_ERROR HostNameFilter::SetHostName (Span< const unsigned char > & hostName)
85
88
{
86
89
VerifyOrReturnError (IsValidMdnsHostName (hostName), CHIP_ERROR_INVALID_ARGUMENT);
87
90
memcpy (mHostName , hostName.data (), hostName.size ());
0 commit comments