#ifndef TINSNETWORKINTERFACECARD_H #define TINSNETWORKINTERFACECARD_H #include #include "TinsNetworkInterfaceCard_t.h" #include "INetworkInterfaceCard_t.h" #include "INetworkInterfaceCard.h" #include "Ip4Packet_t.h" #include "Ip6Packet_t.h" class TinsNetworkInterfaceCard : public INetworkInterfaceCard { public: TinsNetworkInterfaceCard(); TinsNetworkInterfaceCard(const Tins::NetworkInterface & networkInterface); TinsNetworkInterfaceCard(const std::string& name); TinsNetworkInterfaceCard(const char* name); TinsNetworkInterfaceCard(const Tins::IPv4Address & ip); TinsNetworkInterfaceCard(const Tins::IPv6Address & ipv6); virtual ~TinsNetworkInterfaceCard(); virtual bool handle(IN const Tins::PDU & pdu, IN IPacketHandler * = nullptr) override; virtual void sendPacket(IN const Tins::PDU & pdu) override; virtual void startListen() override; virtual void stopListen() override; Tins::SnifferConfiguration & getSnifferConfig() const; SPtrIPacketHandlerList & getHandlerList(); bool isSniffRunning() const; private: bool tinsSnifferCallback(IN Tins::PDU & some_pdu); Tins::PDU * getPhyLessPduPtr(IN Tins::PDU & pdu) const; void addPduToHashList(IN Tins::PDU &pdu); bool searchAndRemoveHashListItem(IN const std::size_t removedHash); UPtrSnifferConfiguration snifferConfig; UPtrPacketSender packetSender; static ByteVectorHash byteVectorHash; UPtrHashList sendPduHashList; UPtrMutex hashListMutex; std::atomic isSnifferRunning; SPtrIPacketHandlerList handlerList; std::string sniffNetworkInterfaceName; static std::size_t calcHashValue(Tins::PDU & phyLayerLessPdu); }; #endif