mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
Lazily load PCAP DLL on Windows, keeping it cached afterwards
This commit is contained in:
@@ -4,12 +4,17 @@
|
||||
#include <Windows.h>
|
||||
#include <winsock2.h>
|
||||
#include <pcap.h>
|
||||
#include <memory>
|
||||
|
||||
namespace icsneo {
|
||||
|
||||
// Helper loader for the PCAP DLL
|
||||
class PCAPDLL {
|
||||
public:
|
||||
// The first time we use the DLL we keep it in here and it won't get freed until the user unloads us (for speed reasons)
|
||||
static std::shared_ptr<PCAPDLL> lazyLoadHolder;
|
||||
static bool lazyLoaded;
|
||||
|
||||
// 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);
|
||||
|
||||
@@ -2,7 +2,15 @@
|
||||
|
||||
using namespace icsneo;
|
||||
|
||||
std::shared_ptr<PCAPDLL> PCAPDLL::lazyLoadHolder;
|
||||
bool PCAPDLL::lazyLoaded = false;
|
||||
|
||||
PCAPDLL::PCAPDLL() {
|
||||
if(!lazyLoaded) {
|
||||
lazyLoaded = true;
|
||||
lazyLoadHolder = std::make_shared<PCAPDLL>();
|
||||
}
|
||||
|
||||
dll = LoadLibrary("wpcap.dll");
|
||||
|
||||
if(dll == NULL) {
|
||||
|
||||
Reference in New Issue
Block a user