From 205c71575c272a685011c641a33d26cf66cf60a0 Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周一, 10 2月 2020 05:01:07 +0800
Subject: [PATCH] fix unit test with old versions of boost

---
 src/library/pc_identifier/pc_identifier.cpp |   58 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 45 insertions(+), 13 deletions(-)

diff --git a/src/library/pc_identifier/pc_identifier.cpp b/src/library/pc_identifier/pc_identifier.cpp
index e9dc59c..9bf9ea0 100644
--- a/src/library/pc_identifier/pc_identifier.cpp
+++ b/src/library/pc_identifier/pc_identifier.cpp
@@ -10,20 +10,29 @@
 #include "../base/base64.h"
 
 namespace license {
+namespace pc_identifier {
+
 using namespace std;
 
 PcIdentifier::PcIdentifier() {}
 
 PcIdentifier::PcIdentifier(const std::string& param) {
-	// TODO Auto-generated constructor stub
+	string tmp_str(param);  // throw away const
+	std::replace(tmp_str.begin(), tmp_str.end(), '-', '\n');
+	vector<uint8_t> decoded = unbase64(tmp_str);
+	if (decoded.size() != PC_IDENTIFIER_PROPRIETARY_DATA + 1) {
+		cerr << decoded.size();
+		throw logic_error("wrong identifier size " + param);
+	}
+	std::copy_n(decoded.begin(), PC_IDENTIFIER_PROPRIETARY_DATA + 1, m_data.begin());
 }
 
 PcIdentifier::~PcIdentifier() {}
 
 PcIdentifier::PcIdentifier(const PcIdentifier& other) : m_data(other.m_data) {}
 
-void PcIdentifier::set_identification_strategy(IDENTIFICATION_STRATEGY strategy) {
-	if (strategy == STRATEGY_UNKNOWN || strategy == STRATEGY_DEFAULT) {
+void PcIdentifier::set_identification_strategy(LCC_API_IDENTIFICATION_STRATEGY strategy) {
+	if (strategy == STRATEGY_NONE || strategy == STRATEGY_DEFAULT) {
 		throw logic_error("Only known strategies are permitted");
 	}
 	uint8_t stratMov = (strategy << 5);
@@ -43,16 +52,39 @@
 	m_data[0] = (m_data[0] && ~0x30) | virt << 4;
 }
 
-void PcIdentifier::set_virtualization(VIRTUALIZATION_DETAIL virtualization_detail) {}
-
-void PcIdentifier::set_cloud_provider(CLOUD_PROVIDER cloud_provider) {}
-
-void PcIdentifier::set_data(const std::array<uint8_t, 6>& data) {}
-
-std::string PcIdentifier::print() const {
-	string result = base64(m_data.data(), m_data.size(), 4);
-	std::replace(result.begin(), result.end(), '\n', '-');
-	return result;
+void PcIdentifier::set_virtualization(VIRTUALIZATION_DETAIL virtualization_detail) {  // TODO
 }
 
+void PcIdentifier::set_cloud_provider(CLOUD_PROVIDER cloud_provider) {
+	// TODO
+}
+
+void PcIdentifier::set_data(const std::array<uint8_t, PC_IDENTIFIER_PROPRIETARY_DATA>& data) {
+	m_data[1] = (m_data[1] & (~0x1f)) | (data[0] & 0x1f);
+	for (int i = 1; i < PC_IDENTIFIER_PROPRIETARY_DATA; i++) {
+		m_data[i + 1] = data[i];
+	}
+}
+
+std::string PcIdentifier::print() const {
+	string result = base64(m_data.data(), m_data.size(), 5);
+	std::replace(result.begin(), result.end(), '\n', '-');
+	return result.substr(0, result.size() - 1);
+}
+
+LCC_API_IDENTIFICATION_STRATEGY PcIdentifier::get_identification_strategy() const {
+	uint8_t stratMov = m_data[1] >> 5;
+	return static_cast<LCC_API_IDENTIFICATION_STRATEGY>(stratMov);
+}
+
+bool PcIdentifier::data_match(const std::array<uint8_t, PC_IDENTIFIER_PROPRIETARY_DATA>& data) const {
+	bool equals = true;
+	for (int i = 0; i < PC_IDENTIFIER_PROPRIETARY_DATA && equals; i++) {
+		equals = (i == 0) ? ((data[i] & 0x1f) == (m_data[i + 1] & 0x1f)) : (data[i] == m_data[i + 1]);
+	}
+	return equals;
+}
+
+}  // namespace pc_identifier
 } /* namespace license */
+

--
Gitblit v1.9.1