gcontini
2019-11-03 0383805b72953ebaa00806a3a39f722e29beb5af
src/library/license++.cpp
@@ -1,6 +1,6 @@
//============================================================================
// Name        : license-manager-cpp.cpp
// Author      :
// Author      :
// Version     :
// Copyright   : BSD
//============================================================================
@@ -9,38 +9,40 @@
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <iostream>
#include "api/license++.h"
#include "reader/LicenseReader.h"
#include "LicenseReader.hpp"
using namespace std;
DllExport void print_error(char out_buffer[256], LicenseInfo* licenseInfo) {
void print_error(char out_buffer[256], LicenseInfo* licenseInfo) {
}
DllExport void identify_pc(IDENTIFICATION_STRATEGY pc_id_method,
      char chbuffer[PC_IDENTIFIER_SIZE + 1]) {
void identify_pc(IDENTIFICATION_STRATEGY pc_id_method, char chbuffer[PC_IDENTIFIER_SIZE + 1]) {
}
static void mergeLicenses(vector<license::FullLicenseInfo> licenses,
      LicenseInfo* license) {
   if (license != NULL) {
   if (license != nullptr) {
      time_t curLicense_exp = 0;
      for (auto it = licenses.begin(); it != licenses.end(); it++) {
         //choose the license that expires later...
         if (!it->has_expiry) {
            it->toLicenseInfo(license);
            break;
         } else if (curLicense_exp < it->to_date) {
            curLicense_exp = it->to_date;
         } else if (curLicense_exp < it->expires_on()) {
            curLicense_exp = it->expires_on();
            it->toLicenseInfo(license);
         }
      }
   }
}
EVENT_TYPE acquire_license(char * product, LicenseLocation licenseLocation,
      LicenseInfo* license) {
EVENT_TYPE acquire_license(const char * product,
      const LicenseLocation* licenseLocation, LicenseInfo* licenseInfoOut) {
   license::LicenseReader lr = license::LicenseReader(licenseLocation);
   vector<license::FullLicenseInfo> licenses;
   license::EventRegistry er = lr.readLicenses(string(product), licenses);
@@ -49,38 +51,42 @@
      vector<license::FullLicenseInfo> licenses_with_errors;
      vector<license::FullLicenseInfo> licenses_ok;
      for (auto it = licenses.begin(); it != licenses.end(); it++) {
         license::EventRegistry validation_er = it->validate(0);
         if (er.isGood()) {
         bool valid = it->validate(0,er);
         if (valid) {
            licenses_ok.push_back(*it);
         } else {
            licenses_with_errors.push_back(*it);
         }
         er.append(validation_er);
      }
      if (licenses_ok.size() > 0) {
         er.turnErrosIntoWarnings();
         er.turnErrorsIntoWarnings();
         result = LICENSE_OK;
         mergeLicenses(licenses_ok, license);
         mergeLicenses(licenses_ok, licenseInfoOut);
      } else {
         er.turnWarningsIntoErrors();
         result = er.getLastFailure()->event_type;
         mergeLicenses(licenses_with_errors, license);
         mergeLicenses(licenses_with_errors, licenseInfoOut);
      }
   } else {
      er.turnWarningsIntoErrors();
      result = er.getLastFailure()->event_type;
   }
   if (license != NULL) {
      er.exportLastEvents(license->status, 5);
#ifdef _DEBUG
   cout << er <<endl;
#endif
   if (licenseInfoOut != nullptr) {
      er.exportLastEvents(licenseInfoOut->status, AUDIT_EVENT_NUM);
   }
   return result;
}
DllExport enum EVENT_TYPE confirm_license(char * product,
EVENT_TYPE confirm_license(char * product,
      LicenseLocation licenseLocation) {
   return LICENSE_OK;
}
DllExport enum EVENT_TYPE release_license(char * product,
EVENT_TYPE release_license(char * product,
      LicenseLocation licenseLocation) {
   return LICENSE_OK;
}