nl::Weave::WeaveMessageLayer

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

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

摘要

它采用多个 InetLayer 端点中的一个来与其他 Weave 节点建立通信通道。

构造函数和析构函数

WeaveMessageLayer(void)
Weave 消息层构造函数。

公共类型

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 消息层标头。
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 消息层标头编码为 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 消息层对象。
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 对象对应的 TCPEndPoints 交给 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 消息层标头。

具体说明
参数
[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 消息层标头编码为 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 消息层对象。

具体说明
参数
[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
针对创建 TCP/UDP 端点的调用发生的错误。

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 确定 destAddr。
errors
由低层级 Inet 层 UDP 端点生成。

SendUDPTunneledMessage

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

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

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

具体说明
参数
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] destAddr
UDP 隧道目标的 IP 地址。
[in] msgBuf
指向包含要发送的数据包的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
在成功将消息向下发送到网络层时触发。
WEAVE_ERROR_INVALID_ADDRESS
如果未指定 destAddr 或无法从目标节点 ID 确定 destAddr。
errors
由低层级 Inet 层 UDP 端点生成。

SetSignalMessageLayerActivityChanged

void SetSignalMessageLayerActivityChanged(
  MessageLayerActivityChangeHandlerFunct messageLayerActivityChangeHandler
)

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

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

  • 打开的广告交易平台数量会发生变化
  • 待处理消息计数器同步请求的数量从 0 变为至少一个,然后再重新变为 0。处理程序将用作常规信号,指示是否有任何进行中的 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 消息层构造函数。

公共静态函数

GetMaxWeavePayloadSize

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

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

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

如果消息是 UDP,则返回的载荷大小上限不会生成不会溢出指定 UDP MTU 的 Weave 消息。

最后,返回的最大载荷大小不会导致 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 结构的指针。