nl:: Weave:: ExchangeContext
#include <src/lib/core/WeaveExchangeMgr.h>
此类表示两个或多个节点之间正在进行的对话 (ExchangeContext)。
摘要
它定义了在 ExchangeContext 中通过各种传输机制(例如 TCP、UDP 或 Weave Reliable Messaging)对 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(*
当收到 Throttle 消息或 Delayed Delivery 消息(作为 Weave Reliable Messaging Protocol 的一部分)时,此函数是应用回调。 |
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
在交换上下文中处理 Trill 消息。
|
HasPeerRequestedAck(void) const
|
bool
确定对等方是否在此广告交易平台上对至少一条消息请求确认。
|
HasRcvdMsgFromPeer(void) const
|
bool
确定在此广告交易平台上是否至少收到了一条来自对等方的消息。
|
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
返回通过 Exchange 发送的出站消息是否应从本地临时 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。 |
ConnectionClosedFunct
void(* ConnectionClosedFunct)(ExchangeContext *ec, WeaveConnection *con, WEAVE_ERROR conErr)
此函数是在现有 Weave 连接关闭时调用的应用回调。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
KeyErrorFunct
void(* KeyErrorFunct)(ExchangeContext *ec, WEAVE_ERROR keyErr)
MessageReceiveFunct
void(* MessageReceiveFunct)(ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
此函数是用于处理收到的 Weave 消息的应用回调。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
ResponseTimeoutFunct
void(* ResponseTimeoutFunct)(ExchangeContext *ec)
RetransmissionTimeoutFunct
void(* RetransmissionTimeoutFunct)(ExchangeContext *ec)
WRMPAckRcvdFunct
void(* WRMPAckRcvdFunct)(ExchangeContext *ec, void *msgCtxt)
当收到 Weave 消息的确认,而该消息作为 Weave Reliable Messaging 协议的一部分请求了确认时,将调用此函数。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
WRMPPauseRcvdFunct
void(* WRMPPauseRcvdFunct)(ExchangeContext *ec, uint32_t pauseTime)
当收到 Throttle 消息或 Delayed Delivery 消息(作为 Weave Reliable Messaging Protocol 的一部分)时,此函数是应用回调。
每封邮件都附带一个时间值(以毫秒为单位),该值表示在此 ExchangeContext 上暂停发送 Weave 邮件的时间。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
WRMPSendErrorFunct
void(* WRMPSendErrorFunct)(ExchangeContext *ec, WEAVE_ERROR err, void *msgCtxt)
此函数是在发送 Weave 消息时出错时要调用的应用回调。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
公共属性
AllowDuplicateMsgs
bool AllowDuplicateMsgs
指示某个广告交易平台是否允许重复消息的布尔值。
AppState
void * AppState
指向特定于应用的状态对象的指针。
EncryptionType
uint8_t EncryptionType
发送邮件时使用的加密类型。
ExchangeId
uint16_t ExchangeId
[只读] 分配的广告交易平台 ID。
KeyId
uint16_t KeyId
发送邮件时使用的加密密钥。
OnConnectionClosed
ConnectionClosedFunct OnConnectionClosed
OnMessageReceived
MessageReceiveFunct OnMessageReceived
OnResponseTimeout
ResponseTimeoutFunct OnResponseTimeout
OnRetransmissionTimeout
RetransmissionTimeoutFunct OnRetransmissionTimeout
PeerAddr
IPAddress PeerAddr
[只读] 对等节点的 IP 地址。
PeerIntf
InterfaceId PeerIntf
[只读] 向对等端发送消息时使用的出站接口。
(仅对 UDP 有意义。)
PeerNodeId
uint64_t PeerNodeId
[只读] 对等节点的节点 ID。
PeerPort
uint16_t PeerPort
[只读] 对等节点的端口。
RetransInterval
uint32_t RetransInterval
重新传输的间隔时间(以毫秒为单位);0 表示禁止重新传输。
公共函数
中止
void Abort( void )
立即取消 Exchange 上下文,并释放对其的所有引用。
AddRef
void AddRef( void )
将交换上下文的参考计数器加 1。
AutoRequestAck
bool AutoRequestAck() const
返回是否在每次发送消息时请求确认。
CancelRetrans
void CancelRetrans( void )
取消 Trickle 重新传输机制。
关闭
void Close( void )
正常关闭交换上下文。
当参考计数为零时,此调用将减少参考计数并释放交换。
EncodeExchHeader
WEAVE_ERROR EncodeExchHeader( WeaveExchangeHeader *exchangeHeader, uint32_t profileId, uint8_t msgType, PacketBuffer *msgBuf, uint16_t sendFlags )
将交换标头编码到消息缓冲区中。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
|
GetAutoReleaseKey
bool GetAutoReleaseKey() const
返回是否应在交换被释放后释放与交换关联的加密密钥。
GetCurrentRetransmitTimeout
uint32_t GetCurrentRetransmitTimeout( void )
获取当前的重新传输超时时间。
它可能是初始重新传输超时,也可能是主动重新传输超时,具体取决于 ExchangeContext 是否有正在进行与其对等方进行的消息交换。
详细信息 | |
---|---|
返回值 |
当前的重新传输时间。
|
GetPeerDescription
void GetPeerDescription( char *buf, uint32_t bufSize ) const
构建一个描述对等节点及其相关地址 / 连接信息的字符串。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
HandleTrickleMessage
void HandleTrickleMessage( const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo )
在交换上下文中处理 Trill 消息。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
HasPeerRequestedAck
bool HasPeerRequestedAck( void ) const
确定对等方是否在此广告交易平台上对至少一条消息请求确认。
详细信息 | |
---|---|
返回值 |
返回“true”如果请求确认,则为“false”。
|
HasRcvdMsgFromPeer
bool HasRcvdMsgFromPeer( void ) const
确定在此广告交易平台上是否至少收到了一条来自对等方的消息。
详细信息 | |
---|---|
返回值 |
返回“true”如果收到邮件,则为“false”。
|
IsAckPending
bool IsAckPending( void ) const
确定此广告交易平台上是否已有待向对等方发送的确认。
IsConnectionClosed
bool IsConnectionClosed( void ) const
IsInitiator
bool IsInitiator( void ) const
确定上下文是否为广告交易平台的发起者。
详细信息 | |
---|---|
返回值 |
返回“true”如果是发起者,则为“false”。
|
IsResponseExpected
bool IsResponseExpected( void ) const
确定通过此广告交易平台发送的消息是否需要回复。
详细信息 | |
---|---|
返回值 |
返回“true”如果预期响应,则为“false”。
|
版本
void Release( void )
释放对此广告交易平台上下文的引用。
如果倒计时为 1,则关闭上下文,重置所有应用回调,并停止所有计时器。
SendCommonNullMessage
WEAVE_ERROR SendCommonNullMessage( void )
发送 Common::Null 消息。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
返回值 |
|
SendMessage
WEAVE_ERROR SendMessage( uint32_t profileId, uint8_t msgType, PacketBuffer *msgPayload, uint16_t sendFlags, void *msgCtxt )
在此广告交易平台上发送 Weave 消息。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
|
SendMessage
WEAVE_ERROR SendMessage( uint32_t profileId, uint8_t msgType, PacketBuffer *msgBuf, uint16_t sendFlags, WeaveMessageInfo *msgInfo, void *msgCtxt )
在此广告交易平台上发送 Weave 消息。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
|
SetAckPending
void SetAckPending( bool inAckPending )
设置是否需要在此广告交易平台上将确认发送回对等方。
详细信息 | |||
---|---|---|---|
参数 |
|
SetAutoReleaseKey
void SetAutoReleaseKey( bool autoReleaseKey )
设置在释放交换后是否应释放与该交换相关联的加密密钥。
详细信息 | |||
---|---|---|---|
参数 |
|
SetAutoRequestAck
void SetAutoRequestAck( bool autoReqAck )
设置每次发送消息时是否应请求确认。
详细信息 | |||
---|---|---|---|
参数 |
|
SetConnectionClosed
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 )
设置是否在此广告交易平台上接收的最后一条消息中请求了确认。
详细信息 | |||
---|---|---|---|
参数 |
|
SetResponseExpected
void SetResponseExpected( bool inResponseExpected )
设置预期在此广告交易平台上是否收到响应。
详细信息 | |||
---|---|---|---|
参数 |
|
SetShouldAutoReleaseConnection
void SetShouldAutoReleaseConnection( bool autoReleaseCon )
设置在释放交换后是否应释放与该交换相关联的 Weave 连接。
详细信息 | |||
---|---|---|---|
参数 |
|
SetupTrickleRetransmit
WEAVE_ERROR SetupTrickleRetransmit( uint32_t retransInterval, uint8_t threshold, uint32_t timeout )
通过设置相应的重新传输间隔和重播阈值,设置微秒级重新传输机制。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
WEAVE_NO_ERROR(如果 Trickle 设置成功),否则会映射到 WEAVE_ERROR 的 INET_ERROR。
|
ShouldAutoReleaseConnection
bool ShouldAutoReleaseConnection() const
返回是否应在交换被释放后释放与交换关联的 Weave 连接。
StartTimerT
WEAVE_ERROR StartTimerT( void )
TeardownTrickleRetransmit
void TeardownTrickleRetransmit( void )
通过取消 Trickle 中的定期计时器并释放存储 Weave 消息的消息缓冲区,从而破坏 Trickle 重新传输机制。
UseEphemeralUDPPort
bool UseEphemeralUDPPort( void ) const
返回通过 Exchange 发送的出站消息是否应从本地临时 UDP 端口发送。
WRMPFlushAcks
WEAVE_ERROR WRMPFlushAcks( void )
WRMPSendDelayedDelivery
WEAVE_ERROR WRMPSendDelayedDelivery( uint32_t PauseTimeMillis, uint64_t DelayedNodeId )
发送“延迟递送”消息以通知发送方节点,其先前发送的邮件在递送至收件人之前会遇到预期延迟。
邮件在递送前延迟的一个可能原因是,收件人的终端节点处于休眠状态。此消息可能由发送路径中适当的中间节点生成,该节点对收件人有足够的了解,可以推断出递送延迟。收到此消息后,发送者将重新调整其重新传输计时器,以寻找回溯确认消息。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
|
WRMPSendThrottleFlow
WEAVE_ERROR WRMPSendThrottleFlow( uint32_t PauseTimeMillis )
向对等节点发送节流流消息,请求该节点限制其发送消息。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
|