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

底层端点的基本动态状态。

对象在“ready”进入到“绑定”状态,然后继续“监听”状态。

注意:由于历史二进制文件兼容性的原因,kBasisState_Closed 状态枚举会映射到 kState_Ready。现有 kState_Closed 的存在是为了单独标识“尚未打开”和“尚未打开”之间的区别“之前打开过” 现已关闭”之前处于 kState_ReadykState_Closed 状态。

属性
kState_Bound

已绑定端点,但未监听。

kState_Closed

端点已关闭,准备发布。

kState_Listening

接收数据报的端点。

kState_Ready

端点已初始化,但未打开。

9

 @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

底层端点的基本动态状态。

对象在“ready”进入到“绑定”状态,然后继续“监听”状态。

注意:由于历史二进制文件兼容性的原因,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 数据包时才出现这种情况。