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 消息层标头。
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 消息层对象。
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)
对 Weave 消息进行编码后,使用底层 Inetlayer UDP 端点发送该消息。
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 消息层标头。

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

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 消息标头格式版本。
WEAVE_ERROR_INVALID_MESSAGE_LENGTH
如果消息缓冲区中的载荷长度为零。
WEAVE_ERROR_UNSUPPORTED_ENCRYPTION_TYPE
如果邮件标头中的加密类型不受支持。
WEAVE_ERROR_MESSAGE_TOO_LONG
如果编码后的邮件长度超过请求的最大长度。
WEAVE_ERROR_BUFFER_TOO_SMALL
如果消息载荷前后没有足够的空间。
other
提取会话状态时由 Fabric 状态对象生成的错误。

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 消息版本。
WEAVE_ERROR_INVALID_MESSAGE_LENGTH
如果消息缓冲区中的载荷长度为零。
WEAVE_ERROR_UNSUPPORTED_ENCRYPTION_TYPE
不支持的加密类型。
WEAVE_ERROR_MESSAGE_TOO_LONG
如果编码后的邮件长度超过请求的最大长度。
WEAVE_ERROR_BUFFER_TOO_SMALL
如果消息载荷前后没有足够的空间。
other
提取会话状态时由 Fabric 状态对象生成的错误。

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 消息。

注意:如果未提供目标地址,请尝试根据消息标头中的节点标识符确定目标地址。如果无法执行此操作,则失败。 - 如果目标地址是本地 Fabric 的 Fabric 地址,并且调用方未指定目标节点 ID,则从目标地址中提取该 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
)

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

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

SendMessage

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

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

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

- 如果目标地址是本地 Fabric 的 Fabric 地址,并且调用方未指定目标节点 ID,则从目标地址中提取该 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 消息。

注意:如果未提供目标地址,请尝试通过邮件标头中的节点标识符来确定该地址。如果无法执行此操作,则失败。 - 如果目标地址是本地 Fabric 的 Fabric 地址,并且调用方未指定目标节点 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 确定 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 发生变化时都会调用的应用处理程序。

具体而言,应用会在以下情况下收到通知:

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

详细信息
参数
[in] messageLayerActivityChangeHandler
指向一个函数的指针,用于在消息层活动发生变化时调用该函数。
返回值
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,则返回的最大载荷大小不会导致 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 结构的指针,其中包含有关消息的信息。