nl::Inet::InetLayer

#include <src/inet/InetLayer.h>

这可提供单个线程访问互联网服务的权限,包括计时器、域名系统 (DNS) 解析、TCP 网络传输、UDP 网络传输和原始网络传输。

摘要

对于 BSD/POSIX 套接字,事件就绪性通知通过文件描述符和平台适配上的传统轮询 / 选择实现进行处理。

对于 LwIP,事件就绪性通知通过事件 / 消息以及事件 / 消息系统特定于平台和系统的钩子处理。

构造函数和析构函数

InetLayer(void)
这是 InetLayer 默认构造函数。

公共类型

@5{
  kState_NotInitialized = 0,
  kState_Initialized = 1,
  kState_ShutdownInProgress = 2
}
枚举
InetLayer 对象的当前状态。
DNSResolveCompleteFunct typedef
DNSResolver::OnResolveCompleteFunct

公共属性

State
enum nl::Inet::InetLayer::@5
InetLayer 对象的当前状态。

公共静态属性

sInetEventHandlerDelegate

公共函数

CanEnqueueDroppableEvent(void)
bool
CancelResolveHostAddress(DNSResolveCompleteFunct onComplete, void *appState)
void
取消所有可能仍处于活跃状态的未完成 DNS 查询(针对匹配的完成回调和应用状态)。
DroppableEventDequeued(void)
void
GetInterfaceFromAddr(const IPAddress & addr, InterfaceId & intfId)
获取指定 IP 地址的接口标识符。
GetLinkLocalAddr(InterfaceId link, IPAddress *llAddr)
获取指定链路或接口的链路本地 IPv6 地址。
GetPlatformData(void)
void *
这将返回分配给该实例的任何特定于客户端的平台数据(如果之前已设置)。
HandleSelectResult(int selectRes, fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
void
处理来自 select 调用的 I/O。
Init(Weave::System::Layer & aSystemLayer, void *aContext)
这是 InetLayer 显式初始化程序。
InitQueueLimiter(void)
MatchLocalIPv6Subnet(const IPAddress & addr)
bool
检查指定的 IPv6 地址与本地配置的任何 IPv6 地址之间是否存在前缀匹配。
NewRawEndPoint(IPVersion ipVer, IPProtocol ipProto, RawEndPoint **retEndPoint)
针对特定 IP 版本和协议创建新的 RawEndPoint 对象。
NewTCPEndPoint(TCPEndPoint **retEndPoint)
创建一个新的 TCPEndPoint 对象。
NewTunEndPoint(TunEndPoint **retEndPoint)
创建一个新的 TunEndPoint 对象。
NewUDPEndPoint(UDPEndPoint **retEndPoint)
创建一个新的 UDPEndPoint 对象。
PrepareSelect(int & nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval & sleepTime)
void
准备供 select() 使用的文件描述符集。
ResolveHostAddress(const char *hostName, uint16_t hostNameLen, uint8_t options, uint8_t maxAddrs, IPAddress *addrArray, DNSResolveCompleteFunct onComplete, void *appState)
对指定主机名执行 IP 解析。
ResolveHostAddress(const char *hostName, uint16_t hostNameLen, uint8_t maxAddrs, IPAddress *addrArray, DNSResolveCompleteFunct onComplete, void *appState)
对指定主机名执行 IP 解析。
ResolveHostAddress(const char *hostName, uint8_t maxAddrs, IPAddress *addrArray, DNSResolveCompleteFunct onComplete, void *appState)
对指定主机名执行 IP 解析。
SetPlatformData(void *aPlatformData)
void
这会将指定的客户端特定平台数据设置为该实例,以供客户端平台稍后检索。
Shutdown(void)
这是 InetLayer 显式去初始化器,应在处置实例化的 InetLayer 实例之前进行调用。
SystemLayer(void) const

公共静态函数

HandleInetLayerEvent(Weave::System::Object & aTarget, Weave::System::EventType aEventType, uintptr_t aArgument)
Weave::System::Error
IsDroppableEvent(Weave::System::EventType aType)
bool
UpdateSnapshot(nl::Weave::System::Stats::Snapshot & aSnapshot)
void

公共类型

5 分钟

 @5

InetLayer 对象的当前状态。

属性
kState_Initialized

初始化状态。

kState_NotInitialized

未初始化状态。

kState_ShutdownInProgress

触发了关闭操作的状态。

DNSResolveCompleteFunct

DNSResolver::OnResolveCompleteFunct DNSResolveCompleteFunct

公共属性

enum nl::Inet::InetLayer::@5 State

InetLayer 对象的当前状态。

[READ-ONLY] 当前状态。

公共静态属性

sInetEventHandlerDelegate

Weave::System::LwIPEventHandlerDelegate sInetEventHandlerDelegate

公共函数

CanEnqueueDroppableEvent

bool CanEnqueueDroppableEvent(
  void
)

CancelResolveHostAddress

void CancelResolveHostAddress(
  DNSResolveCompleteFunct onComplete,
  void *appState
)

取消所有可能仍处于活跃状态的未完成 DNS 查询(针对匹配的完成回调和应用状态)。

详细信息
参数
[in] onComplete
在 DNS 请求完成时指向回调函数的指针。
[in] appState
指向要作为参数传递给回调函数的应用状态对象的指针。

DroppableEventDequeued

void DroppableEventDequeued(
  void
)

GetInterfaceFromAddr

INET_ERROR GetInterfaceFromAddr(
  const IPAddress & addr,
  InterfaceId & intfId
)

获取指定 IP 地址的接口标识符。

如果无法派生接口标识符,则将其设置为 INET_NULL_INTERFACEID

详细信息
参数
[in] addr
IPAddress 对象的引用。
[out] intfId
对 InterfaceId 对象的引用。
返回值

GetLinkLocalAddr

INET_ERROR GetLinkLocalAddr(
  InterfaceId link,
  IPAddress *llAddr
)

获取指定链路或接口的链路本地 IPv6 地址。

详细信息
参数
[in] link
正在寻找链路本地 IPv6 地址的接口。
[out] llAddr
链接的链路本地 IPv6 地址。
返回值
INET_ERROR_NOT_IMPLEMENTED
不支持 IPv6。
INET_ERROR_BAD_ARGS
如果链路本地地址为 NULL。
INET_ERROR_ADDRESS_NOT_FOUND
如果链接未配置任何地址。
INET_NO_ERROR
成功时。

GetPlatformData

void * GetPlatformData(
  void
)

这将返回分配给该实例的任何特定于客户端的平台数据(如果之前已设置)。

详细信息
返回值
特定于客户端的平台数据(如果之前已设置);否则为 NULL。

HandleSelectResult

void HandleSelectResult(
  int selectRes,
  fd_set *readfds,
  fd_set *writefds,
  fd_set *exceptfds
)

处理来自 select 调用的 I/O。

此方法会在每个活动端点中注册待处理的 I/O 事件,然后对这些端点调用相应的 I/O 处理函数。

详细信息
参数
[in] selectRes
select 调用的返回值。
[in] readfds
指向读取文件描述符集的指针。
[in] writefds
指向写入文件描述符集的指针。
[in] exceptfds
指向存在错误的文件描述符集的指针。

InetLayer

 InetLayer(
  void
)

这是 InetLayer 默认构造函数。

它会执行一些基本的数据成员初始化;不过,由于InetLayer遵循显式初始化程序设计模式,因此您必须先成功调用InetLayer::Init方法,然后才能使用对象。

Init

INET_ERROR Init(
  Weave::System::Layer & aSystemLayer,
  void *aContext
)

这是 InetLayer 显式初始化程序。

必须先调用该函数并成功完成,然后才能使用 InetLayer

调用方可以提供可选的上下文参数,该参数将通过任何针对具体平台的钩子函数传回。对于基于 LwIP 的自适应,这通常是指向与 InetLayer 实例关联的事件队列的指针。

平台可以选择在其针对具体平台的配置标头中断言 INET_CONFIG_WILL_OVERRIDE_PLATFORM_XTOR_FUNCS,并启用 Platform::InetLayer::WillInit 和 Platform::InetLayer::DidInit 钩子来对特定于平台的自定义或 InetLayer 数据扩展。

详细信息
参数
[in] aSystemLayer
已成功初始化 Weave 系统图层的必需实例。
[in] aContext
可选的上下文参数,将通过任何平台专用钩子函数传回给调用方。
返回值
INET_ERROR_INCORRECT_STATE
InetLayer 状态不正确时抛出的异常。
INET_ERROR_NO_MEMORY
如果 InetLayer 耗尽了此请求的新计时器的资源。
other
特定于平台的错误,指明初始化失败的原因。
INET_NO_ERROR
成功时。

InitQueueLimiter

INET_ERROR InitQueueLimiter(
  void
)

MatchLocalIPv6Subnet

bool MatchLocalIPv6Subnet(
  const IPAddress & addr
)

检查指定的 IPv6 地址与本地配置的任何 IPv6 地址之间是否存在前缀匹配。

详细信息
参数
[in] addr
要检查前缀匹配的 IPv6 地址。
返回值
如果找到成功匹配,则为 true,否则为 false。

NewRawEndPoint

INET_ERROR NewRawEndPoint(
  IPVersion ipVer,
  IPProtocol ipProto,
  RawEndPoint **retEndPoint
)

针对特定 IP 版本和协议创建新的 RawEndPoint 对象。

详细信息
参数
[in] ipVer
IPv4 或 IPv6。
[in] ipProto
IP 系列中的协议(例如,ICMPv4 或 ICMPv6)。
[in,out] retEndPoint
指向 RawEndPoint 对象的指针的指针,该对象是对象创建完成后的返回参数。*如果创建失败,则 retEndPoint 为 NULL。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 对象未初始化。
INET_ERROR_NO_ENDPOINTS
如果 InetLayerRawEndPoint 池已满,则无法创建新端点。
INET_NO_ERROR
成功时。

NewTCPEndPoint

INET_ERROR NewTCPEndPoint(
  TCPEndPoint **retEndPoint
)

创建一个新的 TCPEndPoint 对象。

详细信息
参数
[in,out] retEndPoint
指向 TCPEndPoint 对象的指针的指针,该对象是对象创建完成后的返回参数。*如果创建失败,则 retEndPoint 为 NULL。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 对象未初始化。
INET_ERROR_NO_ENDPOINTS
如果 InetLayerTCPEndPoint 池已满,则无法创建新端点。
INET_NO_ERROR
成功时。

NewTunEndPoint

INET_ERROR NewTunEndPoint(
  TunEndPoint **retEndPoint
)

创建一个新的 TunEndPoint 对象。

详细信息
参数
[in,out] retEndPoint
指向 TunEndPoint 对象的指针的指针,该对象是对象创建完成后的返回参数。*如果创建失败,则 retEndPoint 为 NULL。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 对象未初始化。
INET_ERROR_NO_ENDPOINTS
如果 InetLayerTunEndPoint 池已满,则无法创建新的池。
INET_NO_ERROR
成功时。

NewUDPEndPoint

INET_ERROR NewUDPEndPoint(
  UDPEndPoint **retEndPoint
)

创建一个新的 UDPEndPoint 对象。

详细信息
参数
[in,out] retEndPoint
指向 UDPEndPoint 对象的指针的指针,该对象是对象创建完成后的返回参数。*如果创建失败,则 retEndPoint 为 NULL。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 对象未初始化。
INET_ERROR_NO_ENDPOINTS
如果 InetLayerUDPEndPoint 池已满,则无法创建新端点。
INET_NO_ERROR
成功时。

PrepareSelect

void PrepareSelect(
  int & nfds,
  fd_set *readfds,
  fd_set *writefds,
  fd_set *exceptfds,
  struct timeval & sleepTime
)

准备供 select() 使用的文件描述符集。

详细信息
参数
[out] nfds
文件描述符集中的文件描述符范围。
[in] readfds
指向一组可读文件描述符的指针。
[in] writefds
指向可写入文件描述符集的指针。
[in] exceptfds
指向存在错误的文件描述符集的指针。
[in] sleepTimeTV
指向指定选择应休眠多长时间的结构的指针

ResolveHostAddress

INET_ERROR ResolveHostAddress(
  const char *hostName,
  uint16_t hostNameLen,
  uint8_t options,
  uint8_t maxAddrs,
  IPAddress *addrArray,
  DNSResolveCompleteFunct onComplete,
  void *appState
)

对指定主机名执行 IP 解析。

详细信息
参数
[in] hostName
指向非 NULL 终止的 C 字符串的指针,该字符串表示要查询的主机名。
[in] hostNameLen
主机名的字符串长度。
[in] options
一个整数值,用于控制如何执行主机名解析。
                    Value should be one of the address family values from the
                    #DNSOptions enumeration:

                    #kDNSOption_AddrFamily_Any
                    #kDNSOption_AddrFamily_IPv4Only
                    #kDNSOption_AddrFamily_IPv6Only
                    #kDNSOption_AddrFamily_IPv4Preferred
                    #kDNSOption_AddrFamily_IPv6Preferred
[in] maxAddrs
DNS 表中存储的地址数量上限。
[in] addrArray
指向 DNS 表的指针。
[in] onComplete
在 DNS 请求完成时指向回调函数的指针。
[in] appState
指向要在 DNS 请求完成时传递给 onComplete 的应用状态的指针。
返回值
INET_NO_ERROR
是否成功处理 DNS 请求。
INET_ERROR_NO_MEMORY
如果 Inet 层解析器池已满。
INET_ERROR_HOST_NAME_TOO_LONG
如果请求的主机名过长,则会发生该错误。
INET_ERROR_HOST_NOT_FOUND
如果请求主机名无法解析为地址,则会发生此错误。
INET_ERROR_DNS_TRY_AGAIN
如果域名服务器返回了临时的失败指示;请稍后再试。
INET_ERROR_DNS_NO_RECOVERY
如果域名服务器返回不可恢复的错误。
INET_ERROR_NOT_IMPLEMENTED
(如果底层平台上未启用 DNS 解析)。
other
底层 DNS 解析器实现返回的 POSIX 网络或操作系统错误。

ResolveHostAddress

INET_ERROR ResolveHostAddress(
  const char *hostName,
  uint16_t hostNameLen,
  uint8_t maxAddrs,
  IPAddress *addrArray,
  DNSResolveCompleteFunct onComplete,
  void *appState
)

对指定主机名执行 IP 解析。

详细信息
参数
[in] hostName
指向非 NULL 终止的 C 字符串的指针,该字符串表示要查询的主机名。
[in] hostNameLen
主机名的字符串长度。
[in] maxAddrs
DNS 表中存储的地址数量上限。
[in] addrArray
指向 DNS 表的指针。
[in] onComplete
在 DNS 请求完成时指向回调函数的指针。
[in] appState
指向要在 DNS 请求完成时传递给 onComplete 的应用状态的指针。
返回值
INET_NO_ERROR
是否成功处理 DNS 请求。
INET_ERROR_NO_MEMORY
如果 Inet 层解析器池已满。
INET_ERROR_HOST_NAME_TOO_LONG
如果请求的主机名过长,则会发生该错误。
INET_ERROR_HOST_NOT_FOUND
如果请求主机名无法解析为地址,则会发生此错误。
INET_ERROR_DNS_TRY_AGAIN
如果域名服务器返回了临时的失败指示;请稍后再试。
INET_ERROR_DNS_NO_RECOVERY
如果域名服务器返回不可恢复的错误。
INET_ERROR_NOT_IMPLEMENTED
(如果底层平台上未启用 DNS 解析)。
other
底层 DNS 解析器实现返回的 POSIX 网络或操作系统错误。

ResolveHostAddress

INET_ERROR ResolveHostAddress(
  const char *hostName,
  uint8_t maxAddrs,
  IPAddress *addrArray,
  DNSResolveCompleteFunct onComplete,
  void *appState
)

对指定主机名执行 IP 解析。

详细信息
参数
[in] hostName
指向以 NULL 结尾、表示要查询的主机名的 C 字符串的指针。
[in] maxAddrs
DNS 表中存储的地址数量上限。
[in] addrArray
指向 DNS 表的指针。
[in] onComplete
在 DNS 请求完成时指向回调函数的指针。
[in] appState
指向要在 DNS 请求完成时传递给 onComplete 的应用状态的指针。
返回值
INET_NO_ERROR
是否成功处理 DNS 请求。
INET_ERROR_NO_MEMORY
如果 Inet 层解析器池已满。
INET_ERROR_HOST_NAME_TOO_LONG
如果请求的主机名过长,则会发生该错误。
INET_ERROR_HOST_NOT_FOUND
如果请求主机名无法解析为地址,则会发生此错误。
INET_ERROR_DNS_TRY_AGAIN
如果域名服务器返回了临时的失败指示;请稍后再试。
INET_ERROR_DNS_NO_RECOVERY
如果域名服务器返回不可恢复的错误。
INET_ERROR_NOT_IMPLEMENTED
(如果底层平台上未启用 DNS 解析)。
other
底层 DNS 解析器实现返回的 POSIX 网络或操作系统错误。

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

这会将指定的客户端特定平台数据设置为该实例,以供客户端平台稍后检索。

详细信息
参数
[in] aPlatformData
要设置的特定于客户端的平台数据。

关停

INET_ERROR Shutdown(
  void
)

这是 InetLayer 显式去初始化器,应在处置实例化的 InetLayer 实例之前进行调用。

平台可以选择在其针对具体平台的配置标头中断言 INET_CONFIG_WILL_OVERRIDE_PLATFORM_XTOR_FUNCS,并启用 Platform::InetLayer::WillShutdown 和 Platform::InetLayer::DidShutdown 钩子来清理特定于平台的自定义设置或 InetLayer 的数据扩展。

详细信息
返回值
INET_NO_ERROR(如果成功);或者指明关闭失败原因的具体错误。

SystemLayer

Weave::System::Layer * SystemLayer(
  void
) const 

公共静态函数

HandleInetLayerEvent

Weave::System::Error HandleInetLayerEvent(
  Weave::System::Object & aTarget,
  Weave::System::EventType aEventType,
  uintptr_t aArgument
)

IsDroppableEvent

bool IsDroppableEvent(
  Weave::System::EventType aType
)

UpdateSnapshot

void UpdateSnapshot(
  nl::Weave::System::Stats::Snapshot & aSnapshot
)