4#include <nlohmann/json.hpp>
24using json = nlohmann::json;
25#define NODE_LHVER "GNUSDK"
30 : eventHandler(handler)
46 std::vector<InterfaceInfo> interfaces;
47 std::set<std::string> seen;
49 struct ifaddrs* ifaddr;
50 if (getifaddrs(&ifaddr) == -1)
return interfaces;
52 for (
struct ifaddrs* ifa = ifaddr; ifa !=
nullptr; ifa = ifa->ifa_next) {
53 if (!ifa->ifa_name)
continue;
55 std::string name = ifa->ifa_name;
56 if (seen.count(name))
continue;
61 info.
status = (ifa->ifa_flags & IFF_UP) ?
"UP" :
"DOWN";
65std::string uevent_path =
"/sys/class/net/" + name +
"/uevent";
66std::ifstream uevent_file(uevent_path);
67std::string line, devtype;
69while (std::getline(uevent_file, line)) {
70 if (line.find(
"DEVTYPE=") == 0) {
71 devtype = line.substr(8);
78 std::string type_path =
"/sys/class/net/" + name +
"/type";
79 std::ifstream type_file(type_path);
81 if (type_file >> type_value) {
83 case 1: devtype =
"ether";
break;
84 case 772: devtype =
"loopback";
break;
85 case 512: devtype =
"wlan";
break;
86 default: devtype =
"unknown";
break;
91 if (devtype ==
"wlan") info.
type =
"WiFi";
92 else if (devtype ==
"ether") info.
type =
"Ethernet";
93 else if (name ==
"lo") info.
type =
"Loopback";
94 else if (!devtype.empty()) info.
type = devtype;
95 else info.
type =
"Unknown";
97 interfaces.push_back(info);
103 DIR* bt_dir = opendir(
"/sys/class/bluetooth");
106 while ((ent = readdir(bt_dir)) !=
nullptr) {
107 std::string hci = ent->d_name;
108 if (hci.find(
"hci") == 0 && seen.count(hci) == 0) {
111 info.
type =
"Bluetooth (HCI)";
113 interfaces.push_back(info);
128 return daasInstance->listAvailableDrivers();
132 return daasInstance->getStatus();
136 return daasInstance->status(din);
140 return daasInstance->fetch(din,opts);
144 return daasInstance->listNodes();
147 return daasInstance->storeConfiguration(storage_interface);
151 return daasInstance->loadConfiguration(storage_interface);
156 return daasInstance->doInit(sid, din);
160 return daasInstance->doPerform(mode);
164 return daasInstance->doEnd();
168 return daasInstance->doReset();
172 return daasInstance->getVersion();
175 const char *version = daasInstance->getVersion();
176 const char *build = daasInstance->getBuildInfo();
178 if (!version) version =
"UNKNOWN";
179 if (!build) build =
"UNKNOWN";
181 snprintf(infoBuffer,
sizeof(infoBuffer),
"Version: %s | Build: %s",version,build);
186 return daasInstance->enableDriver(link, driver);
223 std::ifstream file(configFilePath);
230 din_t sid =
static_cast<din_t>(config[
"sid"].get<
int>());
231 din_t din =
static_cast<din_t>(config[
"din"].get<
int>());
232 configCache[
"sid"] = std::to_string(sid);
233 configCache[
"din"] = std::to_string(din);
236 driversCache.clear();
239 for (
const auto& drv : config[
"drivers"]) {
240 link_t link =
static_cast<link_t>(drv[
"link"].get<
int>());
241 std::string uri = drv[
"uri"].get<std::string>();
251 for (
const auto& drv : driversCache) {
262 return daasInstance->map(din);
266 return daasInstance->map(din, link, uri);
270 return daasInstance->map(din, link, uri, securityKey);
274 return daasInstance->remove(din);
278 return daasInstance->locate(din);
282 return daasInstance->availablesPull(din, count);
286 return daasInstance->pull(din, inboundDDO);
290 return daasInstance->push(din, outboundDDO);
294 return daasInstance->frisbee(din);
298 this->eventHandler = handler;
void setEventHandler(IDaasApiEvent *event)
Imposta un nuovo handler eventi.
std::vector< std::string > getActiveInterfaces()
daas_error_t pull(din_t din, DDO **inboundDDO)
Riceve un pacchetto DDO dal nodo remoto.
daas_error_t doPerform(performs_mode_t mode)
Attiva l'esecuzione interna del nodo.
DaasWrapper(const char *config, IDaasApiEvent *eventHandler)
Costruttore.
daas_error_t enableDriver(link_t link, const char *driver)
Abilita un driver su uno specifico link.
const nodestate_t & fetch(din_t din, uint16_t opts)
daas_error_t doInit(din_t sid, din_t din)
Inizializza il nodo DaaS con SID e DIN.
daas_error_t setupNode(din_t sid, din_t din, link_t link, const char *uri)
daas_error_t map(din_t din)
Mappa un nodo con DIN noto nella rete (formato base)
daas_error_t remove(din_t din)
Rimuove un nodo precedentemente mappato.
daas_error_t doEnd()
Termina le attivitą del nodo.
bool loadConfiguration(IDepot *storage_interface)
Carica la configurazione usando un'interfaccia IDepot.
const nodestate_t & status(din_t din)
daas_error_t doReset()
Resetta lo stato del nodo.
bool storeConfiguration(IDepot *storage_interface)
Salva la configurazione corrente usando un'interfaccia IDepot.
const char * getVersion()
Restituisce la versione della libreria libdaas.a.
std::vector< InterfaceInfo > listSystemInterfaces()
daas_error_t availablesPull(din_t din, uint32_t &count)
Restituisce il numero di pacchetti disponibili da ricevere.
const char * listAvailableDrivers()
daas_error_t push(din_t din, DDO *outboundDDO)
Invia un pacchetto DDO al nodo remoto.
daas_error_t locate(din_t din)
Localizza un nodo in rete.
daas_error_t frisbee(din_t din)
Esegue un invio rapido (fire-and-forget)
Vector< din_t > dinlist_t
std::vector< std::string > listSystemNetworkInterfaces()
Rappresenta la configurazione di un driver DaaS.