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
)

取消解析主機位址

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
如果連結本機位址為 NULL。
INET_ERROR_ADDRESS_NOT_FOUND
如果連結尚未設定任何地址。
INET_NO_ERROR
成功。

取得平台資料

void * GetPlatformData(
  void
)

這會傳回任何指派給執行個體的用戶端專屬平台資料 (如果先前已設定)。

詳細資料
傳回
用戶端專屬平台資料 (如果先前已設定),否則為 NULL。

帳號選取結果

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 的預設建構函式。

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::doesInit 掛鉤來將平台專屬自訂項目或資料擴充功能套用至 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
)

配對本機 IPv6 子網路

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
成功。

新 TCPEndPoint

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
成功。

新 UDPEndPoint

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
成功。

準備選取

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
一個結構 (指向一個結構,指出選取睡眠的時間長度)

解析主機位址

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
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 錯誤。

解析主機位址

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
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 錯誤。

解析主機位址

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
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 錯誤。

設定平台資料

void SetPlatformData(
  void *aPlatformData
)

這會將指定的用戶端專屬平台資料設為執行個體,以供日後平台擷取。

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

停用

INET_ERROR Shutdown(
  void
)

這是 InetLayer 的明確初始化初始化工具,應該在配置執行個體化的 InetLayer 執行個體之前呼叫。

詳細資料
傳回
INET_NO_ERROR (成功即可);否則,特定錯誤會指出關機失敗的原因。

系統圖層

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

公開的靜態函式

元素的處理點事件

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

可拖曳事件

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

更新快照

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