Remove globals from udp6.cpp.

This commit is contained in:
Jonathan Hui
2016-09-07 13:30:22 -07:00
parent 2029ef62eb
commit 239e99d762
15 changed files with 232 additions and 97 deletions
+2 -1
View File
@@ -750,7 +750,8 @@ typedef struct otUdpSocket
otSockAddr mPeerName; ///< The peer IPv6 socket address.
otUdpReceive mHandler; ///< A function pointer to the application callback.
void *mContext; ///< A pointer to application-specific context.
struct otUdpSocket *mNext; ///< A pointer to the next UDP socket.
void *mTransport; ///< A pointer to the transport object (internal use only).
struct otUdpSocket *mNext; ///< A pointer to the next UDP socket (internal use only).
} otUdpSocket;
/**
+7 -1
View File
@@ -37,7 +37,8 @@
namespace Thread {
namespace Coap {
Server::Server(uint16_t aPort)
Server::Server(Ip6::Udp &aUdp, uint16_t aPort):
mSocket(aUdp)
{
mPort = aPort;
mResources = NULL;
@@ -131,6 +132,11 @@ exit:
{}
}
Message *Server::NewMessage(uint16_t aReserved)
{
return mSocket.NewMessage(aReserved);
}
ThreadError Server::SendMessage(Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
{
return mSocket.SendTo(aMessage, aMessageInfo);
+14 -1
View File
@@ -104,8 +104,11 @@ public:
/**
* This constructor initializes the object.
*
* @param[in] aUdp A reference to the UDP object.
* @param[in] aPort The port to listen on.
*
*/
explicit Server(uint16_t aPort);
Server(Ip6::Udp &aUdp, uint16_t aPort);
/**
* This method starts the CoAP server.
@@ -134,6 +137,16 @@ public:
*/
ThreadError AddResource(Resource &aResource);
/**
* This method returns a new UDP message with sufficient header space reserved.
*
* @param[in] aReserved The number of header bytes to reserve after the UDP header.
*
* @returns A pointer to the message or NULL if no buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved);
/**
* This method sends a CoAP response from the server.
*
+3 -2
View File
@@ -49,6 +49,7 @@ namespace Ip6 {
Ip6::Ip6(void):
mIcmp(*this),
mUdp(*this),
mForwardingEnabled(false),
mReceiveIp6DatagramCallback(NULL),
mReceiveIp6DatagramCallbackContext(NULL),
@@ -178,7 +179,7 @@ ThreadError Ip6::SendDatagram(Message &message, MessageInfo &messageInfo, IpProt
switch (ipproto)
{
case kProtoUdp:
SuccessOrExit(error = Udp::UpdateChecksum(message, checksum));
SuccessOrExit(error = mUdp.UpdateChecksum(message, checksum));
break;
case kProtoIcmp6:
@@ -314,7 +315,7 @@ ThreadError Ip6::HandlePayload(Message &message, MessageInfo &messageInfo, uint8
switch (ipproto)
{
case kProtoUdp:
ExitNow(error = Udp::HandleMessage(message, messageInfo));
ExitNow(error = mUdp.HandleMessage(message, messageInfo));
case kProtoIcmp6:
ExitNow(error = mIcmp.HandleMessage(message, messageInfo));
+2
View File
@@ -45,6 +45,7 @@
#include <net/ip6_mpl.hpp>
#include <net/netif.hpp>
#include <net/socket.hpp>
#include <net/udp6.hpp>
using Thread::Encoding::BigEndian::HostSwap16;
using Thread::Encoding::BigEndian::HostSwap32;
@@ -241,6 +242,7 @@ public:
void SetForwardingEnabled(bool aEnable);
Icmp mIcmp;
Udp mUdp;
private:
void ProcessReceiveCallback(const Message &aMessage, const MessageInfo &aMessageInfo, uint8_t aIpProto);
+86 -50
View File
@@ -41,36 +41,26 @@
using Thread::Encoding::BigEndian::HostSwap16;
namespace Thread {
extern Ip6::Ip6 *sIp6;
namespace Ip6 {
UdpSocket *Udp::sSockets = NULL;
uint16_t Udp::sEphemeralPort = kDynamicPortMin;
UdpSocket::UdpSocket(Udp &aUdp)
{
mTransport = &aUdp;
}
Message *UdpSocket::NewMessage(uint16_t aReserved)
{
return static_cast<Udp *>(mTransport)->NewMessage(aReserved);
}
ThreadError UdpSocket::Open(otUdpReceive aHandler, void *aContext)
{
ThreadError error = kThreadError_None;
for (UdpSocket *cur = Udp::sSockets; cur; cur = cur->GetNext())
{
if (cur == this)
{
ExitNow();
}
}
memset(&mSockName, 0, sizeof(mSockName));
memset(&mPeerName, 0, sizeof(mPeerName));
mHandler = aHandler;
mContext = aContext;
SetNext(Udp::sSockets);
Udp::sSockets = this;
exit:
return error;
return static_cast<Udp *>(mTransport)->AddSocket(*this);
}
ThreadError UdpSocket::Bind(const SockAddr &aSockAddr)
@@ -81,27 +71,14 @@ ThreadError UdpSocket::Bind(const SockAddr &aSockAddr)
ThreadError UdpSocket::Close(void)
{
if (Udp::sSockets == this)
{
Udp::sSockets = Udp::sSockets->GetNext();
}
else
{
for (UdpSocket *socket = Udp::sSockets; socket; socket = socket->GetNext())
{
if (socket->GetNext() == this)
{
socket->SetNext(GetNext());
break;
}
}
}
ThreadError error = kThreadError_None;
SuccessOrExit(error = static_cast<Udp *>(mTransport)->RemoveSocket(*this));
memset(&mSockName, 0, sizeof(mSockName));
memset(&mPeerName, 0, sizeof(mPeerName));
SetNext(NULL);
return kThreadError_None;
exit:
return error;
}
ThreadError UdpSocket::SendTo(Message &aMessage, const MessageInfo &aMessageInfo)
@@ -119,16 +96,7 @@ ThreadError UdpSocket::SendTo(Message &aMessage, const MessageInfo &aMessageInfo
if (GetSockName().mPort == 0)
{
GetSockName().mPort = Udp::sEphemeralPort;
if (Udp::sEphemeralPort < Udp::kDynamicPortMax)
{
Udp::sEphemeralPort++;
}
else
{
Udp::sEphemeralPort = Udp::kDynamicPortMin;
}
GetSockName().mPort = static_cast<Udp *>(mTransport)->GetEphemeralPort();
}
udpHeader.SetSourcePort(GetSockName().mPort);
@@ -138,15 +106,83 @@ ThreadError UdpSocket::SendTo(Message &aMessage, const MessageInfo &aMessageInfo
SuccessOrExit(error = aMessage.Prepend(&udpHeader, sizeof(udpHeader)));
aMessage.SetOffset(0);
SuccessOrExit(error = sIp6->SendDatagram(aMessage, messageInfoLocal, kProtoUdp));
SuccessOrExit(error = static_cast<Udp *>(mTransport)->SendDatagram(aMessage, messageInfoLocal, kProtoUdp));
exit:
return error;
}
Udp::Udp(Ip6 &aIp6):
mEphemeralPort(kDynamicPortMin),
mSockets(NULL),
mIp6(aIp6)
{
}
ThreadError Udp::AddSocket(UdpSocket &aSocket)
{
for (UdpSocket *cur = mSockets; cur; cur = cur->GetNext())
{
if (cur == &aSocket)
{
ExitNow();
}
}
aSocket.SetNext(mSockets);
mSockets = &aSocket;
exit:
return kThreadError_None;
}
ThreadError Udp::RemoveSocket(UdpSocket &aSocket)
{
if (mSockets == &aSocket)
{
mSockets = mSockets->GetNext();
}
else
{
for (UdpSocket *socket = mSockets; socket; socket = socket->GetNext())
{
if (socket->GetNext() == &aSocket)
{
socket->SetNext(socket->GetNext());
break;
}
}
}
aSocket.SetNext(NULL);
return kThreadError_None;
}
uint16_t Udp::GetEphemeralPort(void)
{
uint16_t rval = mEphemeralPort;
if (mEphemeralPort < kDynamicPortMax)
{
mEphemeralPort++;
}
else
{
mEphemeralPort = kDynamicPortMin;
}
return rval;
}
Message *Udp::NewMessage(uint16_t aReserved)
{
return sIp6->NewMessage(sizeof(UdpHeader) + aReserved);
return mIp6.NewMessage(sizeof(UdpHeader) + aReserved);
}
ThreadError Udp::SendDatagram(Message &aMessage, MessageInfo &aMessageInfo, IpProto aIpProto)
{
return mIp6.SendDatagram(aMessage, aMessageInfo, aIpProto);
}
ThreadError Udp::HandleMessage(Message &aMessage, MessageInfo &aMessageInfo)
@@ -173,7 +209,7 @@ ThreadError Udp::HandleMessage(Message &aMessage, MessageInfo &aMessageInfo)
aMessageInfo.mSockPort = udpHeader.GetDestinationPort();
// find socket
for (UdpSocket *socket = Udp::sSockets; socket; socket = socket->GetNext())
for (UdpSocket *socket = mSockets; socket; socket = socket->GetNext())
{
if (socket->GetSockName().mPort != udpHeader.GetDestinationPort())
{
+80 -9
View File
@@ -35,11 +35,13 @@
#define UDP6_HPP_
#include <openthread.h>
#include <net/ip6.hpp>
#include <net/ip6_headers.hpp>
namespace Thread {
namespace Ip6 {
class Udp;
/**
* @addtogroup core-udp
*
@@ -59,6 +61,24 @@ class UdpSocket: public otUdpSocket
friend class Udp;
public:
/**
* This constructor initializes the object.
*
* @param[in] aUdp A reference to the UDP transport object.
*
*/
UdpSocket(Udp &aUdp);
/**
* This method returns a new UDP message with sufficient header space reserved.
*
* @param[in] aReserved The number of header bytes to reserve after the UDP header.
*
* @returns A pointer to the message or NULL if no buffers are available.
*
*/
Message *NewMessage(uint16_t aReserved);
/**
* This method opens the UDP socket.
*
@@ -124,17 +144,66 @@ class Udp
public:
/**
* This static method returns a new UDP message with sufficient header space reserved.
* This constructor initializes the object.
*
* @param[in] aIp6 A reference to the IPv6 network object.
*
*/
Udp(Ip6 &aIp6);
/**
* This method adds a UDP socket.
*
* @param[in] aSocket A reference to the UDP socket.
*
* @retval kThreadError_None Successfully added the UDP socket.
*
*/
ThreadError AddSocket(UdpSocket &aSocket);
/**
* This method removes a UDP socket.
*
* @param[in] aSocket A reference to the UDP socket.
*
* @retval kThreadError_None Successfully removed the UDP socket.
*
*/
ThreadError RemoveSocket(UdpSocket &aSocket);
/**
* This method returns a new ephemeral port.
*
* @returns A new ephemeral port.
*
*/
uint16_t GetEphemeralPort(void);
/**
* This method returns a new UDP message with sufficient header space reserved.
*
* @param[in] aReserved The number of header bytes to reserve after the UDP header.
*
* @returns A pointer to the message or NULL if no buffers are available.
*
*/
static Message *NewMessage(uint16_t aReserved);
Message *NewMessage(uint16_t aReserved);
/**
* This static method handles a received UDP message.
* This method sends an IPv6 datagram.
*
* @param[in] aMessage A reference to the message.
* @param[in] aMessageInfo A reference to the message info associated with @p aMessage.
* @param[in] aIpProto The Internet Protocol value.
*
* @retval kThreadError_None Successfully enqueued the message into an output interface.
* @retval kThreadError_NoBufs Insufficient available buffer to add the IPv6 headers.
*
*/
ThreadError SendDatagram(Message &aMessage, MessageInfo &aMessageInfo, IpProto aIpProto);
/**
* This method handles a received UDP message.
*
* @param[in] aMessage A reference to the UDP message to process.
* @param[in] aMessageInfo A reference to the message info associated with @p aMessage.
@@ -143,10 +212,10 @@ public:
* @retval kThreadError_Drop Could not fully process the UDP message.
*
*/
static ThreadError HandleMessage(Message &aMessage, MessageInfo &aMessageInfo);
ThreadError HandleMessage(Message &aMessage, MessageInfo &aMessageInfo);
/**
* This static method updates the UDP checksum.
* This method updates the UDP checksum.
*
* @param[in] aMessage A reference to the UDP message.
* @param[in] aPseudoHeaderChecksum The pseudo-header checksum value.
@@ -155,7 +224,7 @@ public:
* @retval kThreadError_InvalidArgs The message was invalid.
*
*/
static ThreadError UpdateChecksum(Message &aMessage, uint16_t aPseudoHeaderChecksum);
ThreadError UpdateChecksum(Message &aMessage, uint16_t aPseudoHeaderChecksum);
private:
enum
@@ -163,8 +232,10 @@ private:
kDynamicPortMin = 49152, ///< Service Name and Transport Protocol Port Number Registry
kDynamicPortMax = 65535, ///< Service Name and Transport Protocol Port Number Registry
};
static uint16_t sEphemeralPort;
static UdpSocket *sSockets;
uint16_t mEphemeralPort;
UdpSocket *mSockets;
Ip6 &mIp6;
};
OT_TOOL_PACKED_BEGIN
+1 -1
View File
@@ -1070,7 +1070,7 @@ ThreadError otSendIp6Datagram(otMessage aMessage)
otMessage otNewUdpMessage(void)
{
return Ip6::Udp::NewMessage(0);
return sIp6->mUdp.NewMessage(0);
}
ThreadError otFreeMessage(otMessage aMessage)
+6 -5
View File
@@ -54,6 +54,7 @@ AddressResolver::AddressResolver(ThreadNetif &aThreadNetif) :
mAddressQuery(OPENTHREAD_URI_ADDRESS_QUERY, &HandleAddressQuery, this),
mAddressNotification(OPENTHREAD_URI_ADDRESS_NOTIFY, &HandleAddressNotification, this),
mIcmpHandler(&HandleDstUnreach, this),
mSocket(aThreadNetif.GetIp6().mUdp),
mTimer(&HandleTimer, this),
mMeshForwarder(aThreadNetif.GetMeshForwarder()),
mCoapServer(aThreadNetif.GetCoapServer()),
@@ -175,7 +176,7 @@ ThreadError AddressResolver::SendAddressQuery(const Ip6::Address &aEid)
mSocket.Open(&HandleUdpReceive, this);
mSocket.Bind(sockaddr);
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
header.Init();
header.SetVersion(1);
@@ -316,7 +317,7 @@ void AddressResolver::SendAddressNotificationResponse(const Coap::Header &aReque
Coap::Header responseHeader;
Ip6::MessageInfo responseInfo;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
responseHeader.Init();
responseHeader.SetVersion(1);
@@ -354,7 +355,7 @@ ThreadError AddressResolver::SendAddressError(const ThreadTargetTlv &aTarget, co
mSocket.Open(&HandleUdpReceive, this);
mSocket.Bind(sockaddr);
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
header.Init();
header.SetVersion(1);
@@ -406,7 +407,7 @@ void AddressResolver::SendAddressErrorResponse(const Coap::Header &aRequestHeade
Coap::Header responseHeader;
Ip6::MessageInfo responseInfo;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
responseHeader.Init();
responseHeader.SetVersion(1);
@@ -585,7 +586,7 @@ void AddressResolver::SendAddressQueryResponse(const ThreadTargetTlv &aTargetTlv
ThreadRloc16Tlv rloc16Tlv;
Ip6::MessageInfo messageInfo;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
header.Init();
header.SetVersion(1);
+6 -5
View File
@@ -56,6 +56,7 @@ DatasetManager::DatasetManager(ThreadNetif &aThreadNetif, const char *aUriSet, c
mResourceSet(aUriSet, &HandleSet, this),
mResourceGet(aUriGet, &HandleGet, this),
mTimer(&HandleTimer, this),
mSocket(aThreadNetif.GetIp6().mUdp),
mUriSet(aUriSet),
mUriGet(aUriGet),
mCoapServer(aThreadNetif.GetCoapServer())
@@ -176,7 +177,7 @@ ThreadError DatasetManager::Register(void)
header.AppendContentFormatOption(Coap::Header::kApplicationOctetStream);
header.Finalize();
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
SuccessOrExit(error = message->Append(header.GetBytes(), header.GetLength()));
timestamp.Init();
@@ -332,7 +333,7 @@ ThreadError DatasetManager::SendSetRequest(const otOperationalDataset &aDataset,
header.AppendContentFormatOption(Coap::Header::kApplicationOctetStream);
header.Finalize();
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
SuccessOrExit(error = message->Append(header.GetBytes(), header.GetLength()));
if (aDataset.mIsActiveTimestampSet)
@@ -456,7 +457,7 @@ ThreadError DatasetManager::SendGetRequest(const uint8_t *aTlvTypes, const uint8
header.AppendContentFormatOption(Coap::Header::kApplicationOctetStream);
header.Finalize();
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
SuccessOrExit(error = message->Append(header.GetBytes(), header.GetLength()));
if (aLength > 0)
@@ -492,7 +493,7 @@ void DatasetManager::SendSetResponse(const Coap::Header &aRequestHeader, const I
Message *message;
StateTlv state;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
responseHeader.Init();
responseHeader.SetVersion(1);
responseHeader.SetType(Coap::Header::kTypeAcknowledgment);
@@ -527,7 +528,7 @@ void DatasetManager::SendGetResponse(const Coap::Header &aRequestHeader, const I
Message *message;
uint8_t index;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
responseHeader.Init();
responseHeader.SetVersion(1);
responseHeader.SetType(Coap::Header::kTypeAcknowledgment);
+7 -6
View File
@@ -62,6 +62,7 @@ Mle::Mle(ThreadNetif &aThreadNetif) :
mMleRouter(aThreadNetif.GetMle()),
mNetworkData(aThreadNetif.GetNetworkDataLeader()),
mParentRequestTimer(&HandleParentRequestTimer, this),
mSocket(aThreadNetif.GetIp6().mUdp),
mSendChildUpdateRequest(&HandleSendChildUpdateRequest, this)
{
mDeviceState = kDeviceStateDisabled;
@@ -233,7 +234,7 @@ ThreadError Mle::Discover(uint32_t aScanChannels, uint16_t aScanDuration, uint16
mDiscoverContext = aContext;
mMesh.SetDiscoverParameters(aScanChannels, aScanDuration);
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
message->SetMleDiscoverRequest(true);
message->SetPanId(aPanId);
@@ -1079,7 +1080,7 @@ ThreadError Mle::SendParentRequest(void)
mParentRequest.mChallenge[i] = static_cast<uint8_t>(otPlatRandomGet());
}
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandParentRequest));
SuccessOrExit(error = AppendMode(*message, mDeviceMode));
@@ -1146,7 +1147,7 @@ ThreadError Mle::SendChildIdRequest(void)
Message *message;
Ip6::Address destination;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandChildIdRequest));
SuccessOrExit(error = AppendResponse(*message, mChildIdRequest.mChallenge, mChildIdRequest.mChallengeLength));
@@ -1192,7 +1193,7 @@ ThreadError Mle::SendDataRequest(const Ip6::Address &aDestination, const uint8_t
ThreadError error = kThreadError_None;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandDataRequest));
SuccessOrExit(error = AppendTlvRequest(*message, aTlvs, aTlvsLength));
@@ -1239,7 +1240,7 @@ ThreadError Mle::SendChildUpdateRequest(void)
Ip6::Address destination;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandChildUpdateRequest));
SuccessOrExit(error = AppendMode(*message, mDeviceMode));
@@ -2176,7 +2177,7 @@ ThreadError Mle::SendDiscoveryResponse(const Ip6::Address &aDestination, uint16_
MeshCoP::ExtendedPanIdTlv extPanId;
MeshCoP::NetworkNameTlv networkName;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
message->SetMleDiscoverResponse(true);
message->SetPanId(aPanId);
+13 -12
View File
@@ -52,6 +52,7 @@ MleRouter::MleRouter(ThreadNetif &aThreadNetif):
Mle(aThreadNetif),
mAdvertiseTimer(&HandleAdvertiseTimer, this),
mStateUpdateTimer(&HandleStateUpdateTimer, this),
mSocket(aThreadNetif.GetIp6().mUdp),
mAddressSolicit(OPENTHREAD_URI_ADDRESS_SOLICIT, &HandleAddressSolicit, this),
mAddressRelease(OPENTHREAD_URI_ADDRESS_RELEASE, &HandleAddressRelease, this),
mCoapServer(aThreadNetif.GetCoapServer())
@@ -463,7 +464,7 @@ ThreadError MleRouter::SendAdvertisement(void)
Ip6::Address destination;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandAdvertisement));
SuccessOrExit(error = AppendSourceAddress(*message));
@@ -512,7 +513,7 @@ ThreadError MleRouter::SendLinkRequest(Neighbor *aNeighbor)
memset(&destination, 0, sizeof(destination));
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandLinkRequest));
SuccessOrExit(error = AppendVersion(*message));
@@ -684,7 +685,7 @@ ThreadError MleRouter::SendLinkAccept(const Ip6::MessageInfo &aMessageInfo, Neig
command = (aNeighbor == NULL || aNeighbor->mState == Neighbor::kStateValid) ?
Header::kCommandLinkAccept : Header::kCommandLinkAcceptAndRequest;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, command));
SuccessOrExit(error = AppendVersion(*message));
@@ -961,7 +962,7 @@ ThreadError MleRouter::SendLinkReject(const Ip6::Address &aDestination)
ThreadError error = kThreadError_None;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandLinkReject));
SuccessOrExit(error = AppendStatus(*message, StatusTlv::kError));
@@ -1706,7 +1707,7 @@ ThreadError MleRouter::SendParentResponse(Child *aChild, const ChallengeTlv &cha
Ip6::Address destination;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandParentResponse));
SuccessOrExit(error = AppendSourceAddress(*message));
@@ -2093,7 +2094,7 @@ ThreadError MleRouter::SendChildIdResponse(Child *aChild)
Ip6::Address destination;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandChildIdResponse));
SuccessOrExit(error = AppendSourceAddress(*message));
@@ -2170,7 +2171,7 @@ ThreadError MleRouter::SendChildUpdateResponse(Child *aChild, const Ip6::Message
ThreadError error = kThreadError_None;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandChildUpdateResponse));
@@ -2229,7 +2230,7 @@ ThreadError MleRouter::SendDataResponse(const Ip6::Address &aDestination, const
Neighbor *neighbor;
bool stableOnly;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, ;);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, ;);
message->SetLinkSecurityEnabled(false);
SuccessOrExit(error = AppendHeader(*message, Header::kCommandDataResponse));
SuccessOrExit(error = AppendSourceAddress(*message));
@@ -2829,7 +2830,7 @@ ThreadError MleRouter::SendAddressSolicit(ThreadStatusTlv::Status aStatus)
header.AppendContentFormatOption(Coap::Header::kApplicationOctetStream);
header.Finalize();
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
SuccessOrExit(error = message->Append(header.GetBytes(), header.GetLength()));
macAddr64Tlv.Init();
@@ -2882,7 +2883,7 @@ ThreadError MleRouter::SendAddressRelease(void)
header.AppendContentFormatOption(Coap::Header::kApplicationOctetStream);
header.Finalize();
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
SuccessOrExit(error = message->Append(header.GetBytes(), header.GetLength()));
rlocTlv.Init();
@@ -3119,7 +3120,7 @@ void MleRouter::SendAddressSolicitResponse(const Coap::Header &aRequestHeader, u
ThreadRloc16Tlv rlocTlv;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
responseHeader.Init();
responseHeader.SetVersion(1);
responseHeader.SetType(Coap::Header::kTypeAcknowledgment);
@@ -3212,7 +3213,7 @@ void MleRouter::SendAddressReleaseResponse(const Coap::Header &aRequestHeader, c
Coap::Header responseHeader;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
responseHeader.Init();
responseHeader.SetVersion(1);
responseHeader.SetType(Coap::Header::kTypeAcknowledgment);
+3 -2
View File
@@ -46,7 +46,8 @@ namespace Thread {
namespace NetworkData {
NetworkData::NetworkData(ThreadNetif &aThreadNetif):
mMle(aThreadNetif.GetMle())
mMle(aThreadNetif.GetMle()),
mSocket(aThreadNetif.GetIp6().mUdp)
{
mLength = 0;
mCoapMessageId = 0;
@@ -608,7 +609,7 @@ ThreadError NetworkData::SendServerDataNotification(bool aLocal, uint16_t aRloc1
header.AppendContentFormatOption(Coap::Header::kApplicationOctetStream);
header.Finalize();
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mSocket.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
SuccessOrExit(error = message->Append(header.GetBytes(), header.GetLength()));
if (aLocal)
+1 -1
View File
@@ -497,7 +497,7 @@ void Leader::SendServerDataResponse(const Coap::Header &aRequestHeader, const Ip
Coap::Header responseHeader;
Message *message;
VerifyOrExit((message = Ip6::Udp::NewMessage(0)) != NULL, error = kThreadError_NoBufs);
VerifyOrExit((message = mCoapServer.NewMessage(0)) != NULL, error = kThreadError_NoBufs);
responseHeader.Init();
responseHeader.SetVersion(1);
responseHeader.SetType(Coap::Header::kTypeAcknowledgment);
+1 -1
View File
@@ -56,7 +56,7 @@ static const char name[] = "thread";
ThreadNetif::ThreadNetif(Ip6::Ip6 &aIp6):
Netif(aIp6),
mCoapServer(kCoapUdpPort),
mCoapServer(aIp6.mUdp, kCoapUdpPort),
mAddressResolver(*this),
mActiveDataset(*this),
mPendingDataset(*this),