nl::Weave::Profiles::WeaveTunnel::WeaveTunnelConnectionMgr

#include <src/lib/profiles/weave-tunneling/WeaveTunnelConnectionMgr.h>

这个类封装了所有 Weave 隧道连接状态以及相关的管理逻辑和功能。

摘要

此类的实例将用于管理通向 Service 的 Weave 隧道所在的每个接口上的隧道。

构造函数和析构函数

WeaveTunnelConnectionMgr(void)

公共类型

ConnectPolicyCallback)(void *const appState, ReconnectParam &reconnectParam, uint32_t &delayMsec) typedef
void(*
用于提取下一次隧道重新连接前的等待时间间隔的回调。
TunnelConnNotifyReasons{
  kStatus_TunDown = 0,
  kStatus_TunPrimaryUp = 1,
  kStatus_TunPrimaryConnError = 2,
  kStatus_TunBackupConnError = 3,
  kStatus_TunFailoverToBackup = 4,
  kStatus_TunBackupOnlyDown = 5,
  kStatus_TunBackupUp = 6,
  kStatus_TunPrimaryAndBackupUp = 7,
  kStatus_TunPrimaryReconnectRcvd = 8,
  kStatus_TunBackupReconnectRcvd = 9,
  kStatus_TunPrimaryLiveness = 10,
  kStatus_TunBackupLiveness = 11
}
枚举
TunnelConnNotifyReasons typedef
TunnelConnectionState{
  kState_NotConnected = 0,
  kState_Connecting = 1,
  kState_ConnectionEstablished = 2,
  kState_TunnelOpen = 3,
  kState_TunnelClosing = 4,
  kState_ReconnectRecvd = 5
}
枚举
TunnelConnectionState typedef

公共属性

mServiceConnDelayPolicyCallback

公共函数

Init(WeaveTunnelAgent *tunAgent, TunnelType tunType, SrcInterfaceType srcIntfType, const char *connIntfName)
ServiceTunnelClose(WEAVE_ERROR err)
void
关闭服务隧道。
SetInterfaceName(const char *intfName)
void
为隧道连接设置 InterfaceName。
SetInterfaceType(const SrcInterfaceType srcIntfType)
void
为隧道连接设置 SrcInterfaceType。
Shutdown(void)
void
StopAndReconnectTunnelConn(ReconnectParam & reconnParam)
void
停止服务隧道连接并尝试重新连接。
TryConnectingNow(void)
尝试与 Service 建立连接。

公共静态函数

DefaultReconnectPolicyCallback(void *const appstate, ReconnectParam & reconnectParam, uint32_t & delayMsec)
void
用于在下次连接到 Service 时进行提取操作的默认政策实现。
HandleServiceConnectionClosed(WeaveConnection *con, WEAVE_ERROR conErr)
void
关闭服务 TCP 连接时调用的处理程序。
HandleServiceConnectionComplete(WeaveConnection *con, WEAVE_ERROR conErr)
void
服务 TCP 连接完成时调用的处理程序。
RecvdFromService(WeaveConnection *con, const WeaveMessageInfo *msgInfo, PacketBuffer *message)
void
用于在隧道标头内解封原始 IPv6 数据包后,接收来自服务 TCP 连接的隧道式 IPv6 数据包并转发到隧道 EndPoint 接口的处理程序。
ServiceMgrStatusHandler(void *appState, WEAVE_ERROR err, StatusReport *report)
void
如果服务管理器未能与服务建立 TCP 连接,则调用处理程序。

公共类型

ConnectPolicyCallback

void(* ConnectPolicyCallback)(void *const appState, ReconnectParam &reconnectParam, uint32_t &delayMsec)

用于提取下一次隧道重新连接前的等待时间间隔的回调。

具体说明
参数
[in] appState
在 SubscriptionClient 初始化期间设置的应用状态指针。
[in] reconnectParam
包含会影响重新连接延迟计算的参数的结构。
[out] delayMsec
下一次尝试重新连接前等待的时间(以毫秒为单位)。

TunnelConnNotifyReasons

 TunnelConnNotifyReasons
属性
kStatus_TunBackupConnError

用于表示备用隧道连接尝试失败,或现有连接尝试在本地取消或被对等方关闭。

kStatus_TunBackupLiveness

用于指示 Backup Weave 隧道上的隧道活跃性探测相关信息。

kStatus_TunBackupOnlyDown

用于表示备用隧道已关闭。

kStatus_TunBackupReconnectRcvd

用于表示 Service 已请求重新连接 Backup Weave 隧道。

kStatus_TunBackupUp

用于指示 Backup Weave 隧道已启动。

kStatus_TunDown

用于指示 Weave 隧道已经关闭。

kStatus_TunFailoverToBackup

用于表示主隧道已关闭且已切换到备用隧道。

kStatus_TunPrimaryAndBackupUp

用于表示主 Weave 隧道和备用 Weave 隧道均已开启。

kStatus_TunPrimaryConnError

用于表示主要隧道连接尝试失败,或现有隧道连接尝试在本地取消或被对等方关闭。

kStatus_TunPrimaryLiveness

用于指示 Primary Weave 隧道上的隧道活跃性探测信息。

kStatus_TunPrimaryReconnectRcvd

用于表示服务已请求重新连接主 Weave 隧道。

kStatus_TunPrimaryUp

用于指示主 Weave 隧道已经启动。

TunnelConnNotifyReasons

enum nl::Weave::Profiles::WeaveTunnel::WeaveTunnelConnectionMgr::TunnelConnNotifyReasons TunnelConnNotifyReasons

TunnelConnectionState

 TunnelConnectionState
属性
kState_Connecting

用于表明 Weave Tunnel 连接已启动。

kState_ConnectionEstablished

用于指示已建立 Weave Tunnel 连接并交换路线信息。

kState_NotConnected

用于指明 Weave Tunnel 未连接。

kState_ReconnectRecvd

用于表明服务希望在目录查询后重新连接边界网关。

kState_TunnelClosing

用于表示 Weave Tunnel 正在关闭并且连接正在断开。

kState_TunnelOpen

用于表明 Weave Tunnel 已打开且已准备好用于数据传输。

TunnelConnectionState

enum nl::Weave::Profiles::WeaveTunnel::WeaveTunnelConnectionMgr::TunnelConnectionState TunnelConnectionState

公共属性

mServiceConnDelayPolicyCallback

ConnectPolicyCallback mServiceConnDelayPolicyCallback

公共函数

Init

WEAVE_ERROR Init(
  WeaveTunnelAgent *tunAgent,
  TunnelType tunType,
  SrcInterfaceType srcIntfType,
  const char *connIntfName
)

ServiceTunnelClose

void ServiceTunnelClose(
  WEAVE_ERROR err
)

关闭服务隧道。

具体说明
参数
[in] err
从调用方传入的 WEAVE_ERROR。

SetInterfaceName

void SetInterfaceName(
  const char *intfName
)

为隧道连接设置 InterfaceName。

具体说明
参数
[in] tunIntf
用于设置服务隧道连接的 InterfaceName。

SetInterfaceType

void SetInterfaceType(
  const SrcInterfaceType srcIntfType
)

为隧道连接设置 SrcInterfaceType。

具体说明
参数
[in] srcIntfType
用于服务隧道连接的接口的网络技术类型。

关停

void Shutdown(
  void
)

StopAndReconnectTunnelConn

void StopAndReconnectTunnelConn(
  ReconnectParam & reconnParam
)

停止服务隧道连接并尝试重新连接。

具体说明
参数
[in] err
从调用方传入的 WEAVE_ERROR。

TryConnectingNow

WEAVE_ERROR TryConnectingNow(
  void
)

尝试与 Service 建立连接。

尝试使用 ServiceManager 或直接与 Service 建立连接。

WeaveTunnelConnectionMgr

 WeaveTunnelConnectionMgr(
  void
)

公共静态函数

DefaultReconnectPolicyCallback

void DefaultReconnectPolicyCallback(
  void *const appstate,
  ReconnectParam & reconnectParam,
  uint32_t & delayMsec
)

用于在下次连接到 Service 时进行提取操作的默认政策实现。

此政策会遵循一个斐波那契序列(一直到 WEAVE_CONFIG_TUNNELING_RECONNECT_MAX_FIBONACCI_INDEX),在递增的时间范围内随机选择一个时段(分辨率为毫秒)。

具体说明
参数
[in] appState
在 SubscriptionClient 初始化期间设置的应用状态指针。
[in] reconnectParam
包含会影响重新连接延迟计算的参数的结构。
[out] delayMsec
下一次尝试重新连接前等待的时间(以毫秒为单位)。

HandleServiceConnectionClosed

void HandleServiceConnectionClosed(
  WeaveConnection *con,
  WEAVE_ERROR conErr
)

关闭服务 TCP 连接时调用的处理程序。

如果 mServiceConKeepAlive 设置为 true,设备将尝试重新建立与 Service 的连接。

随后,设备会尝试重新建立与 Service 的连接。

具体说明
参数
[in] con
指向 WeaveConnection 对象的指针。
[in] conErr
WeaveConnection 或 WEAVE_NO_ERROR 中的任何错误。

HandleServiceConnectionComplete

void HandleServiceConnectionComplete(
  WeaveConnection *con,
  WEAVE_ERROR conErr
)

服务 TCP 连接完成时调用的处理程序。

设备会继续通过该功能向 Service 启动隧道控制命令。

设备会继续通过该功能向 Service 启动隧道控制命令。

具体说明
参数
[in] con
指向 WeaveConnection 对象的指针。
[in] conErr
WeaveConnection 或 WEAVE_NO_ERROR 中的任何错误。

RecvdFromService

void RecvdFromService(
  WeaveConnection *con,
  const WeaveMessageInfo *msgInfo,
  PacketBuffer *message
)

用于在隧道标头内解封原始 IPv6 数据包后,接收来自服务 TCP 连接的隧道式 IPv6 数据包并转发到隧道 EndPoint 接口的处理程序。

具体说明
参数
[in] con
指向 WeaveConnection 对象的指针。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] message
指向包含隧道式 IPv6 数据包的 PacketBuffer 对象的指针。

ServiceMgrStatusHandler

void ServiceMgrStatusHandler(
  void *appState,
  WEAVE_ERROR err,
  StatusReport *report
)

如果服务管理器未能与服务建立 TCP 连接,则调用处理程序。