[ip6] add new versions of NewMessage() (#9038)

This commit adds new versions of `NewMessage()` in `Ip6`, `Udp` with
different set of parameters. It also updated the code to avoid use of
default parameter value.
This commit is contained in:
Abtin Keshavarzian
2023-05-11 11:49:46 -07:00
committed by GitHub
parent cea434e98f
commit 2f995999f4
15 changed files with 87 additions and 21 deletions
+1 -1
View File
@@ -300,7 +300,7 @@ template <> void BorderAgent::HandleTmf<kUriProxyTx>(Coap::Message &aMessage, co
VerifyOrExit(udpEncapHeader.GetSourcePort() > 0 && udpEncapHeader.GetDestinationPort() > 0, error = kErrorDrop);
VerifyOrExit((message = Get<Ip6::Udp>().NewMessage(0)) != nullptr, error = kErrorNoBufs);
VerifyOrExit((message = Get<Ip6::Udp>().NewMessage()) != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = message->AppendBytesFromMessage(aMessage, offset, length));
messageInfo.SetSockPort(udpEncapHeader.GetSourcePort());
+1 -1
View File
@@ -975,7 +975,7 @@ Error Dtls::HandleDtlsSend(const uint8_t *aBuf, uint16_t aLength, Message::SubTy
Error error = kErrorNone;
ot::Message *message = nullptr;
VerifyOrExit((message = mSocket.NewMessage(0)) != nullptr, error = kErrorNoBufs);
VerifyOrExit((message = mSocket.NewMessage()) != nullptr, error = kErrorNoBufs);
message->SetSubType(aMessageSubType);
message->SetLinkSecurityEnabled(mLayerTwoSecurity);
+1 -1
View File
@@ -263,7 +263,7 @@ void Client::Solicit(uint16_t aRloc16)
Message *message;
Ip6::MessageInfo messageInfo;
VerifyOrExit((message = mSocket.NewMessage(0)) != nullptr, error = kErrorNoBufs);
VerifyOrExit((message = mSocket.NewMessage()) != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = AppendHeader(*message));
SuccessOrExit(error = AppendElapsedTime(*message));
+1 -1
View File
@@ -339,7 +339,7 @@ Error Server::SendReply(const Ip6::Address &aDst,
Ip6::MessageInfo messageInfo;
Message *message;
VerifyOrExit((message = mSocket.NewMessage(0)) != nullptr, error = kErrorNoBufs);
VerifyOrExit((message = mSocket.NewMessage()) != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = AppendHeader(*message, aTransactionId));
SuccessOrExit(error = AppendServerIdentifier(*message));
SuccessOrExit(error = AppendClientIdentifier(*message, aClientId));
+2 -2
View File
@@ -1054,7 +1054,7 @@ Error Client::SendQuery(Query &aQuery, QueryInfo &aInfo, bool aUpdateTimer)
header.SetQuestionCount(kQuestionCount[aInfo.mQueryType]);
message = mSocket.NewMessage(0);
message = mSocket.NewMessage();
VerifyOrExit(message != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = message->Append(header));
@@ -1658,7 +1658,7 @@ void Client::HandleTcpReceiveAvailable(otTcpEndpoint *aEndpoint,
SuccessOrExit(mEndpoint.ReceiveByReference(data));
VerifyOrExit(data != nullptr);
message = mSocket.NewMessage(0);
message = mSocket.NewMessage();
VerifyOrExit(message != nullptr);
while (aBytesAvailable > totalRead)
+1 -1
View File
@@ -179,7 +179,7 @@ void Server::ProcessQuery(const Header &aRequestHeader, Message &aRequestMessage
}
#endif
responseMessage = mSocket.NewMessage(0);
responseMessage = mSocket.NewMessage();
VerifyOrExit(responseMessage != nullptr, error = kErrorNoBufs);
// Allocate space for DNS header
+1 -1
View File
@@ -54,7 +54,7 @@ Icmp::Icmp(Instance &aInstance)
{
}
Message *Icmp::NewMessage(uint16_t aReserved) { return Get<Ip6>().NewMessage(sizeof(Header) + aReserved); }
Message *Icmp::NewMessage(void) { return Get<Ip6>().NewMessage(sizeof(Header)); }
Error Icmp::RegisterHandler(Handler &aHandler) { return mHandlers.Add(aHandler); }
+1 -3
View File
@@ -242,12 +242,10 @@ public:
/**
* This method returns a new ICMP message with sufficient header space reserved.
*
* @param[in] aReserved The number of header bytes to reserve after the ICMP header.
*
* @returns A pointer to the message or `nullptr` if no buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved);
Message *NewMessage(void);
/**
* This method registers ICMPv6 handler.
+6 -2
View File
@@ -81,6 +81,10 @@ Ip6::Ip6(Instance &aInstance)
#endif
}
Message *Ip6::NewMessage(void) { return NewMessage(0); }
Message *Ip6::NewMessage(uint16_t aReserved) { return NewMessage(aReserved, Message::Settings::GetDefault()); }
Message *Ip6::NewMessage(uint16_t aReserved, const Message::Settings &aSettings)
{
return Get<MessagePool>().Allocate(
@@ -594,7 +598,7 @@ Error Ip6::FragmentDatagram(Message &aMessage, uint8_t aIpProto)
offset = fragmentCnt * FragmentHeader::BytesToFragmentOffset(maxPayloadFragment);
fragmentHeader.SetOffset(offset);
VerifyOrExit((fragment = NewMessage(0)) != nullptr, error = kErrorNoBufs);
VerifyOrExit((fragment = NewMessage()) != nullptr, error = kErrorNoBufs);
IgnoreError(fragment->SetPriority(aMessage.GetPriority()));
SuccessOrExit(error = fragment->SetLength(aMessage.GetOffset() + sizeof(fragmentHeader) + payloadFragment));
@@ -677,7 +681,7 @@ Error Ip6::HandleFragment(Message &aMessage, MessageOrigin aOrigin, MessageInfo
if (message == nullptr)
{
LogDebg("start reassembly");
VerifyOrExit((message = NewMessage(0)) != nullptr, error = kErrorNoBufs);
VerifyOrExit((message = NewMessage()) != nullptr, error = kErrorNoBufs);
mReassemblyList.Enqueue(*message);
message->SetTimestampToNow();
+21 -1
View File
@@ -135,6 +135,26 @@ public:
*/
explicit Ip6(Instance &aInstance);
/**
* This method allocates a new message buffer from the buffer pool with default settings (link security
* enabled and `kPriorityMedium`).
*
* @returns A pointer to the message or `nullptr` if insufficient message buffers are available.
*
*/
Message *NewMessage(void);
/**
* This method allocates a new message buffer from the buffer pool with default settings (link security
* enabled and `kPriorityMedium`).
*
* @param[in] aReserved The number of header bytes to reserve following the IPv6 header.
*
* @returns A pointer to the message or `nullptr` if insufficient message buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved);
/**
* This method allocates a new message buffer from the buffer pool.
*
@@ -144,7 +164,7 @@ public:
* @returns A pointer to the message or `nullptr` if insufficient message buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved, const Message::Settings &aSettings = Message::Settings::GetDefault());
Message *NewMessage(uint16_t aReserved, const Message::Settings &aSettings);
/**
* This method allocates a new message buffer from the buffer pool and writes the IPv6 datagram to the message.
+1 -1
View File
@@ -744,7 +744,7 @@ void Client::SendUpdate(void)
};
Error error = kErrorNone;
Message *message = mSocket.NewMessage(0);
Message *message = mSocket.NewMessage();
uint32_t length;
VerifyOrExit(message != nullptr, error = kErrorNoBufs);
+3 -3
View File
@@ -1202,7 +1202,7 @@ Error Server::VerifySignature(const Dns::Ecdsa256KeyRecord &aKeyRecord,
// The uncompressed (canonical) form of the signer name should be used for signature
// verification. See https://tools.ietf.org/html/rfc2931#section-3.1 for details.
signerNameMessage = Get<Ip6::Udp>().NewMessage(0);
signerNameMessage = Get<Ip6::Udp>().NewMessage();
VerifyOrExit(signerNameMessage != nullptr, error = kErrorNoBufs);
SuccessOrExit(error = Dns::Name::AppendName(aSignerName, *signerNameMessage));
sha256.Update(*signerNameMessage, signerNameMessage->GetOffset(), signerNameMessage->GetLength());
@@ -1399,7 +1399,7 @@ void Server::SendResponse(const Dns::UpdateHeader &aHeader,
Message *response = nullptr;
Dns::UpdateHeader header;
response = GetSocket().NewMessage(0);
response = GetSocket().NewMessage();
VerifyOrExit(response != nullptr, error = kErrorNoBufs);
header.SetMessageId(aHeader.GetMessageId());
@@ -1442,7 +1442,7 @@ void Server::SendResponse(const Dns::UpdateHeader &aHeader,
Dns::LeaseOption leaseOption;
uint16_t optionSize;
response = GetSocket().NewMessage(0);
response = GetSocket().NewMessage();
VerifyOrExit(response != nullptr, error = kErrorNoBufs);
header.SetMessageId(aHeader.GetMessageId());
+8
View File
@@ -77,6 +77,10 @@ Udp::Socket::Socket(Instance &aInstance)
Clear();
}
Message *Udp::Socket::NewMessage(void) { return NewMessage(0); }
Message *Udp::Socket::NewMessage(uint16_t aReserved) { return NewMessage(aReserved, Message::Settings::GetDefault()); }
Message *Udp::Socket::NewMessage(uint16_t aReserved, const Message::Settings &aSettings)
{
return Get<Udp>().NewMessage(aReserved, aSettings);
@@ -414,6 +418,10 @@ uint16_t Udp::GetEphemeralPort(void)
return mEphemeralPort;
}
Message *Udp::NewMessage(void) { return NewMessage(0); }
Message *Udp::NewMessage(uint16_t aReserved) { return NewMessage(aReserved, Message::Settings::GetDefault()); }
Message *Udp::NewMessage(uint16_t aReserved, const Message::Settings &aSettings)
{
return Get<Ip6>().NewMessage(sizeof(Header) + aReserved, aSettings);
+38 -2
View File
@@ -161,6 +161,24 @@ public:
*/
explicit Socket(Instance &aInstance);
/**
* This method returns a new UDP message with default settings (link security enabled and `kPriorityNormal`)
*
* @returns A pointer to the message or `nullptr` if no buffers are available.
*
*/
Message *NewMessage(void);
/**
* This method returns a new UDP message with default settings (link security enabled and `kPriorityNormal`)
*
* @param[in] aReserved The number of header bytes to reserve after the UDP header.
*
* @returns A pointer to the message or `nullptr` if no buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved);
/**
* This method returns a new UDP message with sufficient header space reserved.
*
@@ -170,7 +188,7 @@ public:
* @returns A pointer to the message or `nullptr` if no buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved, const Message::Settings &aSettings = Message::Settings::GetDefault());
Message *NewMessage(uint16_t aReserved, const Message::Settings &aSettings);
/**
* This method opens the UDP socket.
@@ -533,6 +551,24 @@ public:
*/
uint16_t GetEphemeralPort(void);
/**
* This method returns a new UDP message with default settings (link security enabled and `kPriorityNormal`)
*
* @returns A pointer to the message or `nullptr` if no buffers are available.
*
*/
Message *NewMessage(void);
/**
* This method returns a new UDP message with default settings (link security enabled and `kPriorityNormal`)
*
* @param[in] aReserved The number of header bytes to reserve after the UDP header.
*
* @returns A pointer to the message or `nullptr` if no buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved);
/**
* This method returns a new UDP message with sufficient header space reserved.
*
@@ -542,7 +578,7 @@ public:
* @returns A pointer to the message or `nullptr` if no buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved, const Message::Settings &aSettings = Message::Settings::GetDefault());
Message *NewMessage(uint16_t aReserved, const Message::Settings &aSettings);
/**
* This method sends an IPv6 datagram.
+1 -1
View File
@@ -135,7 +135,7 @@ void PingSender::SendPing(void)
messageInfo.mHopLimit = mConfig.mHopLimit;
messageInfo.mAllowZeroHopLimit = mConfig.mAllowZeroHopLimit;
message = Get<Ip6::Icmp>().NewMessage(0);
message = Get<Ip6::Icmp>().NewMessage();
VerifyOrExit(message != nullptr);
SuccessOrExit(message->Append(HostSwap32(now.GetValue())));