mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
Event refactor builds on Windows
This commit is contained in:
+11
-11
@@ -20,7 +20,7 @@ std::vector<PCAP::PCAPFoundDevice> PCAP::FindAll() {
|
||||
std::vector<PCAPFoundDevice> foundDevices;
|
||||
PCAPDLL pcap;
|
||||
if(!pcap.ok()) {
|
||||
ErrorManager::GetInstance().add(APIError::PCAPCouldNotStart);
|
||||
EventManager::GetInstance().add(APIEvent::Type::PCAPCouldNotStart, APIEvent::Severity::Error);
|
||||
return std::vector<PCAPFoundDevice>();
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ std::vector<PCAP::PCAPFoundDevice> PCAP::FindAll() {
|
||||
}
|
||||
|
||||
if(!success) {
|
||||
ErrorManager::GetInstance().add(APIError::PCAPCouldNotFindDevices);
|
||||
EventManager::GetInstance().add(APIEvent::Type::PCAPCouldNotFindDevices, APIEvent::Severity::Error);
|
||||
return std::vector<PCAPFoundDevice>();
|
||||
}
|
||||
|
||||
@@ -55,13 +55,13 @@ std::vector<PCAP::PCAPFoundDevice> PCAP::FindAll() {
|
||||
// Now we're going to ask Win32 for the information as well
|
||||
ULONG size = 0;
|
||||
if(GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, nullptr, &size) != ERROR_BUFFER_OVERFLOW) {
|
||||
ErrorManager::GetInstance().add(APIError::PCAPCouldNotFindDevices);
|
||||
EventManager::GetInstance().add(APIEvent::Type::PCAPCouldNotFindDevices, APIEvent::Severity::Error);
|
||||
return std::vector<PCAPFoundDevice>();
|
||||
}
|
||||
std::vector<uint8_t> adapterAddressBuffer;
|
||||
adapterAddressBuffer.resize(size);
|
||||
if(GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, (IP_ADAPTER_ADDRESSES*)adapterAddressBuffer.data(), &size) != ERROR_SUCCESS) {
|
||||
ErrorManager::GetInstance().add(APIError::PCAPCouldNotFindDevices);
|
||||
EventManager::GetInstance().add(APIEvent::Type::PCAPCouldNotFindDevices, APIEvent::Severity::Error);
|
||||
return std::vector<PCAPFoundDevice>();
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ bool PCAP::IsHandleValid(neodevice_handle_t handle) {
|
||||
return (netifIndex < knownInterfaces.size());
|
||||
}
|
||||
|
||||
PCAP::PCAP(const device_errorhandler_t& err, neodevice_t& forDevice) : ICommunication(err), device(forDevice) {
|
||||
PCAP::PCAP(const device_eventhandler_t& err, neodevice_t& forDevice) : ICommunication(err), device(forDevice) {
|
||||
if(IsHandleValid(device.handle)) {
|
||||
interface = knownInterfaces[(device.handle >> 24) & 0xFF];
|
||||
interface.fp = nullptr; // We're going to open our own connection to the interface. This should already be nullptr but just in case.
|
||||
@@ -195,24 +195,24 @@ PCAP::PCAP(const device_errorhandler_t& err, neodevice_t& forDevice) : ICommunic
|
||||
|
||||
bool PCAP::open() {
|
||||
if(!openable) {
|
||||
err(APIError::InvalidNeoDevice);
|
||||
report(APIEvent::Type::InvalidNeoDevice, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!pcap.ok()) {
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(isOpen()) {
|
||||
err(APIError::DeviceCurrentlyOpen);
|
||||
report(APIEvent::Type::DeviceCurrentlyOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Open the interface
|
||||
interface.fp = pcap.open(interface.nameFromWinPCAP.c_str(), 100, PCAP_OPENFLAG_PROMISCUOUS | PCAP_OPENFLAG_MAX_RESPONSIVENESS, 1, nullptr, errbuf);
|
||||
if(interface.fp == nullptr) {
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ bool PCAP::isOpen() {
|
||||
|
||||
bool PCAP::close() {
|
||||
if(!isOpen()) {
|
||||
err(APIError::DeviceCurrentlyClosed);
|
||||
report(APIEvent::Type::DeviceCurrentlyClosed, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@ void PCAP::readTask() {
|
||||
while(!closing) {
|
||||
auto readBytes = pcap.next_ex(interface.fp, &header, &data);
|
||||
if(readBytes < 0) {
|
||||
err(APIError::FailedToRead);
|
||||
report(APIEvent::Type::FailedToRead, APIEvent::Severity::Error);
|
||||
break;
|
||||
}
|
||||
if(readBytes == 0)
|
||||
|
||||
+18
-18
@@ -184,12 +184,12 @@ bool VCP::IsHandleValid(neodevice_handle_t handle) {
|
||||
|
||||
bool VCP::open(bool fromAsync) {
|
||||
if(isOpen() || (!fromAsync && opening)) {
|
||||
err(APIError::DeviceCurrentlyOpen);
|
||||
report(APIEvent::Type::DeviceCurrentlyOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!IsHandleValid(device.handle)) {
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -210,7 +210,7 @@ bool VCP::open(bool fromAsync) {
|
||||
opening = false;
|
||||
|
||||
if(!isOpen()) {
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ bool VCP::open(bool fromAsync) {
|
||||
COMMTIMEOUTS timeouts;
|
||||
if(!GetCommTimeouts(handle, &timeouts)) {
|
||||
close();
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ bool VCP::open(bool fromAsync) {
|
||||
|
||||
if(!SetCommTimeouts(handle, &timeouts)) {
|
||||
close();
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ bool VCP::open(bool fromAsync) {
|
||||
DCB comstate;
|
||||
if(!GetCommState(handle, &comstate)) {
|
||||
close();
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -252,7 +252,7 @@ bool VCP::open(bool fromAsync) {
|
||||
|
||||
if(!SetCommState(handle, &comstate)) {
|
||||
close();
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -264,14 +264,14 @@ bool VCP::open(bool fromAsync) {
|
||||
overlappedWait.hEvent = CreateEvent(nullptr, true, false, nullptr);
|
||||
if (overlappedRead.hEvent == nullptr || overlappedWrite.hEvent == nullptr || overlappedWait.hEvent == nullptr) {
|
||||
close();
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set up event so that we will satisfy overlappedWait when a character comes in
|
||||
if(!SetCommMask(handle, EV_RXCHAR)) {
|
||||
close();
|
||||
err(APIError::DriverFailedToOpen);
|
||||
report(APIEvent::Type::DriverFailedToOpen, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -292,7 +292,7 @@ void VCP::openAsync(fn_boolCallback callback) {
|
||||
|
||||
bool VCP::close() {
|
||||
if(!isOpen()) {
|
||||
err(APIError::DeviceCurrentlyClosed);
|
||||
report(APIEvent::Type::DeviceCurrentlyClosed, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ bool VCP::close() {
|
||||
closing = false;
|
||||
|
||||
if(!CloseHandle(handle)) {
|
||||
err(APIError::DriverFailedToClose);
|
||||
report(APIEvent::Type::DriverFailedToClose, APIEvent::Severity::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -333,7 +333,7 @@ bool VCP::close() {
|
||||
while(writeQueue.try_dequeue(flushop)) {}
|
||||
|
||||
if(!ret)
|
||||
err(APIError::DriverFailedToClose);
|
||||
report(APIEvent::Type::DriverFailedToClose, APIEvent::Severity::Error);
|
||||
|
||||
// TODO Set up some sort of shared memory, free which COM port we had open so we can try to open it again
|
||||
|
||||
@@ -365,7 +365,7 @@ void VCP::readTask() {
|
||||
if(lastError == ERROR_IO_PENDING)
|
||||
state = WAIT;
|
||||
else if(lastError != ERROR_SUCCESS)
|
||||
err(APIError::FailedToRead);
|
||||
report(APIEvent::Type::FailedToRead, APIEvent::Severity::Error);
|
||||
}
|
||||
break;
|
||||
case WAIT: {
|
||||
@@ -375,11 +375,11 @@ void VCP::readTask() {
|
||||
readQueue.enqueue_bulk(readbuf, bytesRead);
|
||||
state = LAUNCH;
|
||||
} else
|
||||
err(APIError::FailedToRead);
|
||||
report(APIEvent::Type::FailedToRead, APIEvent::Severity::Error);
|
||||
}
|
||||
if(ret == WAIT_ABANDONED) {
|
||||
state = LAUNCH;
|
||||
err(APIError::FailedToRead);
|
||||
report(APIEvent::Type::FailedToRead, APIEvent::Severity::Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -407,19 +407,19 @@ void VCP::writeTask() {
|
||||
state = WAIT;
|
||||
}
|
||||
else
|
||||
err(APIError::FailedToWrite);
|
||||
report(APIEvent::Type::FailedToWrite, APIEvent::Severity::Error);
|
||||
}
|
||||
break;
|
||||
case WAIT: {
|
||||
auto ret = WaitForSingleObject(overlappedWrite.hEvent, 50);
|
||||
if(ret == WAIT_OBJECT_0) {
|
||||
if(!GetOverlappedResult(handle, &overlappedWrite, &bytesWritten, FALSE))
|
||||
err(APIError::FailedToWrite);
|
||||
report(APIEvent::Type::FailedToWrite, APIEvent::Severity::Error);
|
||||
state = LAUNCH;
|
||||
}
|
||||
|
||||
if(ret == WAIT_ABANDONED) {
|
||||
err(APIError::FailedToWrite);
|
||||
report(APIEvent::Type::FailedToWrite, APIEvent::Severity::Error);
|
||||
state = LAUNCH;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user