/*
|
* ethernet.cpp
|
*
|
* Created on: Jan 11, 2020
|
* Author: GC
|
*/
|
|
#include <array>
|
#include <vector>
|
|
#include <licensecc/datatypes.h>
|
#include <licensecc_properties.h>
|
#include "../base/base.h"
|
#include "../os/network.hpp"
|
#include "hw_identifier.hpp"
|
#include "ethernet.hpp"
|
|
namespace license {
|
namespace hw_identifier {
|
using namespace std;
|
|
static FUNCTION_RETURN generate_ethernet_pc_id(vector<array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA>> &data,
|
const bool use_ip) {
|
vector<os::OsAdapterInfo> adapters;
|
|
FUNCTION_RETURN result_adapterInfos = getAdapterInfos(adapters);
|
if (result_adapterInfos != FUNC_RET_OK) {
|
return result_adapterInfos;
|
}
|
if (adapters.size() == 0) {
|
return FUNC_RET_NOT_AVAIL;
|
}
|
|
for (auto &it : adapters) {
|
unsigned int k, data_len;
|
array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> identifier;
|
data_len = use_ip ? sizeof(os::OsAdapterInfo::ipv4_address) : sizeof(os::OsAdapterInfo::mac_address);
|
|
for (k = 0; k < HW_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[0] = identifier[0] & 0x1F;
|
data.push_back(identifier);
|
}
|
|
return result_adapterInfos;
|
}
|
|
Ethernet::Ethernet(bool useIp) : use_ip(useIp) {}
|
|
Ethernet::~Ethernet() {}
|
|
LCC_API_IDENTIFICATION_STRATEGY Ethernet::identification_strategy() const {
|
return use_ip ? STRATEGY_IP_ADDRESS : STRATEGY_ETHERNET;
|
}
|
|
std::vector<HwIdentifier> Ethernet::alternative_ids() const {
|
vector<array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA>> data;
|
FUNCTION_RETURN result = generate_ethernet_pc_id(data, use_ip);
|
vector<HwIdentifier> identifiers;
|
if (result == FUNC_RET_OK) {
|
identifiers.reserve(data.size());
|
for (auto &it : data) {
|
HwIdentifier pc_id;
|
pc_id.set_identification_strategy(identification_strategy());
|
pc_id.set_data(it);
|
identifiers.push_back(pc_id);
|
}
|
}
|
return identifiers;
|
}
|
|
} // namespace hw_identifier
|
} /* namespace license */
|