nl::Weave::WeaveMessageLayer

#include <src/lib/core/WeaveMessageLayer.h>

WeaveMessageLayer 类的定义,该类管理与其他 Weave 节点的通信。

摘要

它利用若干 InetLayer 端点之一与其他 Weave 节点建立通信通道。

构造函数和析构函数

WeaveMessageLayer(void)
Weave Message 层构造函数。

公共类型

AcceptErrorFunct)(WeaveMessageLayer *msgLayer, WEAVE_ERROR err) typedef
void(*
此函数是较高层回调,用于在处理传入的 TCP 连接期间报告错误。
CallbackRemovedFunct)(void *listenerState) typedef
void(*
系统会调用此函数来移除回调。
ConnectionReceiveFunct)(WeaveMessageLayer *msgLayer, WeaveConnection *con) typedef
void(*
此函数是用于处理传入 TCP 连接的较高层回调。
MessageLayerActivityChangeHandlerFunct)(bool messageLayerIsActive) typedef
void(*
此函数是用于报告消息层活动更改的应用回调。
MessageReceiveFunct)(WeaveMessageLayer *msgLayer, WeaveMessageInfo *msgInfo, PacketBuffer *payload) typedef
void(*
此函数是更高层回调,会在通过 UDP 收到 Weave 消息时调用。
ReceiveErrorFunct)(WeaveMessageLayer *msgLayer, WEAVE_ERROR err, const IPPacketInfo *pktInfo) typedef
void(*
此函数是遇到错误时调用的较高层回调。
State{
  kState_NotInitialized = 0,
  kState_Initializing = 1,
  kState_Initialized = 2
}
枚举
WeaveMessageLayer 的状态。
TunneledMsgReceiveFunct)(WeaveMessageLayer *msgLayer, PacketBuffer *payload) typedef
void(*
此函数是通过本地 UDP 隧道收到隧道数据包后调用的较高层回调。

公共属性

AppState
void *
指向特定于应用的状态对象的指针。
ExchangeMgr
[只读] 关联的 WeaveExchangeManager 对象。
FabricState
[只读] 关联的 WeaveFabricState 对象。
IncomingConIdleTimeout
uint32_t
传入连接的默认空闲超时(以毫秒为单位)。
Inet
InetLayer *
[只读] 关联的 InetLayer 对象。
IsListening
bool
[只读] 如果监听传入的连接/消息,则为 true,否则为 false。
OnAcceptError
OnConnectionReceived
OnMessageReceived
OnReceiveError
OnUDPTunneledMessageReceived
SecurityMgr
[只读] 关联的 WeaveSecurityManager 对象。
State
uint8_t
[只读] WeaveMessageLayer 对象的状态。
SystemLayer
mDropMessage
bool
仅供内部使用,并且仅用于调试;设置完毕后,WeaveMessageLayer 会丢弃消息并返回。

公共函数

ClearUnsecuredConnectionListener(ConnectionReceiveFunct oldOnUnsecuredConnectionReceived, CallbackRemovedFunct newOnUnsecuredConnectionCallbacksRemoved)
CloseEndpoints(void)
关闭所有打开的 TCP 和 UDP 端点。
CreateTunnel(WeaveConnectionTunnel **tunPtr, WeaveConnection & conOne, WeaveConnection & conTwo, uint32_t inactivityTimeoutMS)
通过将两个指定的 WeaveConnection 耦合在一起来创建 WeaveConnectionTunnel
DecodeHeader(PacketBuffer *msgBuf, WeaveMessageInfo *msgInfo, uint8_t **payloadStart)
对收到的 Weave 消息中的 Weave Message 层标头进行解码。
EncodeMessage(WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf, WeaveConnection *con, uint16_t maxLen, uint16_t reserve)
WeaveMessageLayer 标头编码到 PacketBuffer 中。
EncodeMessage(const IPAddress & destAddr, uint16_t destPort, InterfaceId sendIntId, WeaveMessageInfo *msgInfo, PacketBuffer *payload)
将 Weave Message 层标头编码到 PacketBuffer 中。
EphemeralUDPPortEnabled(void) const
bool
检查是否应从临时 UDP 来源端口发送本地发起的 Weave UDP 交换。
GetConnectionPoolStats(nl::Weave::System::Stats::count_t & aOutInUse) const
void
获取正在使用的 WeaveConnection 数量和池的大小。
IPv4ListenEnabled(void) const
bool
检查 WeaveMessageLayer 是否已配置为监听 IPv4 的入站通信。
IPv6ListenEnabled(void) const
bool
检查 WeaveMessageLayer 是否已配置为监听 IPv4 的入站通信。
Init(InitContext *context)
初始化 Weave Message 图层对象。
IsBoundToLocalIPv4Address(void) const
bool
检查 WeaveMessageLayer 是否已绑定到本地 IPv4 地址。
IsBoundToLocalIPv6Address(void) const
bool
检查 WeaveMessageLayer 是否已绑定到本地 IPv6 地址。
IsMessageLayerActive(void)
bool
NewConnection(void)
从池中创建新的 WeaveConnection 对象。
NewConnectionTunnel(void)
从池中创建新的 WeaveConnectionTunnel 对象。
ReEncodeMessage(PacketBuffer *buf)
RefreshEndpoints(void)
根据系统网络接口的当前状态刷新 InetLayer 端点。
ResendMessage(WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf)
使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。
ResendMessage(const IPAddress & destAddr, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf)
使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。
ResendMessage(const IPAddress & destAddr, uint16_t destPort, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf)
使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。
ResendMessage(const IPAddress & destAddr, uint16_t destPort, InterfaceId interfaceId, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf)
使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。
SendMessage(WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf)
编码后使用底层 Inetlayer UDP 端点发送 Weave 消息。
SendMessage(const IPAddress & destAddr, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf)
编码后使用底层 Inetlayer UDP 端点发送 Weave 消息。
SendMessage(const IPAddress & destAddr, uint16_t destPort, InterfaceId sendIntfId, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf)
编码后使用底层 Inetlayer UDP 端点发送 Weave 消息。
SendUDPTunneledMessage(const IPAddress & destAddr, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf)
用于通过本地 UDP 隧道发送隧道数据包的函数。
SetSignalMessageLayerActivityChanged(MessageLayerActivityChangeHandlerFunct messageLayerActivityChangeHandler)
void
设置每当消息层的 activity 发生变化时都会调用的应用处理程序。
SetTCPListenEnabled(bool val)
void
WeaveMessageLayer 中启用或停用入站 TCP 连接的监听。
SetUDPListenEnabled(bool val)
void
WeaveMessageLayer 中启用或停用入站 UDP 消息的监听。
SetUnsecuredConnectionListener(ConnectionReceiveFunct newOnUnsecuredConnectionReceived, CallbackRemovedFunct newOnUnsecuredConnectionCallbacksRemoved, bool force, void *listenerState)
Shutdown(void)
TCPListenEnabled(void) const
bool
检查 WeaveMessageLayer 是否已配置为监听入站 TCP 连接。
UDPListenEnabled(void) const
bool
检查 WeaveMessageLayer 是否已配置为监听入站 UDP 消息。
UnsecuredListenEnabled(void) const
bool
启用或停用从临时 UDP 来源端口启动 Weave UDP 交换。

公共静态函数

GetMaxWeavePayloadSize(const PacketBuffer *msgBuf, bool isUDP, uint32_t udpMTU)
uint32_t
获取消息配置和提供的 PacketBuffer 的最大 Weave 载荷大小。
GetPeerDescription(char *buf, size_t bufSize, uint64_t nodeId, const IPAddress *addr, uint16_t port, InterfaceId interfaceId, const WeaveConnection *con)
void
构建一个描述对等节点及其相关地址 / 连接信息的字符串。
GetPeerDescription(char *buf, size_t bufSize, const WeaveMessageInfo *msgInfo)
void
根据与从对等端收到的消息相关的信息,构建一个描述对等节点的字符串。

nl::Weave::WeaveMessageLayer::InitContext

InitContext 类的定义。

公共类型

AcceptErrorFunct

void(* AcceptErrorFunct)(WeaveMessageLayer *msgLayer, WEAVE_ERROR err)

此函数是较高层回调,用于在处理传入的 TCP 连接期间报告错误。

详细信息
参数
[in] msgLayer
指向 WeaveMessageLayer 对象的指针。
[in] err
处理传入的 TCP 连接时发生 WEAVE_ERROR。

CallbackRemovedFunct

void(* CallbackRemovedFunct)(void *listenerState)

系统会调用此函数来移除回调。

详细信息
参数
[in] listenerState
指向应用状态对象的指针。

ConnectionReceiveFunct

void(* ConnectionReceiveFunct)(WeaveMessageLayer *msgLayer, WeaveConnection *con)

此函数是用于处理传入 TCP 连接的较高层回调。

详细信息
参数
[in] msgLayer
指向 WeaveMessageLayer 对象的指针。
[in] con
指向 WeaveConnection 对象的指针。

MessageLayerActivityChangeHandlerFunct

void(* MessageLayerActivityChangeHandlerFunct)(bool messageLayerIsActive)

此函数是用于报告消息层活动更改的应用回调。

如果消息层至少有一个打开的交换或待处理的消息计数器同步请求,则该消息层会被视为活跃。

详细信息
参数
[in] messageLayerIsActive
一个布尔值,表示消息层是否处于有效状态。

MessageReceiveFunct

void(* MessageReceiveFunct)(WeaveMessageLayer *msgLayer, WeaveMessageInfo *msgInfo, PacketBuffer *payload)

此函数是更高层回调,会在通过 UDP 收到 Weave 消息时调用。

详细信息
参数
[in] msgLayer
指向 WeaveMessageLayer 对象的指针。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] payload
指向包含已接收隧道式数据包的 PacketBuffer 消息的指针。

ReceiveErrorFunct

void(* ReceiveErrorFunct)(WeaveMessageLayer *msgLayer, WEAVE_ERROR err, const IPPacketInfo *pktInfo)

此函数是遇到错误时调用的较高层回调。

详细信息
参数
[in] msgLayer
指向 WeaveMessageLayer 对象的指针。
[in] err
接收数据时遇到 WEAVE_ERROR。
[in] pktInfo
指向 IPPacketInfo 对象的只读指针。

 State

WeaveMessageLayer 的状态。

属性
kState_Initialized

初始化 WeaveMessageLayer 时的状态。

kState_Initializing

WeaveMessageLayer 正在初始化时的状态。

kState_NotInitialized

WeaveMessageLayer 未初始化时的状态。

TunneledMsgReceiveFunct

void(* TunneledMsgReceiveFunct)(WeaveMessageLayer *msgLayer, PacketBuffer *payload)

此函数是通过本地 UDP 隧道收到隧道数据包后调用的较高层回调。

详细信息
参数
[in] msgLayer
指向 WeaveMessageLayer 对象的指针。
[in] payload
指向包含已接收隧道式数据包的 PacketBuffer 消息的指针。

公共属性

AppState

void * AppState

指向特定于应用的状态对象的指针。

ExchangeMgr

WeaveExchangeManager * ExchangeMgr

[只读] 关联的 WeaveExchangeManager 对象。

FabricState

WeaveFabricState * FabricState

[只读] 关联的 WeaveFabricState 对象。

IncomingConIdleTimeout

uint32_t IncomingConIdleTimeout

传入连接的默认空闲超时(以毫秒为单位)。

Inet

InetLayer * Inet

[只读] 关联的 InetLayer 对象。

IsListening

bool IsListening

[只读] 如果监听传入的连接/消息,则为 true,否则为 false。

OnAcceptError

AcceptErrorFunct OnAcceptError

OnConnectionReceived

ConnectionReceiveFunct OnConnectionReceived

OnMessageReceived

MessageReceiveFunct OnMessageReceived

OnReceiveError

ReceiveErrorFunct OnReceiveError

OnUDPTunneledMessageReceived

TunneledMsgReceiveFunct OnUDPTunneledMessageReceived

SecurityMgr

WeaveSecurityManager * SecurityMgr

[只读] 关联的 WeaveSecurityManager 对象。

uint8_t State

[只读] WeaveMessageLayer 对象的状态。

SystemLayer

System::Layer * SystemLayer

mDropMessage

bool mDropMessage

仅供内部使用,并且仅用于调试;设置完毕后,WeaveMessageLayer 会丢弃消息并返回。

公共函数

ClearUnsecuredConnectionListener

WEAVE_ERROR ClearUnsecuredConnectionListener(
  ConnectionReceiveFunct oldOnUnsecuredConnectionReceived,
  CallbackRemovedFunct newOnUnsecuredConnectionCallbacksRemoved
)

CloseEndpoints

WEAVE_ERROR CloseEndpoints(
  void
)

关闭所有打开的 TCP 和 UDP 端点。

然后取消所有打开的 WeaveConnection,并关闭所有打开的 WeaveConnectionTunnel 对象。

另请参阅
Shutdown()

CreateTunnel

WEAVE_ERROR CreateTunnel(
  WeaveConnectionTunnel **tunPtr,
  WeaveConnection & conOne,
  WeaveConnection & conTwo,
  uint32_t inactivityTimeoutMS
)

通过将两个指定的 WeaveConnection 耦合在一起来创建 WeaveConnectionTunnel

成功创建后,与组件 WeaveConnection 对象对应的 TCPEndPoint 会移交给 WeaveConnectionTunnel,否则 WeaveConnection 会关闭。

详细信息
参数
[out] tunPtr
指向 WeaveConnectionTunnel 对象的指针的指针。
[in] conOne
对第一个 WeaveConnection 对象的引用。
[in] conTwo
对第二个 WeaveConnection 对象的引用。
[in] inactivityTimeoutMS
Weave 连接隧道可以处于空闲状态的最长时间(以毫秒为单位)。
返回值
WEAVE_NO_ERROR
介绍如何成功创建 WeaveConnectionTunnel
WEAVE_ERROR_INCORRECT_STATE
如果 WeaveConnectionTunnel 的组件 WeaveConnection 对象处于不正确的状态,则会引发该错误。
WEAVE_ERROR_NO_MEMORY
如果无法创建新的 WeaveConnectionTunnel 对象,则会发生此错误。

DecodeHeader

WEAVE_ERROR DecodeHeader(
  PacketBuffer *msgBuf,
  WeaveMessageInfo *msgInfo,
  uint8_t **payloadStart
)

对收到的 Weave 消息中的 Weave Message 层标头进行解码。

详细信息
参数
[in] msgBuf
指向包含 Weave 消息的 PacketBuffer 对象的指针。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针,该对象将接收消息的相关信息。
[out] payloadStart
指向解码完成后在消息缓冲区中位置的指针的指针。
返回值
WEAVE_NO_ERROR
消息标头成功解码后。
WEAVE_ERROR_INVALID_MESSAGE_LENGTH
所传递的消息缓冲区长度无效。
WEAVE_ERROR_UNSUPPORTED_MESSAGE_VERSION
Weave Message 标头格式版本不受支持。

EncodeMessage

WEAVE_ERROR EncodeMessage(
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf,
  WeaveConnection *con,
  uint16_t maxLen,
  uint16_t reserve
)

WeaveMessageLayer 标头编码到 PacketBuffer 中。

详细信息
参数
[in] msgInfo
指向 WeaveMessageInfo 对象的指针,该对象包含有关要编码的消息的信息。
[in] msgBuf
指向包含 Weave 消息的 PacketBuffer 对象的指针。
[in] con
指向 WeaveConnection 对象的指针。
[in] maxLen
编码的 Weave 消息的最大长度。
[in] reserve
载荷前的预留空间,用于保存 Weave 消息标头。
返回值
WEAVE_NO_ERROR
消息编码成功的消息。
WEAVE_ERROR_UNSUPPORTED_MESSAGE_VERSION
Weave Message 标头格式版本不受支持。
WEAVE_ERROR_INVALID_MESSAGE_LENGTH
如果消息缓冲区中的载荷长度为零。
WEAVE_ERROR_UNSUPPORTED_ENCRYPTION_TYPE
如果邮件标头中的加密类型不受支持,则会发生此错误。
WEAVE_ERROR_MESSAGE_TOO_LONG
如果编码的消息长于请求的长度上限,则会发生该错误。
WEAVE_ERROR_BUFFER_TOO_SMALL
other
提取会话状态时由结构脉络状态对象生成的错误。

EncodeMessage

WEAVE_ERROR EncodeMessage(
  const IPAddress & destAddr,
  uint16_t destPort,
  InterfaceId sendIntId,
  WeaveMessageInfo *msgInfo,
  PacketBuffer *payload
)

将 Weave Message 层标头编码到 PacketBuffer 中。

详细信息
参数
[in] destAddr
目标 IP 地址。
[in] destPort
目标端口。
[in] sendIntId
发送 Weave 消息的接口。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] payload
指向包含 Weave 消息的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
Weave 消息的成功编码问题。
WEAVE_ERROR_UNSUPPORTED_MESSAGE_VERSION
Weave Message 版本不受支持。
WEAVE_ERROR_INVALID_MESSAGE_LENGTH
如果消息缓冲区中的载荷长度为零。
WEAVE_ERROR_UNSUPPORTED_ENCRYPTION_TYPE
如果加密类型不受支持,则会发生此错误。
WEAVE_ERROR_MESSAGE_TOO_LONG
如果编码的消息长于请求的长度上限,则会发生该错误。
WEAVE_ERROR_BUFFER_TOO_SMALL
other
提取会话状态时由结构脉络状态对象生成的错误。

EphemeralUDPPortEnabled

bool EphemeralUDPPortEnabled(
  void
) const 

检查是否应从临时 UDP 来源端口发送本地发起的 Weave UDP 交换。

GetConnectionPoolStats

void GetConnectionPoolStats(
  nl::Weave::System::Stats::count_t & aOutInUse
) const 

获取正在使用的 WeaveConnection 数量和池的大小。

详细信息
参数
[out] aOutInUse
对 size_t 的引用,用于存储正在使用的连接数。

IPv4ListenEnabled

bool IPv4ListenEnabled(
  void
) const 

检查 WeaveMessageLayer 是否已配置为监听 IPv4 的入站通信。

IPv6ListenEnabled

bool IPv6ListenEnabled(
  void
) const 

检查 WeaveMessageLayer 是否已配置为监听 IPv4 的入站通信。

Init

WEAVE_ERROR Init(
  InitContext *context
)

初始化 Weave Message 图层对象。

详细信息
参数
[in] context
指向 InitContext 对象的指针。
返回值
WEAVE_NO_ERROR
WEAVE_ERROR_INVALID_ARGUMENT
如果传递的 InitContext 对象为 NULL。
WEAVE_ERROR_INCORRECT_STATE
如果 WeaveMessageLayer 对象的状态不正确,则会发生此错误。
other
端点创建期间从较低 Inet 层生成的错误。

IsBoundToLocalIPv4Address

bool IsBoundToLocalIPv4Address(
  void
) const 

检查 WeaveMessageLayer 是否已绑定到本地 IPv4 地址。

IsBoundToLocalIPv6Address

bool IsBoundToLocalIPv6Address(
  void
) const 

检查 WeaveMessageLayer 是否已绑定到本地 IPv6 地址。

IsMessageLayerActive

bool IsMessageLayerActive(
  void
)

NewConnection

WeaveConnection * NewConnection(
  void
)

从池中创建新的 WeaveConnection 对象。

详细信息
返回值
如果成功,则为指向新创建的 WeaveConnection 对象的指针,否则为 NULL。

NewConnectionTunnel

WeaveConnectionTunnel * NewConnectionTunnel(
  void
)

从池中创建新的 WeaveConnectionTunnel 对象。

详细信息
返回值
如果成功,则为指向新创建的 WeaveConnectionTunnel 对象的指针,否则为 NULL。

ReEncodeMessage

WEAVE_ERROR ReEncodeMessage(
  PacketBuffer *buf
)

RefreshEndpoints

WEAVE_ERROR RefreshEndpoints(
  void
)

根据系统网络接口的当前状态刷新 InetLayer 端点。

详细信息
返回值
WEAVE_NO_ERROR
关于成功刷新端点的提示
InetLayer
错误发生。

ResendMessage

WEAVE_ERROR ResendMessage(
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。

详细信息
参数
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] payload
指向包含编码 Weave 消息的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
至于是否成功将消息向下发送到网络层。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

ResendMessage

WEAVE_ERROR ResendMessage(
  const IPAddress & destAddr,
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。

详细信息
参数
[in] destAddr
目标 IP 地址。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] payload
指向包含编码 Weave 消息的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
至于是否成功将消息向下发送到网络层。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

ResendMessage

WEAVE_ERROR ResendMessage(
  const IPAddress & destAddr,
  uint16_t destPort,
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。

详细信息
参数
[in] destAddr
目标 IP 地址。
[in] destPort
目标端口。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] payload
指向包含编码 Weave 消息的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
至于是否成功将消息向下发送到网络层。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

ResendMessage

WEAVE_ERROR ResendMessage(
  const IPAddress & destAddr,
  uint16_t destPort,
  InterfaceId interfaceId,
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。

注意:如果未提供目标地址,请尝试通过邮件标头中的节点标识符来确定该地址。如果无法完成此操作,则会失败。 - 如果目标地址是本地结构脉络的地址,并且调用方未指定目标节点 ID,请从目标地址提取该地址。

详细信息
参数
[in] aDestAddr
目标 IP 地址。
[in] destPort
目标端口。
[in] interfaceId
发送 Weave 消息的接口。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] payload
指向包含编码 Weave 消息的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
至于是否成功将消息向下发送到网络层。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

SendMessage

WEAVE_ERROR SendMessage(
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

编码后使用底层 Inetlayer UDP 端点发送 Weave 消息。

详细信息
参数
[in] msgInfo
指向 WeaveMessageInfo 对象的指针,该对象包含有关要发送的消息的信息。
[in] payload
指向包含编码 Weave 消息的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
至于是否成功将消息向下发送到网络层。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

SendMessage

WEAVE_ERROR SendMessage(
  const IPAddress & destAddr,
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

编码后使用底层 Inetlayer UDP 端点发送 Weave 消息。

注意:使用的目标端口为 WEAVE_PORT。 - 如果目标地址尚未提供,则尝试根据消息标头中的节点标识符确定目标地址。如果无法完成此操作,则会失败。

- 如果目标地址是本地结构脉络的地址,并且调用方未指定目标节点 ID,请从目标地址提取该地址。

详细信息
参数
[in] destAddr
目标 IP 地址。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针,该对象包含有关要发送的消息的信息。
[in] payload
指向包含编码 Weave 消息的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
至于是否成功将消息向下发送到网络层。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

SendMessage

WEAVE_ERROR SendMessage(
  const IPAddress & destAddr,
  uint16_t destPort,
  InterfaceId sendIntfId,
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

编码后使用底层 Inetlayer UDP 端点发送 Weave 消息。

注意:如果未提供目标地址,请尝试通过邮件标头中的节点标识符来确定该地址。如果无法完成此操作,则会失败。 - 如果目标地址是本地结构脉络的地址,并且调用方未指定目标节点 ID,请从目标地址提取该地址。

详细信息
参数
[in] aDestAddr
目标 IP 地址。
[in] destPort
目标端口。
[in] sendIntfId
发送 Weave 消息的接口。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针,该对象包含有关要发送的消息的信息。
[in] payload
指向包含编码 Weave 消息的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
至于是否成功将消息向下发送到网络层。
WEAVE_ERROR_INVALID_ADDRESS
如果 destAddr 未指定或无法通过目标节点 ID 确定,则返回 。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

SendUDPTunneledMessage

WEAVE_ERROR SendUDPTunneledMessage(
  const IPAddress & destAddr,
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

用于通过本地 UDP 隧道发送隧道数据包的函数。

通过 UDP 发送隧道式 IPv6 数据消息。

详细信息
参数
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] destAddr
UDP 隧道目标的 IPAddress。
[in] msgBuf
指向包含要发送的数据包的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
至于是否成功将消息向下发送到网络层。
WEAVE_ERROR_INVALID_ADDRESS
如果 destAddr 未指定或无法通过目标节点 ID 确定,则返回 。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

SetSignalMessageLayerActivityChanged

void SetSignalMessageLayerActivityChanged(
  MessageLayerActivityChangeHandlerFunct messageLayerActivityChangeHandler
)

设置每当消息层的 activity 发生变化时都会调用的应用处理程序。

具体而言,每当出现以下情况时,应用都会收到通知:

  • 已打开的广告交易平台的数量发生变化。
  • 待处理消息计数器同步请求的数量从零变为至少 1,然后再变回零。该处理程序将用作常规信号,指示是否有任何进行中的 Weave 对话或待处理的响应。处理程序必须在 WeaveMessageLayer 初始化后设置;关闭 WeaveMessageLayer 会清除当前处理程序。

详细信息
参数
[in] messageLayerActivityChangeHandler
指向每当消息层 activity 发生变化时要调用的函数的指针。
返回值
None.

SetTCPListenEnabled

void SetTCPListenEnabled(
  bool val
)

WeaveMessageLayer 中启用或停用入站 TCP 连接的监听。

注意:更改 TCP 监听状态后必须调用 RefreshEndpoints()

SetUDPListenEnabled

void SetUDPListenEnabled(
  bool val
)

WeaveMessageLayer 中启用或停用入站 UDP 消息的监听。

注意:必须在 UDP 监听状态更改后调用 RefreshEndpoints()

SetUnsecuredConnectionListener

WEAVE_ERROR SetUnsecuredConnectionListener(
  ConnectionReceiveFunct newOnUnsecuredConnectionReceived,
  CallbackRemovedFunct newOnUnsecuredConnectionCallbacksRemoved,
  bool force,
  void *listenerState
)

关停

WEAVE_ERROR Shutdown(
  void
)

关闭 WeaveMessageLayer

关闭所有打开的 Inet 层端点,重置所有较高层回调、成员变量和对象。调用 Shutdown() 会终止 WeaveMessageLayer 对象。

TCPListenEnabled

bool TCPListenEnabled(
  void
) const 

检查 WeaveMessageLayer 是否已配置为监听入站 TCP 连接。

UDPListenEnabled

bool UDPListenEnabled(
  void
) const 

检查 WeaveMessageLayer 是否已配置为监听入站 UDP 消息。

UnsecuredListenEnabled

bool UnsecuredListenEnabled(
  void
) const 

启用或停用从临时 UDP 来源端口启动 Weave UDP 交换。

注意:必须在临时端口状态更改后调用 RefreshEndpoints()。检查是否已启用不安全的监听功能。

WeaveMessageLayer

 WeaveMessageLayer(
  void
)

Weave Message 层构造函数。

公共静态函数

GetMaxWeavePayloadSize

uint32_t GetMaxWeavePayloadSize(
  const PacketBuffer *msgBuf,
  bool isUDP,
  uint32_t udpMTU
)

获取消息配置和提供的 PacketBuffer 的最大 Weave 载荷大小。

返回的最大载荷大小不会超过所提供的 PacketBuffer 中载荷的可用空间。

如果消息为 UDP,返回的最大载荷大小不会导致 Weave 消息不会溢出指定的 UDP MTU。

最后,返回的最大载荷大小不会导致 Weave 消息超出最大 Weave 消息大小。

详细信息
参数
[in] msgBuf
指向将写入消息载荷的 PacketBuffer 的指针。
[in] isUDP
如果消息是 UDP 消息,则为 true。
[in] udpMTU
UDP MTU 的大小。如果 isUDP 为 false,则忽略。
返回值
Weave 载荷的大小上限。

GetPeerDescription

void GetPeerDescription(
  char *buf,
  size_t bufSize,
  uint64_t nodeId,
  const IPAddress *addr,
  uint16_t port,
  InterfaceId interfaceId,
  const WeaveConnection *con
)

构建一个描述对等节点及其相关地址 / 连接信息的字符串。

生成的字符串采用以下格式:

 ([]:%, con )

详细信息
参数
[in] buf
指向应将字符串写入到的缓冲区的指针。提供的缓冲区必须至少与 kWeavePeerDescription_MaxLength 一样大。如果给定的缓冲区空间更小,则字符串将被截断以适应大小。在任何情况下,输出都将包含 NUL 终止字符。
[in] bufSize
buf 所指向的缓冲区大小。
[in] nodeId
要输出的节点 ID。
[in] addr
指向要输出的 IP 地址的指针;如果不应输出任何 IP 地址,则为 NULL。
[in] port
要输出的 IP 端口号。如果 addr 为 NULL,则不会输出端口号。
[in] interfaceId
用于标识要打印的接口的 InterfaceId。输出字符串将包含底层网络堆栈已知的接口名称。如果 interfaceId 为 INET_NULL_INTERFACEID,或者 addr 为 NULL,则不会输出接口名称。
[in] con
指向应输出其日志记录 ID 的 WeaveConnection 对象的指针;如果不应输出连接 ID,则为 NULL。

GetPeerDescription

void GetPeerDescription(
  char *buf,
  size_t bufSize,
  const WeaveMessageInfo *msgInfo
)

根据与从对等端收到的消息相关的信息,构建一个描述对等节点的字符串。

详细信息
参数
[in] buf
指向应将字符串写入到的缓冲区的指针。提供的缓冲区必须至少与 kWeavePeerDescription_MaxLength 一样大。如果给定的缓冲区空间更小,则字符串将被截断以适应大小。在任何情况下,输出都将包含 NUL 终止字符。
[in] bufSize
buf 所指向的缓冲区大小。
[in] msgInfo
指向包含消息相关信息的 WeaveMessageInfo 结构体的指针。