mirror of
https://github.com/espressif/openthread.git
synced 2026-08-20 17:39:51 +00:00
[dns] TxtEntry::AppendEntries() to append into a buffer (#7176)
This commit adds new flavor of `Dns::TxtEntry::AppendEntries()` to encode and append TXT record entries in a data buffer (in addition to existing one which appends to a `Message`). `Appender` class is used in the underlying implementation . This commit also updates `test_dns` unit test to validate newly added method.
This commit is contained in:
committed by
Jonathan Hui
parent
7c284b1517
commit
56ca28882a
+25
-16
@@ -1185,14 +1185,15 @@ void TestDnsTxtEntry(void)
|
||||
{kEncodedTxt5, sizeof(kEncodedTxt5)}, {kEncodedTxt6, sizeof(kEncodedTxt6)},
|
||||
{kEncodedTxt7, sizeof(kEncodedTxt7)}};
|
||||
|
||||
Instance * instance;
|
||||
MessagePool * messagePool;
|
||||
Message * message;
|
||||
uint8_t txtData[kMaxTxtDataSize];
|
||||
uint16_t txtDataLength;
|
||||
uint8_t index;
|
||||
Dns::TxtEntry txtEntry;
|
||||
Dns::TxtEntry::Iterator iterator;
|
||||
Instance * instance;
|
||||
MessagePool * messagePool;
|
||||
Message * message;
|
||||
uint8_t txtData[kMaxTxtDataSize];
|
||||
uint16_t txtDataLength;
|
||||
uint8_t index;
|
||||
Dns::TxtEntry txtEntry;
|
||||
Dns::TxtEntry::Iterator iterator;
|
||||
MutableData<kWithUint16Length> data;
|
||||
|
||||
printf("================================================================\n");
|
||||
printf("TestDnsTxtEntry()\n");
|
||||
@@ -1203,14 +1204,17 @@ void TestDnsTxtEntry(void)
|
||||
messagePool = &instance->Get<MessagePool>();
|
||||
VerifyOrQuit((message = messagePool->New(Message::kTypeIp6, 0)) != nullptr);
|
||||
|
||||
SuccessOrQuit(Dns::TxtEntry::AppendEntries(kTxtEntries, OT_ARRAY_LENGTH(kTxtEntries), *message));
|
||||
|
||||
txtDataLength = message->GetLength();
|
||||
data.Init(txtData, sizeof(txtData));
|
||||
SuccessOrQuit(Dns::TxtEntry::AppendEntries(kTxtEntries, OT_ARRAY_LENGTH(kTxtEntries), data));
|
||||
VerifyOrQuit(data.GetBytes() == txtData);
|
||||
txtDataLength = data.GetLength();
|
||||
VerifyOrQuit(txtDataLength < kMaxTxtDataSize, "TXT data is too long");
|
||||
|
||||
SuccessOrQuit(message->Read(0, txtData, txtDataLength));
|
||||
DumpBuffer("txt data", txtData, txtDataLength);
|
||||
|
||||
SuccessOrQuit(Dns::TxtEntry::AppendEntries(kTxtEntries, OT_ARRAY_LENGTH(kTxtEntries), *message));
|
||||
VerifyOrQuit(txtDataLength == message->GetLength());
|
||||
VerifyOrQuit(message->CompareBytes(0, txtData, txtDataLength));
|
||||
|
||||
index = 0;
|
||||
for (const EncodedTxtData &encodedData : kEncodedTxtData)
|
||||
{
|
||||
@@ -1272,12 +1276,17 @@ void TestDnsTxtEntry(void)
|
||||
// Verify appending empty txt data
|
||||
|
||||
SuccessOrQuit(message->SetLength(0));
|
||||
SuccessOrQuit(Dns::TxtEntry::AppendEntries(nullptr, 0, *message), "AppendEntries() failed with empty array");
|
||||
txtDataLength = message->GetLength();
|
||||
|
||||
data.Init(txtData, sizeof(txtData));
|
||||
SuccessOrQuit(Dns::TxtEntry::AppendEntries(nullptr, 0, data), "AppendEntries() failed with empty array");
|
||||
txtDataLength = data.GetLength();
|
||||
VerifyOrQuit(txtDataLength == sizeof(uint8_t), "Data length is incorrect with empty array");
|
||||
SuccessOrQuit(message->Read(0, txtData, txtDataLength));
|
||||
VerifyOrQuit(txtData[0] == 0, "Data is invalid with empty array");
|
||||
|
||||
SuccessOrQuit(Dns::TxtEntry::AppendEntries(nullptr, 0, *message), "AppendEntries() failed with empty array");
|
||||
VerifyOrQuit(message->GetLength() == txtDataLength);
|
||||
VerifyOrQuit(message->CompareBytes(0, txtData, txtDataLength));
|
||||
|
||||
SuccessOrQuit(message->SetLength(0));
|
||||
txtEntry.mKey = nullptr;
|
||||
txtEntry.mValue = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user