nl::Inet::IPEndPointBasis

#include <src/inet/IPEndPointBasis.h>

這個類別的物件代表不執行個體的 IP 通訊協定端點。

摘要

繼承

繼承自: nl::Inet::EndPointBasis
直接已知子類別:
  nl::Inet::RawEndPoint
  nl::Inet::UDPEndPoint

公開類型

@8{
  kState_Ready = kBasisState_Closed,
  kState_Bound = 1,
  kState_Listening = 2,
  kState_Closed = 3
}
列舉
基礎端點的基本動態狀態。
@9{
  kSendFlag_RetainBuffer = 0x0040
}
列舉
傳送 SendMsg 方法的選項旗標。
OnMessageReceivedFunct)(IPEndPointBasis *endPoint, Weave::System::PacketBuffer *msg, const IPPacketInfo *pktInfo) typedef
void(*
訊息文字接收事件處理函式的類型。
OnReceiveErrorFunct)(IPEndPointBasis *endPoint, INET_ERROR err, const IPPacketInfo *pktInfo) typedef
void(*
接收錯誤事件處理函式的類型。

公開屬性

OnMessageReceived
端點的訊息接收事件處理函式委派。
OnReceiveError
端點的接收錯誤事件處理函式委派。
mState
enum nl::Inet::IPEndPointBasis::@8
基礎端點的基本動態狀態。

受保護的屬性

mBoundIntfId
InterfaceId

公用函式

JoinMulticastGroup(InterfaceId aInterfaceId, const IPAddress & aAddress)
加入 IP 多點傳播群組。
LeaveMulticastGroup(InterfaceId aInterfaceId, const IPAddress & aAddress)
離開 IP 多點傳播群組。
SetMulticastLoopback(IPVersion aIPVersion, bool aLoopback)
設定是否應循環播放 IP 多點傳送流量。

受保護的函式

Bind(IPAddressType aAddressType, IPAddress aAddress, uint16_t aPort, InterfaceId aInterfaceId)
BindInterface(IPAddressType aAddressType, InterfaceId aInterfaceId)
GetSocket(IPAddressType aAddressType, int aType, int aProtocol)
HandleDataReceived(Weave::System::PacketBuffer *aBuffer)
void
HandlePendingIO(uint16_t aPort)
void
Init(InetLayer *aInetLayer)
void
PrepareIO(void)
SendMsg(const IPPacketInfo *aPktInfo, Weave::System::PacketBuffer *aBuffer, uint16_t aSendFlags)

公開的靜態函式

FindNetifFromInterfaceId(InterfaceId aInterfaceId)
struct netif *

受保護的靜態函式

GetPacketInfo(Weave::System::PacketBuffer *buf)
取得 LwIP IP 層來源與目的地位址資訊。

公開類型

@8

 @8

基礎端點的基本動態狀態。

物件會初始化為「就緒」狀態,繫結至本機介面位址後繼續進行「繫結」狀態,然後在物件已註冊處理接收 ICMP 訊息的事件時,繼續進行「監聽」狀態。

注意:基於歷來二進位檔相容性因素,kBasisState_Closed 狀態列舉對應至 kState_Ready。現有的 kState_Closed 可單獨識別 kState_ReadykState_Closed 狀態中「尚未開啟」和「先前已開啟現已關閉」的區別。

屬性
kState_Bound

端點已繫結,但沒有監聽。

kState_Closed

端點已關閉,可發布。

kState_Listening

接收資料元組的端點。

kState_Ready

端點已初始化,但尚未開啟。

@號

 @9

傳送 SendMsg 方法的選項旗標。

屬性
kSendFlag_RetainBuffer

請勿直接將訊息排入佇列。

將副本排入佇列。

OnMessageReceivedFunct

void(* OnMessageReceivedFunct)(IPEndPointBasis *endPoint, Weave::System::PacketBuffer *msg, const IPPacketInfo *pktInfo)

訊息文字接收事件處理函式的類型。

將這個類型的函式提供給 OnMessageReceived 委派成員,以處理 endPoint 上的訊息文字接收事件,其中 msg 是寄件者在 senderAddr 收到的訊息文字。

詳細說明
參數
[in] endPoint
與事件相關聯的端點。
[in] msg
收到的訊息文字。
[in] senderAddr
寄件者的 IP 位址。

OnReceiveErrorFunct

void(* OnReceiveErrorFunct)(IPEndPointBasis *endPoint, INET_ERROR err, const IPPacketInfo *pktInfo)

接收錯誤事件處理函式的類型。

將這個類型的函式提供給 OnReceiveError 委派成員,以處理 endPoint 的接收錯誤事件。err 引數提供錯誤類型的特定詳細資料。

詳細說明
參數
[in] endPoint
與事件相關聯的端點。
[in] err
錯誤原因。

公開屬性

OnMessageReceived

OnMessageReceivedFunct OnMessageReceived

端點的訊息接收事件處理函式委派。

OnReceiveError

OnReceiveErrorFunct OnReceiveError

端點的接收錯誤事件處理函式委派。

mState

enum nl::Inet::IPEndPointBasis::@8 mState

基礎端點的基本動態狀態。

物件會初始化為「就緒」狀態,繫結至本機介面位址後繼續進行「繫結」狀態,然後在物件已註冊處理接收 ICMP 訊息的事件時,繼續進行「監聽」狀態。

注意:基於歷來二進位檔相容性因素,kBasisState_Closed 狀態列舉對應至 kState_Ready。現有的 kState_Closed 可單獨識別 kState_ReadykState_Closed 狀態中「尚未開啟」和「先前已開啟現已關閉」的區別。

受保護的屬性

mBoundIntfId

InterfaceId mBoundIntfId

公用函式

JoinMulticastGroup

INET_ERROR JoinMulticastGroup(
  InterfaceId aInterfaceId,
  const IPAddress & aAddress
)

加入 IP 多點傳播群組。

在指定介面中,將端點加入提供的多點傳播群組。

詳細說明
參數
[in] aInterfaceId
要新增至多點傳播群組的網路介面指標
[in] aAddress
將介面新增至多點傳播群組
傳回值
INET_NO_ERROR
成功:已移除多點傳播群組
INET_ERROR_UNKNOWN_INTERFACE
不明的網路介面,aInterfaceId
INET_ERROR_WRONG_ADDRESS_TYPE
aAddress 不是 kIPAddressType_IPv4kIPAddressType_IPv6,或者非多點傳播
other
其他系統或平台錯誤

LeaveMulticastGroup

INET_ERROR LeaveMulticastGroup(
  InterfaceId aInterfaceId,
  const IPAddress & aAddress
)

離開 IP 多點傳播群組。

從指定介面中的多點傳播群組中移除端點。

詳細說明
參數
[in] aInterfaceId
要從多點傳播群組中移除的網路介面指標
[in] aAddress
移除的多點傳播群組
傳回值
INET_NO_ERROR
成功:已移除多點傳播群組
INET_ERROR_UNKNOWN_INTERFACE
不明的網路介面,aInterfaceId
INET_ERROR_WRONG_ADDRESS_TYPE
aAddress 不是 kIPAddressType_IPv4kIPAddressType_IPv6,或者非多點傳播
other
其他系統或平台錯誤

SetMulticastLoopback

INET_ERROR SetMulticastLoopback(
  IPVersion aIPVersion,
  bool aLoopback
)

設定是否應循環播放 IP 多點傳送流量。

設定是否應將 IP 多點傳送流量迴圈回這個端點。

詳細說明
參數
[in] aIPVersion
[in] aLoop
傳回值
INET_NO_ERROR
成功:多播回送行為組合
other
其他系統或平台錯誤

受保護的函式

繫結

INET_ERROR Bind(
  IPAddressType aAddressType,
  IPAddress aAddress,
  uint16_t aPort,
  InterfaceId aInterfaceId
)

BindInterface

INET_ERROR BindInterface(
  IPAddressType aAddressType,
  InterfaceId aInterfaceId
)

GetSocket

INET_ERROR GetSocket(
  IPAddressType aAddressType,
  int aType,
  int aProtocol
)

HandleDataReceived

void HandleDataReceived(
  Weave::System::PacketBuffer *aBuffer
)

HandlePendingIO

void HandlePendingIO(
  uint16_t aPort
)

Init

void Init(
  InetLayer *aInetLayer
)

PrepareIO

SocketEvents PrepareIO(
  void
)

SendMsg

INET_ERROR SendMsg(
  const IPPacketInfo *aPktInfo,
  Weave::System::PacketBuffer *aBuffer,
  uint16_t aSendFlags
)

公開的靜態函式

FindNetifFromInterfaceId

struct netif * FindNetifFromInterfaceId(
  InterfaceId aInterfaceId
)

受保護的靜態函式

GetPacketInfo

IPPacketInfo * GetPacketInfo(
  Weave::System::PacketBuffer *buf
)

取得 LwIP IP 層來源與目的地位址資訊。

使用封包的 LwIP 資訊時,系統會在保留空間中「隱藏」在封包緩衝區中的資料開始之前。之所以需要這麼做,是因為系統層事件只有兩個引數,在此情況下,這些引數會用來傳送指標至終點和緩衝區的指標。

詳細說明
參數
[in] aBuffer
包含 IP 訊息的封包緩衝區
傳回
會指向成功時位址資訊的指標;否則,如果封包中位址資訊的空間不足,則為 NULL。

在大多數情況下,由於 LwIP IP 訊息的第一個緩衝區含有乙太網路/IP/UDP 標頭所使用的空間,因此在資料開始作業前就將資訊儲存起來會相當麻煩。不過,由於 IPPacketInfo 結構目前的大小 (40 位元組) 不足,可能無法將結構與酬載儲存在單一封包緩衝區中。實際上,只有在沒有乙太網路標頭的情況下送達的極大 IPv4 封包時,才會發生這種情形。