50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
#ifndef TINSNETWORKINTERFACECARD_H
|
|
#define TINSNETWORKINTERFACECARD_H
|
|
|
|
#include <atomic>
|
|
#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<bool> isSnifferRunning;
|
|
SPtrIPacketHandlerList handlerList;
|
|
std::string sniffNetworkInterfaceName;
|
|
static std::size_t calcHashValue(Tins::PDU & phyLayerLessPdu);
|
|
};
|
|
#endif
|