From 8e1bdfdca2ad2157fd74cedc1a6768a1b1c0849d Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周日, 09 2月 2020 04:48:55 +0800 Subject: [PATCH] identifiers next work --- src/library/pc_identifier/pc_identifier.cpp | 54 +++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/library/pc_identifier/pc_identifier.cpp b/src/library/pc_identifier/pc_identifier.cpp index e4e5860..9bf9ea0 100644 --- a/src/library/pc_identifier/pc_identifier.cpp +++ b/src/library/pc_identifier/pc_identifier.cpp @@ -10,12 +10,21 @@ #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() {} @@ -43,20 +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 } -LCC_API_IDENTIFICATION_STRATEGY PcIdentifier::get_identification_strategy() const {} +void PcIdentifier::set_cloud_provider(CLOUD_PROVIDER cloud_provider) { + // TODO +} -bool PcIdentifier::data_match(const std::array<uint8_t, 6>& data) const {} +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