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 位址的介面 ID。
GetLinkLocalAddr(InterfaceId link, IPAddress *llAddr)
取得指定連結或介面的本機 IPv6 位址連結。
GetPlatformData(void)
void *
這會傳回指派給執行個體的任何用戶端專屬平台資料 (如果之前已設定)。
HandleSelectResult(int selectRes, fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
void
處理特定呼叫的 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 物件的目前狀態。

[唯讀] 目前狀態。

公開靜態屬性

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 位址的介面 ID。

如果介面 ID 無法衍生,就會設為 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
如果連結本機位址為空值。
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
)

處理特定呼叫的 I/O。

這個方法會在每個有效端點中註冊待處理的 I/O 事件,然後叫用這些端點各自的 I/O 處理函式。

詳細說明
參數
[in] selectRes
所選呼叫的傳回值。
[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 and 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 物件的指標指標,該物件是物件建立完成後的傳回參數。*如果建立失敗,則會傳回 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 物件的指標指標,在物件建立完成後是傳回參數。*如果建立失敗,則會傳回 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 物件的指標指標,該物件是物件建立完成後的傳回參數。*如果建立失敗,則會傳回 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 物件的指標指標,是物件建立完成後傳回的傳回參數。*如果建立失敗,則會傳回 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 網路或 OS 錯誤。

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 網路或 OS 錯誤。

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 網路或 OS 錯誤。

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

這會將指定的用戶端平台資料設為執行個體,稍後由用戶端平台擷取。

詳細說明
參數
[in] aPlatformData
要設定的用戶端特定平台資料。

關機

INET_ERROR Shutdown(
  void
)

這是 InetLayer 明確初始化器,應在處理執行個體化的 InetLayer 執行個體之前呼叫。

平台可以選擇在平台專屬設定標頭中宣告 INET_CONFIG_WILL_OVERRIDE_PLATFORM_XTOR_FUNCS,並啟用「Platform::InetLayer::WillShutdown and 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
)