aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSzczepan Zalega <szczepan@nitrokey.com>2017-12-04 16:29:56 +0100
committerSzczepan Zalega <szczepan@nitrokey.com>2018-02-28 19:23:04 +0100
commit2faa8f6782a2e6294ed8849048a281d12d60da1c (patch)
tree0e8947f40697da905278c44338f948ce5fa2b3c7 /include
parentd5486ba77235a874245fbee07a75cea89fa59ea2 (diff)
downloadlibnitrokey-2faa8f6782a2e6294ed8849048a281d12d60da1c.tar.gz
libnitrokey-2faa8f6782a2e6294ed8849048a281d12d60da1c.tar.bz2
Initial support for multiple devices with C++ and test
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
Diffstat (limited to 'include')
-rw-r--r--include/NitrokeyManager.h7
-rw-r--r--include/device.h10
2 files changed, 14 insertions, 3 deletions
diff --git a/include/NitrokeyManager.h b/include/NitrokeyManager.h
index 0db0856..2a79922 100644
--- a/include/NitrokeyManager.h
+++ b/include/NitrokeyManager.h
@@ -30,6 +30,7 @@
#include "stick20_commands.h"
#include <vector>
#include <memory>
+#include <unordered_map>
namespace nitrokey {
using namespace nitrokey::device;
@@ -67,6 +68,8 @@ char * strndup(const char* str, size_t maxlen);
bool get_time(uint64_t time = 0);
bool erase_totp_slot(uint8_t slot_number, const char *temporary_password);
bool erase_hotp_slot(uint8_t slot_number, const char *temporary_password);
+ std::vector<std::string> list_devices();
+ bool connect_with_path (std::string path);
bool connect(const char *device_model);
bool connect();
bool disconnect();
@@ -198,8 +201,10 @@ char * strndup(const char* str, size_t maxlen);
static shared_ptr <NitrokeyManager> _instance;
std::shared_ptr<Device> device;
+ std::unordered_map<std::string, shared_ptr<Device> > connected_devices;
- stick10::ReadSlot::ResponsePayload get_OTP_slot_data(const uint8_t slot_number);
+
+ stick10::ReadSlot::ResponsePayload get_OTP_slot_data(const uint8_t slot_number);
bool is_valid_hotp_slot_number(uint8_t slot_number) const;
bool is_valid_totp_slot_number(uint8_t slot_number) const;
bool is_valid_password_safe_slot_number(uint8_t slot_number) const;
diff --git a/include/device.h b/include/device.h
index 1bd4773..f6d2380 100644
--- a/include/device.h
+++ b/include/device.h
@@ -25,6 +25,7 @@
#include "hidapi/hidapi.h"
#include <cstdint>
#include <string>
+#include <vector>
#define HID_REPORT_SIZE 65
@@ -105,8 +106,10 @@ public:
* @return true if visible by OS
*/
bool could_be_enumerated();
+ std::vector<std::string> enumerate();
- void show_stats();
+
+ void show_stats();
// ErrorCounters get_stats(){ return m_counters; }
int get_retry_receiving_count() const { return m_retry_receiving_count; };
int get_retry_sending_count() const { return m_retry_sending_count; };
@@ -121,8 +124,10 @@ public:
void set_retry_delay(std::chrono::milliseconds delay);
static void set_default_device_speed(int delay);
void setDefaultDelay();
+ void set_path(const std::string path);
+
-private:
+ private:
std::atomic<uint8_t> last_command_status;
void _reconnect();
bool _connect();
@@ -143,6 +148,7 @@ protected:
std::chrono::milliseconds m_retry_timeout;
std::chrono::milliseconds m_send_receive_delay;
std::atomic<hid_device *>mp_devhandle;
+ std::string m_path;
static std::atomic_int instances_count;
static std::chrono::milliseconds default_delay ;