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
关闭 Service 隧道。
SetInterfaceName(const char *intfName)
void
为隧道连接设置 InterfaceName。
SetInterfaceType(const SrcInterfaceType srcIntfType)
void
为隧道连接设置 SrcInterfaceType。
Shutdown(void)
void
StopAndReconnectTunnelConn(ReconnectParam & reconnParam)
void
请停止服务隧道连接,然后尝试重新连接。
TryConnectingNow(void)
尝试与服务建立连接。

公共静态函数

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
处理程序从服务 TCP 连接接收隧道式 IPv6 数据包,并在从隧道标头内部解封装原始 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

用于表示主 Weave 隧道上的隧道活跃性探测器的相关信息。

kStatus_TunPrimaryReconnectRcvd

用于表示 Service 已请求重新连接主 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
)

关闭 Service 隧道。

详细信息
参数
[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
)

尝试与服务建立连接。

尝试使用 ServiceManager 或直接建立与服务的连接。

WeaveTunnelConnectionMgr

 WeaveTunnelConnectionMgr(
  void
)

公共静态函数

DefaultReconnectPolicyCallback

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

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

此政策会按照一个持续到 WEAVE_CONFIG_TUNNELING_RECONNECT_MAX_FIBONACCI_INDEX 的 Fibonacci 序列,在不断增加的窗口中挑选一个随机时隙(采用毫秒级分辨率)。

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

HandleServiceConnectionClosed

void HandleServiceConnectionClosed(
  WeaveConnection *con,
  WEAVE_ERROR conErr
)

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

如果 mServiceConKeepAlive 设为 true,设备会尝试重新建立与服务的连接。

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

详细信息
参数
[in] con
指向 WeaveConnection 对象的指针。
[in] conErr
WeaveConnection 或 WEAVE_NO_ERROR 中的任何错误。

HandleServiceConnectionComplete

void HandleServiceConnectionComplete(
  WeaveConnection *con,
  WEAVE_ERROR conErr
)

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

接着,设备会通过此功能向本服务发起隧道控制命令。

接着,设备会通过此功能向本服务发起隧道控制命令。

详细信息
参数
[in] con
指向 WeaveConnection 对象的指针。
[in] conErr
WeaveConnection 或 WEAVE_NO_ERROR 中的任何错误。

RecvdFromService

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

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

详细信息
参数
[in] con
指向 WeaveConnection 对象的指针。
[in] msgInfo
指向 WeaveMessageInfo 对象的指针。
[in] message
指向保存隧道式 IPv6 数据包的 PacketBuffer 对象的指针。

ServiceMgrStatusHandler

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

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