From 9bc6b85e12d73a43b8d85ba109acff8778f4c08a Mon Sep 17 00:00:00 2001 From: Szczepan Zalega Date: Tue, 31 Jan 2017 18:17:58 +0100 Subject: Throw before communicating with device if it is not initialized Signed-off-by: Szczepan Zalega --- device.cc | 13 +++++++++---- include/LibraryException.h | 2 -- include/device_proto.h | 7 ++++++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/device.cc b/device.cc index 42c6883..ce1eeb6 100644 --- a/device.cc +++ b/device.cc @@ -7,6 +7,7 @@ #include "include/device.h" #include "include/log.h" #include +#include "DeviceCommunicationExceptions.h" std::mutex mex_dev_com; @@ -60,8 +61,10 @@ int Device::send(const void *packet) { std::lock_guard lock(mex_dev_com); Log::instance()(std::string(__FUNCTION__) + std::string(" *IN* "), Loglevel::DEBUG_L2); - if (mp_devhandle == nullptr) - throw std::runtime_error("Attempted HID send on an invalid descriptor."); //TODO migrate except to library_error + if (mp_devhandle == nullptr) { + Log::instance()(std::string("Connection fail") , Loglevel::DEBUG_L2); + throw DeviceNotConnected("Attempted HID send on an invalid descriptor."); + } return (hid_send_feature_report( mp_devhandle, (const unsigned char *)(packet), HID_REPORT_SIZE)); @@ -75,8 +78,10 @@ int Device::recv(void *packet) { int retry_count = 0; - if (mp_devhandle == nullptr) - throw std::runtime_error("Attempted HID receive on an invalid descriptor."); //TODO migrate except to library_error + if (mp_devhandle == nullptr){ + Log::instance()(std::string("Connection fail") , Loglevel::DEBUG_L2); + throw DeviceNotConnected("Attempted HID receive on an invalid descriptor."); + } // FIXME extract error handling and repeating to parent function in // device_proto:192 diff --git a/include/LibraryException.h b/include/LibraryException.h index 3c3fab4..e62788d 100644 --- a/include/LibraryException.h +++ b/include/LibraryException.h @@ -11,8 +11,6 @@ public: virtual uint8_t exception_id()= 0; }; - - class TargetBufferSmallerThanSource: public LibraryException { public: virtual uint8_t exception_id() override { diff --git a/include/device_proto.h b/include/device_proto.h index ba314f4..9401428 100644 --- a/include/device_proto.h +++ b/include/device_proto.h @@ -33,6 +33,7 @@ #define PWS_SEND_CR 3 #include +#include "DeviceCommunicationExceptions.h" namespace nitrokey { namespace proto { @@ -217,6 +218,10 @@ namespace nitrokey { Log::instance()(__PRETTY_FUNCTION__, Loglevel::DEBUG_L2); + if (dev == nullptr){ + throw DeviceNotConnected("Device not initialized"); + } + int status; OutgoingPacket outp; ResponsePacket resp; @@ -320,7 +325,7 @@ namespace nitrokey { clear_packet(outp); if (status <= 0) - throw std::runtime_error( //FIXME replace with CriticalErrorException + throw DeviceReceivingFailure( //FIXME replace with CriticalErrorException std::string("Device error while executing command ") + std::to_string(status)); -- cgit v1.2.1