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 物件的參照。
傳回
INET_NO_ERROR (沒有條件)。

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
)

透過特定呼叫處理 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 之前成功呼叫並完成。

呼叫端可提供選用的結構定義引數,這會透過任何平台專屬的 hook 函式傳回。對於以 LwIP 為基礎的調整,這通常會是一個指標,指向與 InetLayer 執行個體相關聯的事件佇列。

平台可以選擇在平台專屬設定標頭中聲明 INET_CONFIG_WILL_OVERRIDE_PLATFORM_XTOR_FUNCS,並啟用 Platform::InetLayer::WillInit and Platform::InetLayer::DidInit 掛鉤,將平台專屬的自訂項目或資料擴充功能套用至 InetLayer

詳細資料
參數
[in] aSystemLayer
必要的 Weave 系統層執行個體已順利初始化。
[in] aContext
選用的內容引數,會透過任何平台專屬的 hook 函式傳回呼叫端。
傳回值
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 結尾的非 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 Layer 解析器集區已滿
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 結尾的非 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 Layer 解析器集區已滿
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 Layer 解析器集區已滿
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 和 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
)