From 22b6427979a71c23d795cb351a84210342b5d352 Mon Sep 17 00:00:00 2001
From: Gabriele Contini <contini.mailing@gmail.com>
Date: 摹曛, 09 1月 2020 10:19:22 +0800
Subject: [PATCH] pc identifiers intermediate work

---
 src/library/licensecc.cpp |   40 ++++++++++++++++++++++++++++++----------
 1 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/library/licensecc.cpp b/src/library/licensecc.cpp
index 5cc512b..964f362 100644
--- a/src/library/licensecc.cpp
+++ b/src/library/licensecc.cpp
@@ -5,22 +5,36 @@
 // Copyright   : BSD
 //============================================================================
 
+#define __STDC_WANT_LIB_EXT1__ 1
 #include <fstream>
 #include <stdio.h>
+#include <string.h>
 #include <stdlib.h>
 #include <cstring>
 #include <iostream>
 
 #include <licensecc/datatypes.h>
 #include <licensecc/licensecc.h>
+#include <licensecc_properties.h>
 
+#include "pc_identifier/pc_identifier_facade.hpp"
 #include "limits/license_verifier.hpp"
+#include "base/StringUtils.h"
 #include "LicenseReader.hpp"
 
 using namespace std;
 void print_error(char out_buffer[256], LicenseInfo* licenseInfo) {}
 
-void identify_pc(IDENTIFICATION_STRATEGY pc_id_method, char chbuffer[PC_IDENTIFIER_SIZE + 1]) {}
+bool identify_pc(IDENTIFICATION_STRATEGY pc_id_method, char* chbuffer, size_t* bufSize) {
+	FUNCTION_RETURN result = FUNC_RET_BUFFER_TOO_SMALL;
+	string pc_id = license::PcIdentifierFacade::generate_user_pc_signature(pc_id_method);
+	if (*bufSize >= pc_id.size() + 1) {
+		strncpy(chbuffer, pc_id.c_str(), *bufSize);
+	} else {
+		*bufSize = pc_id.size() + 1;
+	}
+	return result == FUNC_RET_OK;
+}
 
 static void mergeLicenses(const vector<LicenseInfo>& licenses, LicenseInfo* license_out) {
 	if (license_out != nullptr) {
@@ -40,11 +54,13 @@
 
 EVENT_TYPE acquire_license(const CallerInformations* callerInformation, const LicenseLocation* licenseLocation,
 						   LicenseInfo* license_out) {
-	license::LicenseReader lr = license::LicenseReader(licenseLocation);
+	const license::LicenseReader lr = license::LicenseReader(licenseLocation);
 	vector<license::FullLicenseInfo> licenses;
 	string project;
-	if (callerInformation != nullptr && strlen(callerInformation->project_name) > 0) {
-		project = string(callerInformation->project_name);
+	size_t str_size;
+	if (callerInformation != nullptr &&
+		(str_size = license::mstrnlen_s(callerInformation->project_name, sizeof callerInformation->project_name)) > 0) {
+		project = string(callerInformation->project_name, str_size);
 	} else {
 		project = string(LCC_PROJECT_NAME);
 	}
@@ -54,16 +70,20 @@
 		vector<LicenseInfo> licenses_with_errors;
 		vector<LicenseInfo> licenses_ok;
 		license::LicenseVerifier verifier(er);
-		for (auto it = licenses.begin(); it != licenses.end(); it++) {
-			FUNCTION_RETURN signatureValid = verifier.verify_signature(*it);
+		for (auto full_lic_info_it = licenses.begin(); full_lic_info_it != licenses.end(); full_lic_info_it++) {
+			if (callerInformation != nullptr) {
+				full_lic_info_it->m_magic = callerInformation->magic;
+			}
+			const FUNCTION_RETURN signatureValid = verifier.verify_signature(*full_lic_info_it);
+			LicenseInfo licInfo = verifier.toLicenseInfo(*full_lic_info_it);
 			if (signatureValid == FUNC_RET_OK) {
-				if (verifier.verify_limits(*it) == FUNC_RET_OK) {
-					licenses_ok.push_back(verifier.toLicenseInfo(*it));
+				if (verifier.verify_limits(*full_lic_info_it) == FUNC_RET_OK) {
+					licenses_ok.push_back(licInfo);
 				} else {
-					licenses_with_errors.push_back(verifier.toLicenseInfo(*it));
+					licenses_with_errors.push_back(licInfo);
 				}
 			} else {
-				licenses_with_errors.push_back(verifier.toLicenseInfo(*it));
+				licenses_with_errors.push_back(licInfo);
 			}
 		}
 		if (licenses_ok.size() > 0) {

--
Gitblit v1.9.1