Files
1261Nat/src/TinsNetworkInterfaceCard.h
2017-06-08 21:38:27 +02:00

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