nancy.liao
2025-05-23 8553a8d63f97cfa8d64b5b2260e81f8c896a8398
src/library/hw_identifier/default_strategy.cpp
@@ -13,17 +13,17 @@
namespace license {
namespace hw_identifier {
static vector<LCC_API_IDENTIFICATION_STRATEGY> available_strategies() {
   ExecutionEnvironment exec;
   VIRTUALIZATION virtualization = exec.getVirtualization();
   vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try;
   if (virtualization == CONTAINER) {
static vector<LCC_API_HW_IDENTIFICATION_STRATEGY> available_strategies() {
   const os::ExecutionEnvironment exec;
   LCC_API_VIRTUALIZATION_SUMMARY virtualization = exec.virtualization();
   vector<LCC_API_HW_IDENTIFICATION_STRATEGY> strategy_to_try;
   if (virtualization == LCC_API_VIRTUALIZATION_SUMMARY::CONTAINER) {
      if (exec.is_docker()) {
         strategy_to_try = LCC_DOCKER_STRATEGIES;
      } else {
         strategy_to_try = LCC_LXC_STRATEGIES;
      }
   } else if (virtualization == VM) {
   } else if (virtualization == LCC_API_VIRTUALIZATION_SUMMARY::VM) {
      if (exec.is_cloud()) {
         strategy_to_try = LCC_CLOUD_STRATEGIES;
      } else {
@@ -39,15 +39,15 @@
DefaultStrategy::~DefaultStrategy() {}
LCC_API_IDENTIFICATION_STRATEGY DefaultStrategy::identification_strategy() const { return STRATEGY_DEFAULT; }
LCC_API_HW_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 DefaultStrategy::generate_pc_id(HwIdentifier& pc_id) const {
   vector<LCC_API_HW_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;
      LCC_API_HW_IDENTIFICATION_STRATEGY strat_to_try = it;
      unique_ptr<IdentificationStrategy> strategy_ptr = IdentificationStrategy::get_strategy(strat_to_try);
      ret = strategy_ptr->identify_pc(pc_id);
      ret = strategy_ptr->generate_pc_id(pc_id);
      if (ret == FUNC_RET_OK) {
         break;
      }
@@ -56,20 +56,23 @@
}
std::vector<HwIdentifier> DefaultStrategy::alternative_ids() const {
   vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try = available_strategies();
   vector<LCC_API_HW_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;
      LCC_API_HW_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;
}
/**
* default strategy should never be used to validate an identifier. The strategy that was used in the first place to generate it
* should handle it. DefaultStrategy is just a switch.
*/
LCC_EVENT_TYPE DefaultStrategy::validate_identifier(const HwIdentifier& identifier) const {
   // default strategy should always realize itself as a concrete strategy
   //
   return IDENTIFIERS_MISMATCH;
}