如何在 C++ 中注册和使用钩子?

how to register and use a hook in c++?

我需要构建一个交换UDP数据包的AODV网络。它的其中一台主机应该能够重放它接收到的数据包,所以我正在 omnet++ inet 框架中修改 udpBasicApp.cc。我试图引用 class udpBasicApp 中的特定主机,以指定主机 [3] 在接收数据包时的特定行为。 例如:

if(host->getIndex()== 3)
{ //replay the received packet }

显然,我不能在前面的简单问题中引用我网络的任何元素。 udpBasicApp.cc 中没有函数可以获取当前主机的索引。我被建议使用钩子机制来使用应用程序访问当前主机的索引:udpBasicApp如何使用钩子机制做到这一点?

第二个相关问题,如果我无法引用 udpBasicApp.cc 中的主机索引,我如何至少将当前主机的 IP 地址与我尝试引用的 IP 地址进行比较?

IPXAddress srcAddr;
if (srcAddr=="host[3]")

如错误所示不可比。

1.To 从 vector 获取 StandardHost 的索引 你应该参考 udpApp 的父模块:

if (getParentModule()->getIndex() == 3) {
// ...
}

2.The 当前主机的 IPv4 地址可以使用 L3AddressResolver class:

#include "inet/networklayer/common/L3AddressResolver.h"

// ...
L3Address layer3addr = L3AddressResolver().addressOf(getParentModule(),
             L3AddressResolver::ADDR_IPv4);
IPv4Address ownaddr = layer3addr.toIPv4();