nl:: Inet:: IPEndPointBasis
#include <src/inet/IPEndPointBasis.h>
此类的对象表示不可实例化的 IP 协议端点。
摘要
继承
继承自: nl::Inet::EndPointBasis直接已知子类:
nl::Inet::RawEndPoint
nl::Inet::UDPEndPoint
公共类型 |
|
---|---|
@8{
|
枚举 底层端点的基本动态状态。 |
@9{
|
枚举SendMsg 方法的传输选项标志。 |
OnMessageReceivedFunct)(IPEndPointBasis *endPoint, Weave::System::PacketBuffer *msg, const IPPacketInfo *pktInfo)
|
typedefvoid(*
消息文字接收事件处理函数的类型。 |
OnReceiveErrorFunct)(IPEndPointBasis *endPoint, INET_ERROR err, const IPPacketInfo *pktInfo)
|
typedefvoid(*
接收错误事件处理函数的类型。 |
公共属性 |
|
---|---|
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_Ready
和 kState_Closed
状态的“尚未打开”和“之前打开现已关闭”之间的区别。
属性 | |
---|---|
kState_Bound
|
端点绑定,但不监听。 |
kState_Closed
|
端点已关闭,可以发布。 |
kState_Listening
|
端点接收数据报。 |
kState_Ready
|
端点已初始化,但未打开。 |
OnMessageReceivedFunct
void(* OnMessageReceivedFunct)(IPEndPointBasis *endPoint, Weave::System::PacketBuffer *msg, const IPPacketInfo *pktInfo)
消息文字接收事件处理函数的类型。
为 OnMessageReceived
委托成员提供此类型的函数,以处理 endPoint
上的消息文本接收事件,其中 msg
是来自 senderAddr
的发送者的消息文本。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
OnReceiveErrorFunct
void(* OnReceiveErrorFunct)(IPEndPointBasis *endPoint, INET_ERROR err, const IPPacketInfo *pktInfo)
接收错误事件处理函数的类型。
向 OnReceiveError
委托成员提供此类型的函数,以处理 endPoint
上的接收错误事件。err
参数提供有关错误类型的具体详细信息。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
公共属性
mState
enum nl::Inet::IPEndPointBasis::@8 mState
底层端点的基本动态状态。
对象在初始化时处于“就绪”状态,在绑定到本地接口地址后进入“绑定”状态,然后在对象注册处理事件以接收 ICMP 消息后,继续进入“监听”状态。
注意:出于历史二进制文件兼容性原因,kBasisState_Closed
状态枚举会映射到 kState_Ready
。现有 kState_Closed
旨在单独标识之前处于 kState_Ready
和 kState_Closed
状态的“尚未打开”和“之前打开现已关闭”之间的区别。
受保护的属性
mBoundIntfId
InterfaceId mBoundIntfId
公共函数
JoinMulticastGroup
INET_ERROR JoinMulticastGroup( InterfaceId aInterfaceId, const IPAddress & aAddress )
加入 IP 多播组。
将端点加入指定接口上提供的多播组。
具体说明 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
|
LeaveMulticastGroup
INET_ERROR LeaveMulticastGroup( InterfaceId aInterfaceId, const IPAddress & aAddress )
退出 IP 多播组。
从指定接口上提供的多播组中移除端点。
具体说明 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
|
SetMulticastLoopback
INET_ERROR SetMulticastLoopback( IPVersion aIPVersion, bool aLoopback )
设置是否应环播 IP 多播流量。
设置是否应将 IP 多播流量环回此端点。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
受保护的函数
Bind
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 时,有关数据包的信息在数据包缓冲区中的数据开头之前“隐藏”在预留空间中。这是必要的,因为系统层事件只有两个参数,在这种情况下,这两个参数用于传递指向终点的指针和指向缓冲区的指针。
具体说明 | |||
---|---|---|---|
参数 |
|
||
返回值 |
成功时是一个指向地址信息的指针;否则,如果包中没有足够的空间来存储地址信息,则为 NULL。
|
在大多数情况下,这种在数据之前存储信息的技巧很有效,因为 LwIP IP 消息中的第一个缓冲区包含用于以太网/IP/UDP 标头的空间。不过,考虑到 IPPacketInfo 结构的当前大小(40 字节),可能没有足够的空间来将该结构和载荷一起存储在单个数据包缓冲区中。实际上,只有当超大的 IPv4 数据包送达时没有以太网标头,这时才会出现这种情况。