From 36ce07093b68b07513149577c209ae7a57ab356b Mon Sep 17 00:00:00 2001 From: Gabriele Contini <contini.mailing@gmail.com> Date: 周日, 15 3月 2020 16:26:21 +0800 Subject: [PATCH] Merge branch 'feature/pc_identifiers' into develop issues #2 #3 #14 #49 --- src/library/hw_identifier/default_strategy.cpp | 77 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 77 insertions(+), 0 deletions(-) diff --git a/src/library/hw_identifier/default_strategy.cpp b/src/library/hw_identifier/default_strategy.cpp new file mode 100644 index 0000000..da21f20 --- /dev/null +++ b/src/library/hw_identifier/default_strategy.cpp @@ -0,0 +1,77 @@ +/* + * default_strategy.cpp + * + * Created on: Jan 1, 2020 + * Author: devel + */ + +#include <vector> +#include "../os/execution_environment.hpp" +#include "default_strategy.hpp" + +using namespace std; +namespace license { +namespace hw_identifier { + +static vector<LCC_API_IDENTIFICATION_STRATEGY> available_strategies() { + os::ExecutionEnvironment exec; + os::VIRTUALIZATION virtualization = exec.getVirtualization(); + vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try; + if (virtualization == os::CONTAINER) { + if (exec.is_docker()) { + strategy_to_try = LCC_DOCKER_STRATEGIES; + } else { + strategy_to_try = LCC_LXC_STRATEGIES; + } + } else if (virtualization == os::VM) { + if (exec.is_cloud()) { + strategy_to_try = LCC_CLOUD_STRATEGIES; + } else { + strategy_to_try = LCC_VM_STRATEGIES; + } + } else { + strategy_to_try = LCC_BARE_TO_METAL_STRATEGIES; + } + return strategy_to_try; +} + +DefaultStrategy::DefaultStrategy() {} + +DefaultStrategy::~DefaultStrategy() {} + +LCC_API_IDENTIFICATION_STRATEGY DefaultStrategy::identification_strategy() const { return STRATEGY_DEFAULT; } + +FUNCTION_RETURN DefaultStrategy::identify_pc(HwIdentifier& pc_id) const { + vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try = available_strategies(); + FUNCTION_RETURN ret = FUNC_RET_NOT_AVAIL; + for (auto it : strategy_to_try) { + LCC_API_IDENTIFICATION_STRATEGY strat_to_try = it; + unique_ptr<IdentificationStrategy> strategy_ptr = IdentificationStrategy::get_strategy(strat_to_try); + ret = strategy_ptr->identify_pc(pc_id); + if (ret == FUNC_RET_OK) { + break; + } + } + return ret; +} + +std::vector<HwIdentifier> DefaultStrategy::alternative_ids() const { + vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try = available_strategies(); + vector<HwIdentifier> identifiers; + FUNCTION_RETURN ret = FUNC_RET_NOT_AVAIL; + for (auto it : strategy_to_try) { + LCC_API_IDENTIFICATION_STRATEGY strat_to_try = it; + unique_ptr<IdentificationStrategy> strategy_ptr = IdentificationStrategy::get_strategy(strat_to_try); + vector<HwIdentifier> alt_ids = strategy_ptr->alternative_ids(); + identifiers.insert(alt_ids.begin(), alt_ids.end(), identifiers.end()); + } + return identifiers; +} + +LCC_EVENT_TYPE DefaultStrategy::validate_identifier(const HwIdentifier& identifier) const { + // default strategy should always realize itself as a concrete strategy + return IDENTIFIERS_MISMATCH; +} + +} // namespace hw_identifier +} /* namespace license */ -- Gitblit v1.9.1