mirror of
https://github.com/espressif/openthread.git
synced 2026-06-05 21:14:49 +00:00
[tlv] remove Tlv::ReadTlvValue() (#12768)
This commit removes the `Tlv::ReadTlvValue()` method which is no longer needed or used. The same functionality is provided through the `Tlv::Info` class, specifically using its `ParseFrom()` and `ReadValue()` methods. This approach is safer and provides more comprehensive information about the parsed TLV. The unit tests are also updated to replace the usage of the removed method with the new `Tlv::Info` based approach.
This commit is contained in:
committed by
GitHub
parent
f1794af0a7
commit
02aaf7cb73
@@ -200,18 +200,6 @@ template Error Tlv::Info::ReadUintValue<uint8_t>(const Message &aMessage, uint8_
|
||||
template Error Tlv::Info::ReadUintValue<uint16_t>(const Message &aMessage, uint16_t &aValue) const;
|
||||
template Error Tlv::Info::ReadUintValue<uint32_t>(const Message &aMessage, uint32_t &aValue) const;
|
||||
|
||||
Error Tlv::ReadTlvValue(const Message &aMessage, uint16_t aOffset, void *aValue, uint8_t aMinLength)
|
||||
{
|
||||
Error error;
|
||||
Info info;
|
||||
|
||||
SuccessOrExit(error = info.ParseFrom(aMessage, aOffset));
|
||||
error = info.ReadValue(aMessage, aValue, aMinLength);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
Error Tlv::FindStringTlv(const Message &aMessage, uint8_t aType, uint8_t aMaxStringLength, char *aValue)
|
||||
{
|
||||
Error error;
|
||||
|
||||
@@ -439,21 +439,6 @@ public:
|
||||
OffsetRange mValueOffsetRange;
|
||||
};
|
||||
|
||||
/**
|
||||
* Reads a TLV's value in a message at a given offset expecting a minimum length for the value.
|
||||
*
|
||||
* Can be used independent of whether the read TLV (from the message) is an Extended TLV or not.
|
||||
*
|
||||
* @param[in] aMessage The message to read from.
|
||||
* @param[in] aOffset The offset into the message pointing to the start of the TLV.
|
||||
* @param[out] aValue A buffer to output the TLV's value, must contain (at least) @p aMinLength bytes.
|
||||
* @param[in] aMinLength The minimum expected length of TLV and number of bytes to copy into @p aValue buffer.
|
||||
*
|
||||
* @retval kErrorNone Successfully read the TLV and copied @p aMinLength into @p aValue.
|
||||
* @retval kErrorParse The TLV was not well-formed and could not be parsed.
|
||||
*/
|
||||
static Error ReadTlvValue(const Message &aMessage, uint16_t aOffset, void *aValue, uint8_t aMinLength);
|
||||
|
||||
/**
|
||||
* Searches for and reads a requested TLV out of a given message.
|
||||
*
|
||||
|
||||
+44
-18
@@ -46,6 +46,7 @@ void TestTlv(void)
|
||||
Instance *instance = testInitInstance();
|
||||
Message *message;
|
||||
Tlv tlv;
|
||||
Tlv::Info tlvInfo;
|
||||
ExtendedTlv extTlv;
|
||||
Tlv::Bookmark bookmark;
|
||||
uint16_t offset;
|
||||
@@ -64,7 +65,7 @@ void TestTlv(void)
|
||||
VerifyOrQuit(message->GetLength() == 0);
|
||||
|
||||
VerifyOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 1, offsetRange) == kErrorNotFound);
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, 0, buffer, 1) == kErrorParse);
|
||||
VerifyOrQuit(tlvInfo.ParseFrom(*message, 0) == kErrorParse);
|
||||
|
||||
// Add an empty TLV with type 1 and check that we can find it
|
||||
|
||||
@@ -77,8 +78,11 @@ void TestTlv(void)
|
||||
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 1, offsetRange));
|
||||
VerifyOrQuit(offsetRange.GetOffset() == sizeof(Tlv));
|
||||
VerifyOrQuit(offsetRange.GetLength() == 0);
|
||||
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 0));
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1) == kErrorParse);
|
||||
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
|
||||
VerifyOrQuit(tlvInfo.GetType() == 1);
|
||||
VerifyOrQuit(tlvInfo.GetLength() == 0);
|
||||
VerifyOrQuit(!tlvInfo.IsExtended());
|
||||
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 1) == kErrorParse);
|
||||
|
||||
// Add an empty extended TLV (type 2), and check that we can find it.
|
||||
|
||||
@@ -91,8 +95,11 @@ void TestTlv(void)
|
||||
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 2, offsetRange));
|
||||
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(ExtendedTlv));
|
||||
VerifyOrQuit(offsetRange.GetLength() == 0);
|
||||
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 0));
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1) == kErrorParse);
|
||||
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
|
||||
VerifyOrQuit(tlvInfo.GetType() == 2);
|
||||
VerifyOrQuit(tlvInfo.GetLength() == 0);
|
||||
VerifyOrQuit(tlvInfo.IsExtended());
|
||||
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 1) == kErrorParse);
|
||||
|
||||
// Add a TLV with type 3 with one byte value and check if we can find it.
|
||||
|
||||
@@ -106,9 +113,13 @@ void TestTlv(void)
|
||||
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 3, offsetRange));
|
||||
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(Tlv));
|
||||
VerifyOrQuit(offsetRange.GetLength() == 1);
|
||||
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1));
|
||||
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
|
||||
VerifyOrQuit(tlvInfo.GetType() == 3);
|
||||
VerifyOrQuit(tlvInfo.GetLength() == 1);
|
||||
VerifyOrQuit(!tlvInfo.IsExtended());
|
||||
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 1));
|
||||
VerifyOrQuit(buffer[0] == 0x0ff);
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 2) == kErrorParse);
|
||||
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 2) == kErrorParse);
|
||||
|
||||
// Add an extended TLV with type 4 with two byte value and check if we can find it.
|
||||
|
||||
@@ -123,12 +134,16 @@ void TestTlv(void)
|
||||
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 4, offsetRange));
|
||||
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(ExtendedTlv));
|
||||
VerifyOrQuit(offsetRange.GetLength() == 2);
|
||||
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1));
|
||||
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
|
||||
VerifyOrQuit(tlvInfo.GetType() == 4);
|
||||
VerifyOrQuit(tlvInfo.GetLength() == 2);
|
||||
VerifyOrQuit(tlvInfo.IsExtended());
|
||||
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 1));
|
||||
VerifyOrQuit(buffer[0] == 0x12);
|
||||
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 2));
|
||||
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 2));
|
||||
VerifyOrQuit(buffer[0] == 0x12);
|
||||
VerifyOrQuit(buffer[1] == 0x34);
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 3) == kErrorParse);
|
||||
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 3) == kErrorParse);
|
||||
|
||||
// Add a TLV with missing value.
|
||||
|
||||
@@ -139,7 +154,7 @@ void TestTlv(void)
|
||||
SuccessOrQuit(message->Append(tlv));
|
||||
|
||||
VerifyOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 5, offsetRange) != kErrorNone);
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 0) == kErrorParse);
|
||||
VerifyOrQuit(tlvInfo.ParseFrom(*message, offset) == kErrorParse);
|
||||
|
||||
// Add the missing value.
|
||||
SuccessOrQuit(message->Append<uint8_t>(0xaa));
|
||||
@@ -147,9 +162,13 @@ void TestTlv(void)
|
||||
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 5, offsetRange));
|
||||
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(Tlv));
|
||||
VerifyOrQuit(offsetRange.GetLength() == 1);
|
||||
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1));
|
||||
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
|
||||
VerifyOrQuit(tlvInfo.GetType() == 5);
|
||||
VerifyOrQuit(tlvInfo.GetLength() == 1);
|
||||
VerifyOrQuit(!tlvInfo.IsExtended());
|
||||
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 1));
|
||||
VerifyOrQuit(buffer[0] == 0xaa);
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 2) == kErrorParse);
|
||||
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 2) == kErrorParse);
|
||||
|
||||
// Add an extended TLV with missing value.
|
||||
|
||||
@@ -161,17 +180,21 @@ void TestTlv(void)
|
||||
SuccessOrQuit(message->Append<uint8_t>(0xbb));
|
||||
|
||||
VerifyOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 6, offsetRange) != kErrorNone);
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1) == kErrorParse);
|
||||
VerifyOrQuit(tlvInfo.ParseFrom(*message, offset) == kErrorParse);
|
||||
|
||||
SuccessOrQuit(message->Append<uint8_t>(0xcc));
|
||||
|
||||
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 6, offsetRange) != kErrorNone);
|
||||
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(ExtendedTlv));
|
||||
VerifyOrQuit(offsetRange.GetLength() == 2);
|
||||
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 2));
|
||||
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
|
||||
VerifyOrQuit(tlvInfo.GetType() == 6);
|
||||
VerifyOrQuit(tlvInfo.GetLength() == 2);
|
||||
VerifyOrQuit(tlvInfo.IsExtended());
|
||||
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 2));
|
||||
VerifyOrQuit(buffer[0] == 0xbb);
|
||||
VerifyOrQuit(buffer[1] == 0xcc);
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 3) == kErrorParse);
|
||||
VerifyOrQuit(tlvInfo.ReadValue(*message, buffer, 3) == kErrorParse);
|
||||
|
||||
// Add an extended TLV with overflow length.
|
||||
|
||||
@@ -183,7 +206,7 @@ void TestTlv(void)
|
||||
SuccessOrQuit(message->Append<uint8_t>(0x11));
|
||||
|
||||
VerifyOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 7, offsetRange) != kErrorNone);
|
||||
VerifyOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 1) == kErrorParse);
|
||||
VerifyOrQuit(tlvInfo.ParseFrom(*message, offset) == kErrorParse);
|
||||
|
||||
//- - - - - - - - - - - - - - - - - - - - - -
|
||||
// Validate `StartTlv()`, `AdjustTlv()`, `EndTlv()`
|
||||
@@ -202,7 +225,10 @@ void TestTlv(void)
|
||||
SuccessOrQuit(Tlv::FindTlvValueOffsetRange(*message, /* aType */ 1, offsetRange));
|
||||
VerifyOrQuit(offsetRange.GetOffset() == offset + sizeof(Tlv));
|
||||
VerifyOrQuit(offsetRange.GetLength() == 3);
|
||||
SuccessOrQuit(Tlv::ReadTlvValue(*message, offset, buffer, 3));
|
||||
SuccessOrQuit(tlvInfo.ParseFrom(*message, offset));
|
||||
VerifyOrQuit(tlvInfo.GetLength() == 3);
|
||||
VerifyOrQuit(!tlvInfo.IsExtended());
|
||||
SuccessOrQuit(tlvInfo.ReadValue(*message, buffer, 3));
|
||||
VerifyOrQuit(buffer[0] == 0xab);
|
||||
VerifyOrQuit(buffer[1] == 0xcd);
|
||||
VerifyOrQuit(buffer[2] == 0xef);
|
||||
|
||||
Reference in New Issue
Block a user