diff options
author | Szczepan Zalega <szczepan@nitrokey.com> | 2016-11-03 13:45:53 +0100 |
---|---|---|
committer | Szczepan Zalega <szczepan@nitrokey.com> | 2016-11-26 18:56:28 +0100 |
commit | 130a33311567a1f0f6a9a2d8707bff20a558eb20 (patch) | |
tree | 382228626bd47f64c09abe45f7b58a3c8c396c6c | |
parent | 7d943d3e8717ba47af4b53787cc4c29ad6ee2f90 (diff) | |
download | libnitrokey-130a33311567a1f0f6a9a2d8707bff20a558eb20.tar.gz libnitrokey-130a33311567a1f0f6a9a2d8707bff20a558eb20.tar.bz2 |
Treat LongOperationException as CommandFailed and handle it transparently
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
-rw-r--r-- | include/LongOperationInProgressException.h | 10 | ||||
-rw-r--r-- | include/device_proto.h | 15 |
2 files changed, 13 insertions, 12 deletions
diff --git a/include/LongOperationInProgressException.h b/include/LongOperationInProgressException.h index 673a218..7f182b0 100644 --- a/include/LongOperationInProgressException.h +++ b/include/LongOperationInProgressException.h @@ -5,16 +5,16 @@ #ifndef LIBNITROKEY_LONGOPERATIONINPROGRESSEXCEPTION_H #define LIBNITROKEY_LONGOPERATIONINPROGRESSEXCEPTION_H +#include "CommandFailedException.h" -class LongOperationInProgressException : public std::exception { +class LongOperationInProgressException : public CommandFailedException { public: unsigned char progress_bar_value; - unsigned char command_id; - LongOperationInProgressException(unsigned char _command_id, unsigned char _progress_bar_value) { - command_id = _command_id; - progress_bar_value = _progress_bar_value; + LongOperationInProgressException( + unsigned char _command_id, uint8_t last_command_status, unsigned char _progress_bar_value) + : CommandFailedException(_command_id, last_command_status), progress_bar_value(_progress_bar_value){ nitrokey::log::Log::instance()( std::string("LongOperationInProgressException, progress bar status: ")+ std::to_string(progress_bar_value), nitrokey::log::Loglevel::DEBUG); diff --git a/include/device_proto.h b/include/device_proto.h index 187d25c..0953566 100644 --- a/include/device_proto.h +++ b/include/device_proto.h @@ -316,21 +316,22 @@ namespace nitrokey { clear_packet(outp); if (status <= 0) - throw std::runtime_error( + throw std::runtime_error( //FIXME replace with CriticalErrorException std::string("Device error while executing command ") + std::to_string(status)); - if (resp.device_status == static_cast<uint8_t>(stick10::device_status::busy) && - static_cast<stick20::device_status>(resp.storage_status.device_status) - == stick20::device_status::busy_progressbar){ - throw LongOperationInProgressException(resp.command_id, resp.storage_status.progress_bar_value); - } - Log::instance()("Incoming HID packet:", Loglevel::DEBUG); Log::instance()(static_cast<std::string>(resp), Loglevel::DEBUG); Log::instance()(std::string("receiving_retry_counter count: ") + std::to_string(receiving_retry_counter), Loglevel::DEBUG); + if (resp.device_status == static_cast<uint8_t>(stick10::device_status::busy) && + static_cast<stick20::device_status>(resp.storage_status.device_status) + == stick20::device_status::busy_progressbar){ + throw LongOperationInProgressException( + resp.command_id, resp.device_status, resp.storage_status.progress_bar_value); + } + if (!resp.isValid()) throw std::runtime_error("Invalid incoming packet"); if (receiving_retry_counter <= 0) throw std::runtime_error( |