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/ethernet.cpp | 74 ++++++++++++++++++------------------- 1 files changed, 36 insertions(+), 38 deletions(-) diff --git a/src/library/pc_identifier/ethernet.cpp b/src/library/pc_identifier/ethernet.cpp index f7166a7..8c42735 100644 --- a/src/library/pc_identifier/ethernet.cpp +++ b/src/library/pc_identifier/ethernet.cpp @@ -4,53 +4,51 @@ * Created on: Jan 11, 2020 * Author: devel */ -#include <array> #include "ethernet.hpp" -#include "../os/os.h" + +#include <bits/stdint-uintn.h> +#include <array> +#include <vector> + +#include "../../../include/licensecc/datatypes.h" +#include "../../../projects/DEFAULT/include/licensecc/DEFAULT/licensecc_properties.h" +#include "../base/base.h" +#include "../os/network.hpp" +#include "pc_identifier.hpp" namespace license { +namespace pc_identifier { using namespace std; -static FUNCTION_RETURN generate_ethernet_pc_id(vector<array<uint8_t, 6>> &data, bool use_mac) { - OsAdapterInfo *adapterInfos; - size_t defined_adapters, adapters = 0; +static FUNCTION_RETURN generate_ethernet_pc_id(vector<array<uint8_t, PC_IDENTIFIER_PROPRIETARY_DATA>> &data, + const bool use_ip) { + vector<os::OsAdapterInfo> adapters; - FUNCTION_RETURN result_adapterInfos = getAdapterInfos(NULL, &adapters); - if (result_adapterInfos != FUNC_RET_BUFFER_TOO_SMALL) { + FUNCTION_RETURN result_adapterInfos = getAdapterInfos(adapters); + if (result_adapterInfos != FUNC_RET_OK) { return result_adapterInfos; } - if (adapters == 0) { + if (adapters.size() == 0) { return FUNC_RET_NOT_AVAIL; } - defined_adapters = adapters; - data.reserve(adapters); - adapterInfos = static_cast<OsAdapterInfo *>(malloc(adapters * sizeof(OsAdapterInfo))); - result_adapterInfos = getAdapterInfos(adapterInfos, &adapters); - if (result_adapterInfos == FUNC_RET_OK) { - unsigned int j; - for (j = 0; j < adapters; j++) { - unsigned int k; - array<uint8_t, 6> identifier; - for (k = 0; k < 6; k++) { - if (use_mac) { - identifier[k] = adapterInfos[j].mac_address[k + 2]; - } else { - // use ip - if (k < 4) { - identifier[k] = adapterInfos[j].ipv4_address[k]; - } else { - // padding - identifier[k] = 42; - } - } + for (auto &it : adapters) { + unsigned int k, data_len, data_byte; + array<uint8_t, PC_IDENTIFIER_PROPRIETARY_DATA> identifier; + data_len = use_ip ? sizeof(os::OsAdapterInfo::ipv4_address) : sizeof(os::OsAdapterInfo::mac_address); + + for (k = 0; k < PC_IDENTIFIER_PROPRIETARY_DATA; k++) { + if (k < data_len) { + identifier[k] = use_ip ? it.ipv4_address[k] : it.mac_address[k]; + } else { + identifier[k] = 42; } - identifier[6] = identifier[6] & 0x1F; - data.push_back(identifier); } - } - free(adapterInfos); + identifier[0] = identifier[0] & 0x1F; + data.push_back(identifier); + } + return result_adapterInfos; } @@ -61,7 +59,7 @@ LCC_API_IDENTIFICATION_STRATEGY Ethernet::identification_strategy() const { return STRATEGY_ETHERNET; } FUNCTION_RETURN Ethernet::identify_pc(PcIdentifier &pc_id) const { - vector<array<uint8_t, 6>> data; + vector<array<uint8_t, PC_IDENTIFIER_PROPRIETARY_DATA>> data; FUNCTION_RETURN result = generate_ethernet_pc_id(data, use_ip); if (result == FUNC_RET_OK) { pc_id.set_data(data[0]); @@ -70,7 +68,7 @@ } std::vector<PcIdentifier> Ethernet::alternative_ids() const { - vector<array<uint8_t, 6>> data; + vector<array<uint8_t, PC_IDENTIFIER_PROPRIETARY_DATA>> data; FUNCTION_RETURN result = generate_ethernet_pc_id(data, use_ip); vector<PcIdentifier> identifiers; if (result == FUNC_RET_OK) { @@ -86,14 +84,14 @@ } LCC_EVENT_TYPE Ethernet::validate_identifier(const PcIdentifier &identifier) const { - vector<array<uint8_t, 6>> data; + vector<array<uint8_t, PC_IDENTIFIER_PROPRIETARY_DATA>> data; FUNCTION_RETURN generate_ethernet = generate_ethernet_pc_id(data, use_ip); LCC_EVENT_TYPE result = IDENTIFIERS_MISMATCH; if (generate_ethernet == FUNC_RET_OK) { - // fixme - // result = validate_identifier(identifier, data); + result = validate_identifier(identifier, data); } return result; } +} // namespace pc_identifier } /* namespace license */ -- Gitblit v1.9.1