-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
LongOperationInProgressException cannot be detected using the C API #170
Milestone
Comments
robinkrahl
changed the title
LongOperationExceptionInProgress cannot be detected using the C API
LongOperationInProgressException cannot be detected using the C API
Jan 14, 2020
If you let me know which option you prefer I can create a pull request with an implementation. I’d personally prefer option 3. |
Yes, option |
robinkrahl
added a commit
to robinkrahl/libnitrokey
that referenced
this issue
Apr 2, 2020
This patch changes LongOperationInProgressException to derive from DeviceCommunicationException. This makes it easier to use the C API as the exception now has a unique numerical identifier. Fixes Nitrokey#170.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The C API translates the C++ exceptions to integer values (see
NK_C_API.cc:get_with_status
). For instances ofCommandFailedException
, thelast_command_status
field is used for the conversion. This field is typically set to a value of thestick10::command_status
enum. ButLongOperationInProgressException
, which is a subclass ofCommandFailedException
, usesstick10::device_status::busy
(= 1) instead. This overlaps with thewrong_CRC
variant of thecommand_status
enum, making it impossible to distinguish the two errors as a user of the C API.Possible solutions:
stick10::command_status
enum and use it forLongOperationInProgressException
.LongOperationInProgressException
to theget_with_status
function and return a unique ID for it. (I don’t really like this option because it makes the error handling code more complicated.)LongOperationInProgressException
inherit fromDeviceCommunicationException
instead ofCommandFailedException
and define a new ID.The text was updated successfully, but these errors were encountered: