diff options
-rw-r--r-- | NitrokeyManager.cc | 18 | ||||
-rw-r--r-- | include/NitrokeyManager.h | 3 | ||||
-rw-r--r-- | include/device_proto.h | 2 |
3 files changed, 10 insertions, 13 deletions
diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index 93b11fa..c6eb51b 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -24,7 +24,7 @@ namespace nitrokey{ // package type to auth, auth type [Authorize,UserAuthorize] template <typename S, typename A, typename T> - void auth_package(T& package, const char* admin_temporary_password, Device * device){ + void auth_package(T& package, const char* admin_temporary_password, shared_ptr<Device> device){ auto auth = get_payload<A>(); strcpyT(auth.temporary_password, admin_temporary_password); auth.crc_to_authorize = S::CommandTransaction::getCRC(package); @@ -33,22 +33,18 @@ namespace nitrokey{ NitrokeyManager * NitrokeyManager::_instance = nullptr; - NitrokeyManager::NitrokeyManager(): device(nullptr) { + NitrokeyManager::NitrokeyManager() { set_debug(true); } NitrokeyManager::~NitrokeyManager() { - delete device; } bool NitrokeyManager::connect() { device = nullptr; - vector<Device*> devices = { new Stick10(), new Stick20() }; + vector< shared_ptr<Device> > devices = { make_shared<Stick10>(), make_shared<Stick20>() }; for( auto d : devices ){ - if (device != nullptr){ - delete d; - } - if (device == nullptr && d->connect()){ - device = d; + if (d->connect()){ + device = std::shared_ptr<Device>(d); } } return device != nullptr; @@ -58,10 +54,10 @@ namespace nitrokey{ bool NitrokeyManager::connect(const char *device_model) { switch (device_model[0]){ case 'P': - device = new Stick10(); + device = make_shared<Stick10>(); break; case 'S': - device = new Stick20(); + device = make_shared<Stick20>(); break; default: throw std::runtime_error("Unknown model"); diff --git a/include/NitrokeyManager.h b/include/NitrokeyManager.h index be367fd..6fa096a 100644 --- a/include/NitrokeyManager.h +++ b/include/NitrokeyManager.h @@ -7,6 +7,7 @@ #include "stick10_commands.h" #include "stick20_commands.h" #include <vector> +#include <memory> namespace nitrokey { using namespace nitrokey::device; @@ -86,7 +87,7 @@ namespace nitrokey { static NitrokeyManager *_instance; bool connected; - Device *device; + std::shared_ptr<Device> device; bool is_valid_hotp_slot_number(uint8_t slot_number) const; bool is_valid_totp_slot_number(uint8_t slot_number) const; diff --git a/include/device_proto.h b/include/device_proto.h index 40b2a22..4044cdc 100644 --- a/include/device_proto.h +++ b/include/device_proto.h @@ -144,7 +144,7 @@ public: bzero(&packet, sizeof(packet)); } - response_payload & data(){ + response_payload & data() { return packet.payload; } |