libicsneo/platform/windows/internal/include/pcapdll.h

53 lines
1.9 KiB
C++

#ifndef __PCAPDLL_WINDOWS_H_
#define __PCAPDLL_WINDOWS_H_
#include <Windows.h>
#include <winsock2.h>
#include <pcap.h>
namespace icsneo {
// Helper loader for the PCAP DLL
class PCAPDLL {
public:
// Functions
typedef int(__cdecl* PCAPFINDDEVICE)(char* source, struct pcap_rmtauth* auth, pcap_if_t** alldevs, char* errbuf);
typedef pcap_t*(__cdecl* PCAPOPEN)(const char* source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth* auth, char* errbuf);
typedef void(__cdecl* PCAPFREEDEVS)(pcap_if_t* alldevsp);
typedef void(__cdecl* PCAPCLOSE)(pcap_t* p);
typedef int(__cdecl* PCAPSTATS)(pcap_t* p, struct pcap_stat* ps);
typedef int(__cdecl* PCAPNEXTEX)(pcap_t* p, struct pcap_pkthdr** pkt_header, const u_char** pkt_data);
typedef int(__cdecl* PCAPSENDPACKET)(pcap_t* p, const u_char* buf, int size);
// typedef pcap_send_queue*(__cdecl* PCAPSENDQUEUEALLOC)(u_int memsize);
// typedef int(__cdecl* PCAPSENDQUEUEQUEUE)(pcap_send_queue* queue, const struct pcap_pkthdr* pkt_header, const u_char* pkt_data);
// typedef void(__cdecl* PCAPSENDQUEUEDESTROY)(pcap_send_queue* queue);
// typedef u_int(__cdecl* PCAPSENDQUEUETRANSMIT)(pcap_t* p, pcap_send_queue* queue, int sync);
typedef int(__cdecl* PCAPDATALINK)(pcap_t* p);
typedef int(__cdecl* PCAPCREATESRCSTR)(char* source, int type, const char* host, const char* port, const char* name, char* errbuf);
typedef int(__cdecl* PCAPSETBUFF)(pcap_t* p, int dim);
PCAPFINDDEVICE findalldevs_ex;
PCAPOPEN open;
PCAPFREEDEVS freealldevs;
PCAPCLOSE close;
PCAPSTATS stats;
PCAPNEXTEX next_ex;
PCAPSENDPACKET sendpacket;
// PCAPSENDQUEUEALLOC sendqueue_alloc;
// PCAPSENDQUEUEQUEUE sendqueue_queue;
// PCAPSENDQUEUEDESTROY sendqueue_destroy;
// PCAPSENDQUEUETRANSMIT sendqueue_transmit;
PCAPDATALINK datalink;
PCAPCREATESRCSTR createsrcstr;
PCAPSETBUFF setbuff;
PCAPDLL();
~PCAPDLL() { closeDLL(); }
bool ok() const { return dll != nullptr; }
private:
HINSTANCE dll;
void closeDLL();
};
};
#endif