Gabriele Contini
2020-01-11 1d1082fe695366da3498f528b953203a90fe7385
src/library/pc_identifier/default_strategy.cpp
@@ -1,33 +1,80 @@
/*
 * default_strategy.cpp
 *
 *  Created on: Jan 2, 2020
 *  Created on: Jan 1, 2020
 *      Author: devel
 */
#include <vector>
#include "pc_identifier_facade.hpp"
#include "../os/execution_environment.hpp"
#include "default_strategy.hpp"
using namespace std;
namespace license {
DefaultStrategy::DefaultStrategy() {
   // TODO Auto-generated constructor stub
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) {
      if (exec.is_docker()) {
         strategy_to_try = LCC_DOCKER_STRATEGIES;
      } else {
         strategy_to_try = LCC_LXC_STRATEGIES;
      }
   } else if (virtualization == 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() {
   // TODO Auto-generated destructor stub
DefaultStrategy::DefaultStrategy() {}
DefaultStrategy::~DefaultStrategy() {}
LCC_API_IDENTIFICATION_STRATEGY DefaultStrategy::identification_strategy() const { return STRATEGY_DEFAULT; }
FUNCTION_RETURN DefaultStrategy::identify_pc(PcIdentifier& 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;
      auto strategy_ptr = PcIdentifierFacade::STRATEGY_MAP.find(strat_to_try);
      if (strategy_ptr == PcIdentifierFacade::STRATEGY_MAP.end()) {
         throw logic_error("strategy not found");
      }
      ret = strategy_ptr->second->identify_pc(pc_id);
      if (ret == FUNC_RET_OK) {
         break;
      }
   }
   return ret;
}
DefaultStrategy::DefaultStrategy(const DefaultStrategy& other) {
   // TODO Auto-generated constructor stub
std::vector<PcIdentifier> DefaultStrategy::alternative_ids() const {
   vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try = available_strategies();
   vector<PcIdentifier> identifiers;
   FUNCTION_RETURN ret = FUNC_RET_NOT_AVAIL;
   for (auto it : strategy_to_try) {
      LCC_API_IDENTIFICATION_STRATEGY strat_to_try = it;
      auto strategy_ptr = PcIdentifierFacade::STRATEGY_MAP.find(strat_to_try);
      if (strategy_ptr == PcIdentifierFacade::STRATEGY_MAP.end()) {
         throw logic_error("strategy not found");
      }
      vector<PcIdentifier> alt_ids = strategy_ptr->second->alternative_ids();
      // identifiers.push_back(alt_ids);
   }
   return identifiers;
}
IDENTIFICATION_STRATEGY DefaultStrategy::identification_strategy() const { return STRATEGY_DEFAULT; }
void DefaultStrategy::identify_pc(PcIdentifier& identifier) const {}
std::vector<PcIdentifier> DefaultStrategy::alternative_ids() const {}
EVENT_TYPE DefaultStrategy::validate_identifier(const PcIdentifier& identifier) const {
LCC_EVENT_TYPE DefaultStrategy::validate_identifier(const PcIdentifier& identifier) const {
   // default strategy should always realize itself as a concrete strategy
   return IDENTIFIERS_MISMATCH;
}