nl:: Weave:: WeaveMessageLayer
#include <src/lib/core/WeaveMessageLayer.h>
WeaveMessageLayer 类的定义,该类用于管理与其他 Weave 节点的通信。
摘要
它使用多个 InetLayer 端点之一与其他 Weave 节点建立通信信道。
构造函数和析构函数 |
|
---|---|
WeaveMessageLayer(void)
Weave Message 层构造函数。
|
公共类型 |
|
---|---|
AcceptErrorFunct)(WeaveMessageLayer *msgLayer, WEAVE_ERROR err)
|
typedefvoid(*
此函数是更高层级的回调,用于在处理传入 TCP 连接期间报告错误。 |
CallbackRemovedFunct)(void *listenerState)
|
typedefvoid(*
此函数用于移除回调。 |
ConnectionReceiveFunct)(WeaveMessageLayer *msgLayer, WeaveConnection *con)
|
typedefvoid(*
此函数是用于处理传入 TCP 连接的上层回调。 |
MessageLayerActivityChangeHandlerFunct)(bool messageLayerIsActive)
|
typedefvoid(*
此函数是用于报告消息层活动更改的应用回调。 |
MessageReceiveFunct)(WeaveMessageLayer *msgLayer, WeaveMessageInfo *msgInfo, PacketBuffer *payload)
|
typedefvoid(*
此函数是通过 UDP 收到 Weave 消息时调用的更高层级回调。 |
ReceiveErrorFunct)(WeaveMessageLayer *msgLayer, WEAVE_ERROR err, const IPPacketInfo *pktInfo)
|
typedefvoid(*
此函数是遇到错误时调用的较高层回调。 |
State{
|
枚举 WeaveMessageLayer 的状态。 |
TunneledMsgReceiveFunct)(WeaveMessageLayer *msgLayer, PacketBuffer *payload)
|
typedefvoid(*
此函数是通过本地 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:: |
InitContext 类的定义。 |
公共类型
AcceptErrorFunct
void(* AcceptErrorFunct)(WeaveMessageLayer *msgLayer, WEAVE_ERROR err)
此函数是更高层级的回调,用于在处理传入 TCP 连接期间报告错误。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
CallbackRemovedFunct
void(* CallbackRemovedFunct)(void *listenerState)
系统会调用此函数来移除回调。
详细信息 | |||
---|---|---|---|
参数 |
|
ConnectionReceiveFunct
void(* ConnectionReceiveFunct)(WeaveMessageLayer *msgLayer, WeaveConnection *con)
此函数是用于处理传入 TCP 连接的上层回调。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
MessageLayerActivityChangeHandlerFunct
void(* MessageLayerActivityChangeHandlerFunct)(bool messageLayerIsActive)
此函数是用于报告消息层活动更改的应用回调。
如果至少有一个打开的广告交易或待处理的消息计数器同步请求,则消息层被视为处于活跃状态。
详细信息 | |||
---|---|---|---|
参数 |
|
MessageReceiveFunct
void(* MessageReceiveFunct)(WeaveMessageLayer *msgLayer, WeaveMessageInfo *msgInfo, PacketBuffer *payload)
此函数是通过 UDP 收到 Weave 消息时调用的更高层级回调。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
ReceiveErrorFunct
void(* ReceiveErrorFunct)(WeaveMessageLayer *msgLayer, WEAVE_ERROR err, const IPPacketInfo *pktInfo)
此函数是遇到错误时调用的更高层级回调。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
州
State
WeaveMessageLayer 的状态。
属性 | |
---|---|
kState_Initialized
|
WeaveMessageLayer 初始化时的状态。 |
kState_Initializing
|
WeaveMessageLayer 正在初始化过程中的状态。 |
kState_NotInitialized
|
WeaveMessageLayer 未初始化时的状态。 |
TunneledMsgReceiveFunct
void(* TunneledMsgReceiveFunct)(WeaveMessageLayer *msgLayer, PacketBuffer *payload)
此函数是通过本地 UDP 隧道接收隧道数据包时调用的更高层级回调。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
公共属性
AppState
void * AppState
指向特定于应用的状态对象的指针。
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
SystemLayer
System::Layer * SystemLayer
公共函数
ClearUnsecuredConnectionListener
WEAVE_ERROR ClearUnsecuredConnectionListener( ConnectionReceiveFunct oldOnUnsecuredConnectionReceived, CallbackRemovedFunct newOnUnsecuredConnectionCallbacksRemoved )
CloseEndpoints
WEAVE_ERROR CloseEndpoints( void )
CreateTunnel
WEAVE_ERROR CreateTunnel( WeaveConnectionTunnel **tunPtr, WeaveConnection & conOne, WeaveConnection & conTwo, uint32_t inactivityTimeoutMS )
通过将两个指定的 WeaveConnection 耦合在一起来创建 WeaveConnectionTunnel。
成功创建后,与组件 WeaveConnection 对象对应的 TCPEndPoint 会移交给 WeaveConnectionTunnel,否则 WeaveConnection 会关闭。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
|
DecodeHeader
WEAVE_ERROR DecodeHeader( PacketBuffer *msgBuf, WeaveMessageInfo *msgInfo, uint8_t **payloadStart )
从收到的 Weave 消息中解码 Weave 消息层标头。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
EncodeMessage
WEAVE_ERROR EncodeMessage( WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf, WeaveConnection *con, uint16_t maxLen, uint16_t reserve )
将 WeaveMessageLayer 标头编码到 PacketBuffer 中。
详细信息 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||||
返回值 |
|
EncodeMessage
WEAVE_ERROR EncodeMessage( const IPAddress & destAddr, uint16_t destPort, InterfaceId sendIntId, WeaveMessageInfo *msgInfo, PacketBuffer *payload )
将 Weave Message 层标头编码到 PacketBuffer 中。
详细信息 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||||
返回值 |
|
EphemeralUDPPortEnabled
bool EphemeralUDPPortEnabled( void ) const
检查是否应从临时 UDP 源端口发送本地发起的 Weave UDP 交换。
GetConnectionPoolStats
void GetConnectionPoolStats( nl::Weave::System::Stats::count_t & aOutInUse ) const
获取正在使用的 WeaveConnection 数量和池的大小。
详细信息 | |||
---|---|---|---|
参数 |
|
Init
WEAVE_ERROR Init( InitContext *context )
初始化 Weave 消息层对象。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
|
IsBoundToLocalIPv4Address
bool IsBoundToLocalIPv4Address( void ) const
检查 WeaveMessageLayer 是否绑定到本地 IPv4 地址。
IsBoundToLocalIPv6Address
bool IsBoundToLocalIPv6Address( void ) const
检查 WeaveMessageLayer 是否绑定到本地 IPv6 地址。
IsMessageLayerActive
bool IsMessageLayerActive( void )
NewConnection
WeaveConnection * NewConnection( void )
NewConnectionTunnel
WeaveConnectionTunnel * NewConnectionTunnel( void )
ReEncodeMessage
WEAVE_ERROR ReEncodeMessage( PacketBuffer *buf )
RefreshEndpoints
WEAVE_ERROR RefreshEndpoints( void )
根据系统网络接口的当前状态刷新 InetLayer 端点。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
ResendMessage
WEAVE_ERROR ResendMessage( WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf )
使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
ResendMessage
WEAVE_ERROR ResendMessage( const IPAddress & destAddr, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf )
使用底层 Inetlayer UDP 端点重新发送已编码的 Weave 消息。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
ResendMessage
WEAVE_ERROR ResendMessage( const IPAddress & destAddr, uint16_t destPort, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf )
使用底层 Inetlayer UDP 端点重新发送编码的 Weave 消息。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
|
ResendMessage
WEAVE_ERROR ResendMessage( const IPAddress & destAddr, uint16_t destPort, InterfaceId interfaceId, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf )
使用底层 Inetlayer UDP 端点重新发送已编码的 Weave 消息。
注意:如果未提供目标地址,请尝试根据消息标头中的节点标识符确定目标地址。如果无法执行此操作,则失败。 - 如果目标地址是本地 Fabric 的 Fabric 地址,并且调用方未指定目标节点 ID,则从目标地址中提取该 ID。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
|
SendMessage
WEAVE_ERROR SendMessage( WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf )
对 Weave 消息进行编码后,使用底层 Inetlayer UDP 端点发送该消息。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
SendMessage
WEAVE_ERROR SendMessage( const IPAddress & destAddr, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf )
对 Weave 消息进行编码后,使用底层 Inetlayer UDP 端点发送该消息。
注意:使用的目标端口为 WEAVE_PORT。-如果未提供目的地地址,请尝试根据消息标头中的节点标识符确定该地址。如果无法完成此操作,则会失败。
- 如果目标地址是本地 Fabric 的 Fabric 地址,并且调用方未指定目标节点 ID,则从目标地址中提取该 ID。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
SendMessage
WEAVE_ERROR SendMessage( const IPAddress & destAddr, uint16_t destPort, InterfaceId sendIntfId, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf )
编码后使用底层 Inetlayer UDP 端点发送 Weave 消息。
注意:如果未提供目标地址,请尝试通过邮件标头中的节点标识符来确定该地址。如果无法执行此操作,则失败。 - 如果目标地址是本地 Fabric 的 Fabric 地址,并且调用方未指定目标节点 ID,则从目标地址中提取该 ID。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
|
SendUDPTunneledMessage
WEAVE_ERROR SendUDPTunneledMessage( const IPAddress & destAddr, WeaveMessageInfo *msgInfo, PacketBuffer *msgBuf )
用于通过本地 UDP 隧道发送隧道化数据包的函数。
通过 UDP 发送隧道化 IPv6 数据消息。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
SetSignalMessageLayerActivityChanged
void SetSignalMessageLayerActivityChanged( MessageLayerActivityChangeHandlerFunct messageLayerActivityChangeHandler )
设置每当消息层的 activity 发生变化时都会调用的应用处理程序。
具体而言,应用会在以下情况下收到通知:
- 已开始的交流数量发生变化。
- 待处理消息计数器同步请求的数量从零变为至少 1,然后再变回零。该处理程序将用作常规信号,指示是否有任何进行中的 Weave 对话或待处理的响应。必须在 WeaveMessageLayer 初始化后设置处理程序;关闭 WeaveMessageLayer 会清除当前处理程序。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
|
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 )
关闭所有打开的 Inet 层端点,重置所有更高层级的回调、成员变量和对象。调用 Shutdown() 会终止 WeaveMessageLayer 对象。
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 消息大小上限。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
Weave 载荷的大小上限。
|
GetPeerDescription
void GetPeerDescription( char *buf, size_t bufSize, uint64_t nodeId, const IPAddress *addr, uint16_t port, InterfaceId interfaceId, const WeaveConnection *con )
构建一个字符串,用于描述对等节点及其关联的地址/连接信息。
生成的字符串采用以下格式:
([ ]: % , con )
详细信息 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
GetPeerDescription
void GetPeerDescription( char *buf, size_t bufSize, const WeaveMessageInfo *msgInfo )
根据与从对等端收到的消息相关的信息,构建一个描述对等节点的字符串。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|