nl:: Weave:: ExchangeContext
#include <src/lib/core/WeaveExchangeMgr.h>
此类表示两个或多个节点之间的持续对话 (ExchangeContext)。
摘要
它定义了各种传输机制(例如 TCP、UDP 或 Weave Reliable Messaging)中对 ExchangeContext 中的 Weave 消息进行编码和通信的方法。
公共类型 |
|
---|---|
@34{
|
枚举 |
@35{
|
枚举 |
ConnectionClosedFunct)(ExchangeContext *ec, WeaveConnection *con, WEAVE_ERROR conErr)
|
typedefvoid(*
此函数是在现有 Weave 连接关闭时调用的应用回调函数。 |
KeyErrorFunct)(ExchangeContext *ec, WEAVE_ERROR keyErr)
|
typedefvoid(*
按键错误消息处理函数的类型。 |
MessageReceiveFunct)(ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
|
typedefvoid(*
此函数是用于处理收到的 Weave 消息的应用回调。 |
ResponseTimeoutFunct)(ExchangeContext *ec)
|
typedefvoid(*
此函数是用于接收响应消息的超时时限时调用的应用回调函数。 |
RetransmissionTimeoutFunct)(ExchangeContext *ec)
|
typedefvoid(*
此函数是用于在先前传输的消息的重新传输超时时调用的应用回调。 |
Timeout
|
typedefuint32_t
此 ExchangeContext 中用于表示超时的类型(以毫秒为单位)。 |
WRMPAckRcvdFunct)(ExchangeContext *ec, void *msgCtxt)
|
typedefvoid(*
当收到 Weave 消息(请求作为 Weave Reliable Messaging 协议的一部分)时,该函数将调用的应用回调函数。 |
WRMPPauseRcvdFunct)(ExchangeContext *ec, uint32_t pauseTime)
|
typedefvoid(*
在收到节流消息或延迟传送消息作为 Weave Reliable Messaging Protocol(Weave 可靠消息传递协议)的一部分时,此函数是调用的应用回调。 |
WRMPSendErrorFunct)(ExchangeContext *ec, WEAVE_ERROR err, void *msgCtxt)
|
typedefvoid(*
此函数是在发送 Weave 消息时调用的应用回调。 |
公共属性 |
|
---|---|
AllowDuplicateMsgs
|
bool
指示给定交换是否允许重复消息的布尔值指示符。
|
AppState
|
void *
指向应用专属状态对象的指针。
|
Con
|
[只读] 关联的 Weave 连接。
|
EncryptionType
|
uint8_t
发送消息时使用的加密类型。
|
ExchangeId
|
uint16_t
[只读] 已分配的广告交易平台 ID。
|
ExchangeMgr
|
[只读] 所有者是广告交易平台管理员。
|
KeyId
|
uint16_t
发送消息时使用的加密密钥。
|
OnAckRcvd
|
已接收确认的应用回调。
|
OnConnectionClosed
|
|
OnDDRcvd
|
收到延迟送达消息的应用回调。
|
OnKeyError
|
从对等端收到按键错误消息时要调用的应用回调函数。
|
OnMessageReceived
|
|
OnResponseTimeout
|
|
OnRetransmissionTimeout
|
|
OnSendError
|
发送时出错的应用回调。
|
OnThrottleRcvd
|
已接收节流消息的应用回调。
|
PeerAddr
|
IPAddress
[只读] 对等节点的 IP 地址。
|
PeerIntf
|
InterfaceId
[只读] 向对等设备发送消息时使用的出站接口。
|
PeerNodeId
|
uint64_t
[只读] 对等节点的节点 ID。
|
PeerPort
|
uint16_t
[只读] 对等节点的端口。
|
ResponseTimeout
|
等待响应的最长时间(以毫秒为单位);0 表示停用响应超时。
|
RetransInterval
|
uint32_t
重新传输的时间间隔(以毫秒为单位);0 表示禁止重新传输。
|
mMsgProtocolVersion
|
uint16_t
ExchangeContext 的消息协议版本。
|
mWRMPConfig
|
WRMP 配置。
|
公共函数 |
|
---|---|
Abort(void)
|
void
立即中止 Exchange 上下文并释放对它的所有引用。
|
AddRef(void)
|
void
将广告交易平台上下文的参考计数器递增 1。
|
AutoRequestAck() const
|
bool
返回每次发送消息时是否请求确认。
|
CancelRetrans(void)
|
void
取消 Trickle 重新传输机制。
|
Close(void)
|
void
正常关闭交换上下文。
|
EncodeExchHeader(WeaveExchangeHeader *exchangeHeader, uint32_t profileId, uint8_t msgType, PacketBuffer *msgBuf, uint16_t sendFlags)
|
将交换标头编码为消息缓冲区。
|
GetAutoReleaseKey() const
|
bool
返回是否应释放与该广告交易平台关联的加密密钥。
|
GetCurrentRetransmitTimeout(void)
|
uint32_t
获取当前的重新传输超时。
|
GetPeerDescription(char *buf, uint32_t bufSize) const
|
void
构造一个字符串,描述对等节点及其关联的地址 / 连接信息。
|
HandleTrickleMessage(const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo)
|
void
在广告交易平台上下文中处理串联消息。
|
HasPeerRequestedAck(void) const
|
bool
确定在此广告交易平台上是否至少向一条消息发送了一条确认请求。
|
HasRcvdMsgFromPeer(void) const
|
bool
确定是否至少有 1 个关于此广告交易平台的消息发送到了对等端。
|
IsAckPending(void) const
|
bool
确定是否有确认信息正在等待发送到此广告交易平台的对等设备。
|
IsConnectionClosed(void) const
|
bool
确定 ExchangeContext 是否有关联的活跃 WeaveConnection。
|
IsInitiator(void) const
|
bool
判断情境是否为交换的发起者。
|
IsResponseExpected(void) const
|
bool
确定对通过此交换发送的邮件是否应该有响应。
|
Release(void)
|
void
对此广告交易平台上下文的发布引用。
|
SendCommonNullMessage(void)
|
发送 Common::Null 消息。
|
SendMessage(uint32_t profileId, uint8_t msgType, PacketBuffer *msgPayload, uint16_t sendFlags, void *msgCtxt)
|
在此广告交易平台上发送 Weave 消息。
|
SendMessage(uint32_t profileId, uint8_t msgType, PacketBuffer *msgBuf, uint16_t sendFlags, WeaveMessageInfo *msgInfo, void *msgCtxt)
|
在此广告交易平台上发送 Weave 消息。
|
SetAckPending(bool inAckPending)
|
void
设置是否需要将确认信息发送回该广告交易平台上的对等网络。
|
SetAutoReleaseKey(bool autoReleaseKey)
|
void
设置是否应释放与该广告交易平台关联的加密密钥。
|
SetAutoRequestAck(bool autoReqAck)
|
void
设置是否应在每次发送消息时请求确认。
|
SetConnectionClosed(bool inConnectionClosed)
|
void
设置 kFlagConnectionClosed 标记位。
|
SetDropAck(bool inDropAck)
|
void
设置 WeaveExchangeManager 不应针对此上下文发送确认。
|
SetInitiator(bool inInitiator)
|
void
设置 kFlagInitiator 标志位。
|
SetMsgRcvdFromPeer(bool inMsgRcvdFromPeer)
|
void
设置是否从该交换机的对等端收到邮件。
|
SetPeerRequestedAck(bool inPeerRequestedAck)
|
void
设置是否在此广告交易平台上收到的上一条消息中请求了确认。
|
SetResponseExpected(bool inResponseExpected)
|
void
设置在此广告交易平台上是否会收到响应。
|
SetShouldAutoReleaseConnection(bool autoReleaseCon)
|
void
设置是否应释放与该广告交易平台关联的 Weave 连接。
|
SetupTrickleRetransmit(uint32_t retransInterval, uint8_t threshold, uint32_t timeout)
|
通过设置相应的重新传输时间间隔和重新广播阈值,设置串行重新传输机制。
|
ShouldAutoReleaseConnection() const
|
bool
返回是否应释放与该广告交易平台关联的 Weave 连接。
|
ShouldDropAck(void) const
|
bool
确定 WeaveExchangeManager 是否不应发送确认。
|
StartTimerT(void)
|
启动 Trickle 重新广播算法的定期重新传输计时器机制。
|
TeardownTrickleRetransmit(void)
|
void
取消 Trickle 内的周期性计时器并释放包含 Weave 消息的消息缓冲区,从而拆除 Trickle 重新传输机制。
|
UseEphemeralUDPPort(void) const
|
bool
返回是否应通过交换发送的出站消息从本地临时 UDP 端口发送。
|
WRMPFlushAcks(void)
|
|
WRMPSendDelayedDelivery(uint32_t PauseTimeMillis, uint64_t DelayedNodeId)
|
发送延迟递送邮件,以通知发送节点其递送的邮件在递送至收件人之前会出现延迟。
|
WRMPSendThrottleFlow(uint32_t PauseTimeMillis)
|
向对等节点发送节流消息,以请求限制其发送消息。
|
公共类型
@34
@34
属性 | |
---|---|
kSendFlag_AlreadyEncoded
|
用于指示消息已经过编码。 |
kSendFlag_AutoRetrans
|
用于指明已启用自动重新传输。 |
kSendFlag_DefaultMulticastSourceAddress
|
用于指示在发送 IPv6 多播消息时应使用默认 IPv6 源地址选择。 |
kSendFlag_DelaySend
|
用于指示需要延迟发送当前消息。 |
kSendFlag_ExpectResponse
|
用于指明要在指定的超时时间内收到响应。 |
kSendFlag_FromInitiator
|
用于指示当前消息是交换的发起者。 |
kSendFlag_MulticastFromLinkLocal
|
弃用了 |
kSendFlag_NoAutoRequestAck
|
发送消息时禁用自动请求确认功能。 |
kSendFlag_RequestAck
|
用于发送 WRM 消息以请求确认。 |
kSendFlag_RetainBuffer
|
用于指示在发送消息后不应释放消息缓冲区。 |
kSendFlag_RetransmissionTrickle
|
用于指示 Trickle 的重新传输要求。 |
kSendFlag_ReuseMessageId
|
用于指示可重复使用邮件标头中的邮件 ID。 |
kSendFlag_ReuseSourceId
|
用于指示可重复使用邮件标头中的源节点 ID。 |
连接关闭方式
void(* ConnectionClosedFunct)(ExchangeContext *ec, WeaveConnection *con, WEAVE_ERROR conErr)
此函数是在现有 Weave 连接关闭时调用的应用回调函数。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
KeyErrorFunct
void(* KeyErrorFunct)(ExchangeContext *ec, WEAVE_ERROR keyErr)
消息接收功能
void(* MessageReceiveFunct)(ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
此函数是用于处理收到的 Weave 消息的应用回调。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
ResponseTimeoutFunct
void(* ResponseTimeoutFunct)(ExchangeContext *ec)
重新传输超时函数
void(* RetransmissionTimeoutFunct)(ExchangeContext *ec)
WRMPAckRcvdFunct
void(* WRMPAckRcvdFunct)(ExchangeContext *ec, void *msgCtxt)
当收到 Weave 消息(请求作为 Weave Reliable Messaging 协议的一部分)时,该函数将调用的应用回调函数。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
WRMPPauseRcvdFunct
void(* WRMPPauseRcvdFunct)(ExchangeContext *ec, uint32_t pauseTime)
在收到节流消息或延迟传送消息作为 Weave Reliable Messaging Protocol(Weave 可靠消息传递协议)的一部分时,此函数是调用的应用回调。
这些消息都附带时间值(以毫秒为单位),该时间值表示暂停在此 ExchangeContext 上发送 Weave 消息的时间。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
WRMPSendErrorFunct
void(* WRMPSendErrorFunct)(ExchangeContext *ec, WEAVE_ERROR err, void *msgCtxt)
此函数是在发送 Weave 消息时调用的应用回调。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
公共属性
AllowDuplicateMsgs(允许重复消息)
bool AllowDuplicateMsgs
指示给定交换是否允许重复消息的布尔值指示符。
应用状态
void * AppState
指向应用专属状态对象的指针。
EncryptionType
uint8_t EncryptionType
发送消息时使用的加密类型。
广告交易平台 ID
uint16_t ExchangeId
[只读] 已分配的广告交易平台 ID。
KeyId
uint16_t KeyId
发送消息时使用的加密密钥。
连接关闭
ConnectionClosedFunct OnConnectionClosed
OnMessageReceived
MessageReceiveFunct OnMessageReceived
OnResponseTimeout
ResponseTimeoutFunct OnResponseTimeout
OnRetransmissionTimeout
RetransmissionTimeoutFunct OnRetransmissionTimeout
点对点
IPAddress PeerAddr
[只读] 对等节点的 IP 地址。
对等 Intf
InterfaceId PeerIntf
[只读] 向对等设备发送消息时使用的出站接口。
(仅适用于 UDP。)
对等节点 ID
uint64_t PeerNodeId
[只读] 对等节点的节点 ID。
对等端口
uint16_t PeerPort
[只读] 对等节点的端口。
重新传输间隔
uint32_t RetransInterval
重新传输的时间间隔(以毫秒为单位);0 表示禁止重新传输。
公共函数
取消
void Abort( void )
立即中止 Exchange 上下文并释放对它的所有引用。
添加引用
void AddRef( void )
将广告交易平台上下文的参考计数器递增 1。
自动请求
bool AutoRequestAck() const
返回每次发送消息时是否请求确认。
取消重新传输
void CancelRetrans( void )
取消 Trickle 重新传输机制。
关闭
void Close( void )
正常关闭交换上下文。
此调用会减少引用计数,并在引用计数变为 0 时释放交换。
EncodeExchHeader 接口中的方法
WEAVE_ERROR EncodeExchHeader( WeaveExchangeHeader *exchangeHeader, uint32_t profileId, uint8_t msgType, PacketBuffer *msgBuf, uint16_t sendFlags )
将交换标头编码为消息缓冲区。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
|
获取自动释放密钥
bool GetAutoReleaseKey() const
返回是否应释放与该广告交易平台关联的加密密钥。
GetCurrentRetransmitTimeout
uint32_t GetCurrentRetransmitTimeout( void )
GetPeerDescription
void GetPeerDescription( char *buf, uint32_t bufSize ) const
构造一个字符串,描述对等节点及其关联的地址 / 连接信息。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
HandleTrickleMessage
void HandleTrickleMessage( const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo )
在广告交易平台上下文中处理串联消息。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
HasPeerRequestedAck
bool HasPeerRequestedAck( void ) const
确定在此广告交易平台上是否至少向一条消息发送了一条确认请求。
详细信息 | |
---|---|
返回值 |
如果请求确认,则返回 'true'false'。
|
HasRcvdMsgFromPeer
bool HasRcvdMsgFromPeer( void ) const
确定是否至少有 1 个关于此广告交易平台的消息发送到了对等端。
详细信息 | |
---|---|
返回值 |
如果收到消息,则返回 'true' else 'false'。
|
待确认
bool IsAckPending( void ) const
确定是否有确认信息正在等待发送到此广告交易平台的对等设备。
IsConnectionClosed
bool IsConnectionClosed( void ) const
启动程序
bool IsInitiator( void ) const
判断情境是否为交换的发起者。
详细信息 | |
---|---|
返回值 |
如果是启动器,则返回 'true' else 'false'。
|
预期响应
bool IsResponseExpected( void ) const
确定对通过此交换发送的邮件是否应该有响应。
详细信息 | |
---|---|
返回值 |
如果返回预期响应,则返回 'true' else 'false'。
|
版本
void Release( void )
对此广告交易平台上下文的发布引用。
如果数量减少至一,则关闭上下文,重置所有应用回调,并停止所有计时器。
SendCommonNullMessage
WEAVE_ERROR SendCommonNullMessage( void )
发送 Common::Null 消息。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
返回值 |
|
发送消息
WEAVE_ERROR SendMessage( uint32_t profileId, uint8_t msgType, PacketBuffer *msgPayload, uint16_t sendFlags, void *msgCtxt )
在此广告交易平台上发送 Weave 消息。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
|
发送消息
WEAVE_ERROR SendMessage( uint32_t profileId, uint8_t msgType, PacketBuffer *msgBuf, uint16_t sendFlags, WeaveMessageInfo *msgInfo, void *msgCtxt )
在此广告交易平台上发送 Weave 消息。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
|
SetAckPending
void SetAckPending( bool inAckPending )
设置是否需要将确认信息发送回该广告交易平台上的对等网络。
详细信息 | |||
---|---|---|---|
参数 |
|
设置自动释放键
void SetAutoReleaseKey( bool autoReleaseKey )
设置是否应释放与该广告交易平台关联的加密密钥。
详细信息 | |||
---|---|---|---|
参数 |
|
设置自动请求 Ack
void SetAutoRequestAck( bool autoReqAck )
设置是否应在每次发送消息时请求确认。
详细信息 | |||
---|---|---|---|
参数 |
|
已封闭连接
void SetConnectionClosed( bool inConnectionClosed )
设置 kFlagConnectionClosed 标记位。
当与 ExchangeContext 关联的 WeaveConnection 关闭时,系统就会设置此标记。
详细信息 | |||
---|---|---|---|
参数 |
|
SetDropAck
void SetDropAck( bool inDropAck )
设置 WeaveExchangeManager 不应针对此上下文发送确认。
仅供调试使用。
详细信息 | |||
---|---|---|---|
参数 |
|
SetInitiator
void SetInitiator( bool inInitiator )
设置 kFlagInitiator 标志位。
此标志由发起交换的节点设置。
详细信息 | |||
---|---|---|---|
参数 |
|
SetMsgRcvdFromPeer
void SetMsgRcvdFromPeer( bool inMsgRcvdFromPeer )
设置是否从该交换机的对等端收到邮件。
详细信息 | |||
---|---|---|---|
参数 |
|
SetPeerRequestedAck
void SetPeerRequestedAck( bool inPeerRequestedAck )
设置是否在此广告交易平台上收到的上一条消息中请求了确认。
详细信息 | |||
---|---|---|---|
参数 |
|
预计响应时间
void SetResponseExpected( bool inResponseExpected )
设置在此广告交易平台上是否会收到响应。
详细信息 | |||
---|---|---|---|
参数 |
|
SetShouldAutoReleaseConnection
void SetShouldAutoReleaseConnection( bool autoReleaseCon )
设置是否应释放与该广告交易平台关联的 Weave 连接。
详细信息 | |||
---|---|---|---|
参数 |
|
SetupTrickle 重新传输
WEAVE_ERROR SetupTrickleRetransmit( uint32_t retransInterval, uint8_t threshold, uint32_t timeout )
通过设置相应的重新传输时间间隔和重新广播阈值,设置串行重新传输机制。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如果 Trickle 设置成功,则返回 WEAVE_NO_ERROR,否则会映射到 WEAVE_ERROR 的 INET_ERROR。
|
应该自动释放连接
bool ShouldAutoReleaseConnection() const
返回是否应释放与该广告交易平台关联的 Weave 连接。
启动计时器
WEAVE_ERROR StartTimerT( void )
拆解 TrickleRetransmit
void TeardownTrickleRetransmit( void )
取消 Trickle 内的周期性计时器并释放包含 Weave 消息的消息缓冲区,从而拆除 Trickle 重新传输机制。
UseEphemeralUDPPort
bool UseEphemeralUDPPort( void ) const
返回是否应通过交换发送的出站消息从本地临时 UDP 端口发送。
WRMPFlushAcks
WEAVE_ERROR WRMPFlushAcks( void )
WRMPSendDelayedDelivery
WEAVE_ERROR WRMPSendDelayedDelivery( uint32_t PauseTimeMillis, uint64_t DelayedNodeId )
发送延迟递送邮件,以通知发送节点其递送的邮件在递送至收件人之前会出现延迟。
可能导致邮件在递送之前延迟的原因之一是收件人结束节点处于休眠状态。此邮件可能是由发送路径中合适的中间节点生成的,该节点知道充分的信息,可以推断出延迟递送。收到此消息后,发送者会重新调整重发计时器的查找时间,以确保返回确认信息。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
|
WRMPSendThrottleFlow
WEAVE_ERROR WRMPSendThrottleFlow( uint32_t PauseTimeMillis )
向对等节点发送节流消息,以请求限制其发送消息。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
|