update server data register (n/sd -> a/sd) (#356)

This commit is contained in:
rongli
2016-08-11 00:24:42 +08:00
committed by Jonathan Hui
parent 66dce223d6
commit 4130c99fb1
4 changed files with 37 additions and 4 deletions
+5 -3
View File
@@ -563,18 +563,20 @@ void Leader::HandleServerData(void *aContext, Coap::Header &aHeader, Message &aM
void Leader::HandleServerData(Coap::Header &aHeader, Message &aMessage,
const Ip6::MessageInfo &aMessageInfo)
{
ThreadNetworkDataTlv threadNetworkDataTlv;
uint8_t tlvsLength;
uint8_t tlvs[kMaxSize];
uint16_t rloc16;
otLogInfoNetData("Received network data registration\n");
tlvsLength = aMessage.GetLength() - aMessage.GetOffset();
aMessage.Read(aMessage.GetOffset(), sizeof(threadNetworkDataTlv), &threadNetworkDataTlv);
tlvsLength = threadNetworkDataTlv.GetLength();
aMessage.Read(aMessage.GetOffset(), tlvsLength, tlvs);
aMessage.Read(aMessage.GetOffset() + sizeof(threadNetworkDataTlv), tlvsLength, tlvs);
rloc16 = HostSwap16(aMessageInfo.mPeerAddr.mFields.m16[7]);
SendServerDataResponse(aHeader, aMessageInfo, tlvs, tlvsLength);
SendServerDataResponse(aHeader, aMessageInfo, NULL, 0);
RegisterNetworkData(rloc16, tlvs, tlvsLength);
}
+4
View File
@@ -205,6 +205,7 @@ ThreadError Local::Register(const Ip6::Address &aDestination)
Coap::Header header;
Message *message;
Ip6::MessageInfo messageInfo;
ThreadNetworkDataTlv threadNetworkDataTlv;
UpdateRloc();
mSocket.Open(&HandleUdpReceive, this);
@@ -226,6 +227,9 @@ ThreadError Local::Register(const Ip6::Address &aDestination)
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
SuccessOrExit(error = message->Append(header.GetBytes(), header.GetLength()));
threadNetworkDataTlv.Init();
threadNetworkDataTlv.SetLength(mLength);
SuccessOrExit(error = message->Append(&threadNetworkDataTlv, sizeof(threadNetworkDataTlv)));
SuccessOrExit(error = message->Append(mTlvs, mLength));
memset(&messageInfo, 0, sizeof(messageInfo));
+27
View File
@@ -71,6 +71,9 @@ public:
kStatus = 4, ///< Status TLV
kLastTransactionTime = 6, ///< Time Since Last Transaction TLV
kRouterMask = 7, ///< Router Mask TLV
kNDOption = 8, ///< ND Option TLV
kNDData = 9, ///< ND Data TLV
kThreadNetworkData = 10, ///< Thread Network Data TLV
};
/**
@@ -462,6 +465,30 @@ private:
uint8_t mAssignedRouterIdMask[BitVectorBytes(Mle::kMaxRouterId)];
};
/**
* This class implements Thread Network Data TLV generation and parsing.
*
*/
OT_TOOL_PACKED_BEGIN
class ThreadNetworkDataTlv: public ThreadTlv
{
public:
/**
* This method initializes the TLV.
*
*/
void Init() { SetType(kThreadNetworkData); SetLength(0); }
/**
* This method overrides same method of the base class
*
* @retval TRUE the TLV appears to be well-formed.
*
*/
bool IsValid() const { return true; }
} OT_TOOL_PACKED_END;
} // namespace Thread
#endif // THREAD_TLVS_HPP_
+1 -1
View File
@@ -96,7 +96,7 @@ namespace Thread {
* The URI Path for Server Data Registration.
*
*/
#define OPENTHREAD_URI_SERVER_DATA "n/sd"
#define OPENTHREAD_URI_SERVER_DATA "a/sd"
} // namespace Thread