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(*
此函数是用于报告消息层 Activity 更改的应用回调。
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 类的定义。

公共类型

接受错误论坛

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

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

详情
参数
[in] msgLayer
指向 WeaveMessageLayer 对象的指针。
[in] err
处理传入的 TCP 连接时遇到的 WEAVE_ERROR。

回调移除函数

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)

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

如果有至少 1 个开放式广告交易平台或待处理的消息计数器同步请求,则消息层会被视为有效。

详情
参数
[in] messageLayerIsActive
指示消息层是否处于活动状态的布尔值。

消息接收功能

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

此函数是在收到基于 UDP 的 Weave 消息时调用的较高层回调。

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

接收错误信息

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 未初始化时的状态。

隧道接收消息

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

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

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

公共属性

应用状态

void * AppState

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

ExchangeMgr

WeaveExchangeManager * ExchangeMgr

[只读] 关联的 WeaveExchangeManager 对象。

FabricState

WeaveFabricState * FabricState

[只读] 关联的 WeaveFabricState 对象。

传入 ConIdleTimeout

uint32_t IncomingConIdleTimeout

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

伊内特

InetLayer * Inet

[只读] 关联的 InetLayer 对象。

正在聆听

bool IsListening

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

OnAcceptError

AcceptErrorFunct OnAcceptError

OnConnectionReceived

ConnectionReceiveFunct OnConnectionReceived

OnMessageReceived

MessageReceiveFunct OnMessageReceived

OnReceiveError

ReceiveErrorFunct OnReceiveError

OnUDPTunneledMessageReceived

TunneledMsgReceiveFunct OnUDPTunneledMessageReceived

安全经理

WeaveSecurityManager * SecurityMgr

[只读] 关联的 WeaveSecurityManager 对象。

状态

uint8_t State

[只读] WeaveMessageLayer 对象的状态。

系统层

System::Layer * SystemLayer

mDropMessage

bool mDropMessage

仅供“调试”使用;设置后,WeaveMessageLayer 会丢弃消息并返回。

公共函数

clearUnsecuredConnectionListener

WEAVE_ERROR ClearUnsecuredConnectionListener(
  ConnectionReceiveFunct oldOnUnsecuredConnectionReceived,
  CallbackRemovedFunct newOnUnsecuredConnectionCallbacksRemoved
)

关闭端点

WEAVE_ERROR CloseEndpoints(
  void
)

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

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

另请参阅
Shutdown()

创建隧道

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

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

成功创建后,与组件 WeaveConnection 对象对应的 TCPEndPoints 将传递到 WeaveConnectionTunnel,否则关闭 WeaveConnections。

详情
参数
[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 对象。

解码标头

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
结构状态对象在获取会话状态时生成的错误。

临时 UDPPortEnabled

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
)

新建连接

WeaveConnection * NewConnection(
  void
)

从池中创建新的 WeaveConnection 对象。

详情
退货
如果成功,则指向新创建的 WeaveConnection 对象的指针,否则,返回 NULL。

新连接隧道

WeaveConnectionTunnel * NewConnectionTunnel(
  void
)

从池中创建新的 WeaveConnectionTunnel 对象。

详情
退货
如果成功,则指向新创建的 WeaveConnectionTunnel 对象的指针,否则为 NULL。

重新编码邮件

WEAVE_ERROR ReEncodeMessage(
  PacketBuffer *buf
)

刷新端点

WEAVE_ERROR RefreshEndpoints(
  void
)

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

详情
返回值
WEAVE_NO_ERROR
成功刷新端点时触发。
InetLayer
错误。

重新发送信息

WEAVE_ERROR ResendMessage(
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

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

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

重新发送信息

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 端点生成。

重新发送信息

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 端点生成。

重新发送信息

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

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

注意:如果尚未提供目标地址,请尝试根据邮件标头中的节点标识符来确定目标地址。如果无法完成,则会失败。 - 如果目标地址是本地结构的架构结构,且调用方未指定目标节点 ID,请从目标地址中提取目标 ID。

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

发送消息

WEAVE_ERROR SendMessage(
  WeaveMessageInfo *msgInfo,
  PacketBuffer *msgBuf
)

对底层 Inetlayer UDP 端点进行编码后,发送 Weave 消息。

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

发送消息

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

对底层 Inetlayer UDP 端点进行编码后,发送 Weave 消息。

注意:使用的目的地端口是 WEAVE_PORT。- 如果未提供目标地址,请尝试根据邮件标头中的节点标识符来确定。如果无法完成,则会失败。

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

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

发送消息

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

对底层 Inetlayer UDP 端点进行编码后,发送 Weave 消息。

注意:如果尚未提供目标地址,请尝试根据邮件标头中的节点标识符来确定目标地址。如果无法完成,则会失败。 - 如果目标地址是本地结构的架构结构,且调用方未指定目标节点 ID,请从目标地址中提取目标 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 隧道目标的 IP 地址。
[in] msgBuf
指向包含要发送的数据包的 PacketBuffer 对象的指针。
返回值
WEAVE_NO_ERROR
成功地发送消息到网络层。
WEAVE_ERROR_INVALID_ADDRESS
指定 destAddr 或者无法通过目标节点 ID 确定。
errors
在发送过程中从较低 Inet 层 UDP 端点生成。

SetSignalMessageLayerActivityChanged

void SetSignalMessageLayerActivityChanged(
  MessageLayerActivityChangeHandlerFunct messageLayerActivityChangeHandler
)

设置在消息层的 Activity 每次发生更改时都会调用的应用处理程序。

具体而言,应用每次都会收到通知:

  • 开放式广告交易平台发生变化的次数。
  • 待处理邮件计数器同步请求的数量从零更改为至少一个,再变成零。该处理程序将作为一般信号,指示是否有任何正在进行的 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 结构体的指针。