aboutsummaryrefslogtreecommitdiff
path: root/NK_C_API.cc
diff options
context:
space:
mode:
authorRobin Krahl <me@robin-krahl.de>2018-05-25 00:15:40 +0200
committerRobin Krahl <me@robin-krahl.de>2018-05-25 00:15:40 +0200
commit6e44c2b11bd1be9e080f1179283c49f9bb8955a5 (patch)
tree2394d3c79376a34e2b6b65120b3c8c1ec3a6a92a /NK_C_API.cc
parent391a276ba35216337b777c65fda62561a6e9383f (diff)
downloadlibnitrokey-6e44c2b11bd1be9e080f1179283c49f9bb8955a5.tar.gz
libnitrokey-6e44c2b11bd1be9e080f1179283c49f9bb8955a5.tar.bz2
Expose device model in C API
The C++ API already provides access to the model of the connected device in NitrokeyManager::get_connected_device_model(). This patch also exposes this information in the C API by adding NK_get_device_model. As there might be no device connected, the function returns a boolean indicating the connection status and writes the model of the connected device to a pointer passed as an argument.
Diffstat (limited to 'NK_C_API.cc')
-rw-r--r--NK_C_API.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/NK_C_API.cc b/NK_C_API.cc
index 8e005b8..56340ac 100644
--- a/NK_C_API.cc
+++ b/NK_C_API.cc
@@ -238,6 +238,30 @@ extern "C" {
}
+ NK_C_API bool NK_get_device_model(enum NK_device_model *out) {
+ if (out == nullptr) {
+ return false;
+ }
+ auto m = NitrokeyManager::instance();
+ try {
+ auto model = m->get_connected_device_model();
+ switch (model) {
+ case DeviceModel::PRO:
+ *out = NK_PRO;
+ return true;
+ case DeviceModel::STORAGE:
+ *out = NK_STORAGE;
+ return true;
+ default:
+ /* unknown device -- should not happen */
+ return false;
+ }
+ } catch (const DeviceNotConnected& e) {
+ return false;
+ }
+ }
+
+
void clear_string(std::string &s) {
std::fill(s.begin(), s.end(), ' ');
}