[dns-client] move 'QueryMetadata' as a a private nested type (#5345)

This commit is contained in:
Abtin Keshavarzian
2020-08-05 21:09:41 -07:00
committed by GitHub
parent 73a874ff9f
commit b9040673c9
2 changed files with 33 additions and 98 deletions
+17 -26
View File
@@ -48,30 +48,6 @@ using ot::Encoding::BigEndian::HostSwap16;
namespace ot {
namespace Dns {
QueryMetadata::QueryMetadata(void)
: mHostname(nullptr)
, mResponseHandler(nullptr)
, mResponseContext(nullptr)
, mTransmissionTime()
, mDestinationPort(0)
, mRetransmissionCount(0)
{
mSourceAddress.Clear();
mDestinationAddress.Clear();
}
QueryMetadata::QueryMetadata(otDnsResponseHandler aHandler, void *aContext)
: mHostname(nullptr)
, mResponseHandler(aHandler)
, mResponseContext(aContext)
, mTransmissionTime()
, mDestinationPort(0)
, mRetransmissionCount(0)
{
mSourceAddress.Clear();
mDestinationAddress.Clear();
}
Client::Client(Instance &aInstance)
: mSocket(aInstance)
, mMessageId(0)
@@ -112,7 +88,7 @@ otError Client::Stop(void)
otError Client::Query(const otDnsQuery *aQuery, otDnsResponseHandler aHandler, void *aContext)
{
otError error;
QueryMetadata queryMetadata(aHandler, aContext);
QueryMetadata queryMetadata;
Message * message = nullptr;
Message * messageCopy = nullptr;
Header header;
@@ -140,10 +116,12 @@ otError Client::Query(const otDnsQuery *aQuery, otDnsResponseHandler aHandler, v
messageInfo = static_cast<const Ip6::MessageInfo *>(aQuery->mMessageInfo);
queryMetadata.mHostname = aQuery->mHostname;
queryMetadata.mResponseHandler = aHandler;
queryMetadata.mResponseContext = aContext;
queryMetadata.mTransmissionTime = TimerMilli::GetNow() + kResponseTimeout;
queryMetadata.mSourceAddress = messageInfo->GetSockAddr();
queryMetadata.mDestinationPort = messageInfo->GetPeerPort();
queryMetadata.mDestinationAddress = messageInfo->GetPeerAddr();
queryMetadata.mDestinationPort = messageInfo->GetPeerPort();
queryMetadata.mRetransmissionCount = 0;
VerifyOrExit((messageCopy = CopyAndEnqueueMessage(*message, queryMetadata)) != nullptr, error = OT_ERROR_NO_BUFS);
@@ -522,6 +500,19 @@ exit:
}
}
void Client::QueryMetadata::ReadFrom(const Message &aMessage)
{
uint16_t length = aMessage.GetLength();
OT_ASSERT(length >= sizeof(*this));
aMessage.Read(length - sizeof(*this), sizeof(*this), this);
}
void Client::QueryMetadata::UpdateIn(Message &aMessage) const
{
aMessage.Write(aMessage.GetLength() - sizeof(*this), sizeof(*this), this);
}
} // namespace Dns
} // namespace ot
+16 -72
View File
@@ -47,78 +47,6 @@
namespace ot {
namespace Dns {
/**
* This class implements metadata required for DNS retransmission.
*
*/
class QueryMetadata
{
friend class Client;
public:
/**
* Default constructor for the object.
*
*/
QueryMetadata(void);
/**
* This constructor initializes the object with specific values.
*
* @param[in] aHandler Pointer to a handler function for the response.
* @param[in] aContext Context for the handler function.
*
*/
QueryMetadata(otDnsResponseHandler aHandler, void *aContext);
/**
* This method appends request data to the message.
*
* @param[in] aMessage A reference to the message.
*
* @retval OT_ERROR_NONE Successfully appended the bytes.
* @retval OT_ERROR_NO_BUFS Insufficient available buffers to grow the message.
*
*/
otError AppendTo(Message &aMessage) const { return aMessage.Append(this, sizeof(*this)); }
/**
* This method reads request data from the message.
*
* @param[in] aMessage A reference to the message.
*
*/
void ReadFrom(const Message &aMessage)
{
uint16_t length = aMessage.Read(aMessage.GetLength() - sizeof(*this), sizeof(*this), this);
OT_ASSERT(length == sizeof(*this));
OT_UNUSED_VARIABLE(length);
}
/**
* This method updates request data in the message.
*
* @param[in] aMessage A reference to the message.
*
* @returns The number of bytes updated.
*
*/
int UpdateIn(Message &aMessage) const
{
return aMessage.Write(aMessage.GetLength() - sizeof(*this), sizeof(*this), this);
}
private:
const char * mHostname; ///< A hostname to be find.
otDnsResponseHandler mResponseHandler; ///< A function pointer that is called on response reception.
void * mResponseContext; ///< A pointer to arbitrary context information.
TimeMilli mTransmissionTime; ///< Time when the timer should shoot for this message.
Ip6::Address mSourceAddress; ///< IPv6 address of the message source.
Ip6::Address mDestinationAddress; ///< IPv6 address of the message destination.
uint16_t mDestinationPort; ///< UDP port of the message destination.
uint8_t mRetransmissionCount; ///< Number of retransmissions.
};
/**
* This class implements DNS client.
*
@@ -193,6 +121,22 @@ private:
kBufSize = 16
};
struct QueryMetadata
{
otError AppendTo(Message &aMessage) const { return aMessage.Append(this, sizeof(*this)); }
void ReadFrom(const Message &aMessage);
void UpdateIn(Message &aMessage) const;
const char * mHostname;
otDnsResponseHandler mResponseHandler;
void * mResponseContext;
TimeMilli mTransmissionTime;
Ip6::Address mSourceAddress;
Ip6::Address mDestinationAddress;
uint16_t mDestinationPort;
uint8_t mRetransmissionCount;
};
Message *NewMessage(const Header &aHeader);
Message *CopyAndEnqueueMessage(const Message &aMessage, const QueryMetadata &aQueryMetadata);
void DequeueMessage(Message &aMessage);