void Inventory::_AddNetworksInfo(tinyxml2::XMLElement* parent) { NetworkRoster roster; NetworkInterface interface; unsigned int cookie = 0; while (roster.GetNextInterface(&cookie, interface) == 0) { if (interface.Name() == "lo") continue; tinyxml2::XMLElement* networks = fDocument->NewElement("NETWORKS"); tinyxml2::XMLElement* description = fDocument->NewElement("DESCRIPTION"); description->LinkEndChild(fDocument->NewText(interface.Name().c_str())); networks->LinkEndChild(description); tinyxml2::XMLElement* driver = fDocument->NewElement("DRIVER"); driver->LinkEndChild(fDocument->NewText("pif")); networks->LinkEndChild(driver); tinyxml2::XMLElement* ipAddress = fDocument->NewElement("IPADDRESS"); ipAddress->LinkEndChild(fDocument->NewText(interface.IPAddress().c_str())); networks->LinkEndChild(ipAddress); tinyxml2::XMLElement* ipDHCP = fDocument->NewElement("IPDHCP"); ipDHCP->LinkEndChild(fDocument->NewText("")); networks->LinkEndChild(ipDHCP); tinyxml2::XMLElement* gateway = fDocument->NewElement("IPGATEWAY"); std::string gatewayString; roster.GetDefaultGateway(interface.Name().c_str(), gatewayString); gateway->LinkEndChild(fDocument->NewText(gatewayString.c_str())); networks->LinkEndChild(gateway); tinyxml2::XMLElement* ipMask = fDocument->NewElement("IPMASK"); ipMask->LinkEndChild(fDocument->NewText(interface.NetMask().c_str())); networks->LinkEndChild(ipMask); tinyxml2::XMLElement* ipSubnet = fDocument->NewElement("IPSUBNET"); ipSubnet->LinkEndChild(fDocument->NewText(interface.BroadcastAddress().c_str())); networks->LinkEndChild(ipSubnet); tinyxml2::XMLElement* mac = fDocument->NewElement("MACADDR"); mac->LinkEndChild(fDocument->NewText(interface.HardwareAddress().c_str())); networks->LinkEndChild(mac); tinyxml2::XMLElement* pciSlot = fDocument->NewElement("PCISLOT"); pciSlot->LinkEndChild(fDocument->NewText("")); networks->LinkEndChild(pciSlot); tinyxml2::XMLElement* status = fDocument->NewElement("STATUS"); status->LinkEndChild(fDocument->NewText(interface.Status().c_str())); networks->LinkEndChild(status); tinyxml2::XMLElement* type = fDocument->NewElement("TYPE"); type->LinkEndChild(fDocument->NewText(interface.Type().c_str())); networks->LinkEndChild(type); tinyxml2::XMLElement* virtualDevice = fDocument->NewElement("VIRTUALDEV"); virtualDevice->LinkEndChild(fDocument->NewText("")); networks->LinkEndChild(virtualDevice); parent->LinkEndChild(networks); } }
void Inventory::_AddHardwareInfo(tinyxml2::XMLElement* parent) { tinyxml2::XMLElement* hardware = fDocument->NewElement("HARDWARE"); tinyxml2::XMLElement* checksum = fDocument->NewElement("CHECKSUM"); checksum->LinkEndChild(fDocument->NewText(int_to_string(Checksum()).c_str())); // Find first active interface NetworkRoster roster; NetworkInterface interface; unsigned int cookie = 0; while (roster.GetNextInterface(&cookie, interface) == 0) { if (interface.Name() != "lo" && interface.IPAddress() != "" && interface.IPAddress() != "0.0.0.0") break; } std::string defaultGateway; roster.GetDefaultGateway(interface.Name().c_str(), defaultGateway); tinyxml2::XMLElement* defaultGW = fDocument->NewElement("DEFAULTGATEWAY"); defaultGW->LinkEndChild(fDocument->NewText(defaultGateway.c_str())); tinyxml2::XMLElement* description = fDocument->NewElement("DESCRIPTION"); std::string descriptionString; descriptionString.append(fMachine->OSInfo().machine).append("/"); description->LinkEndChild(fDocument->NewText(descriptionString.c_str())); tinyxml2::XMLElement* ipAddress = fDocument->NewElement("IPADDR"); ipAddress->LinkEndChild(fDocument->NewText(interface.IPAddress().c_str())); tinyxml2::XMLElement* memory = fDocument->NewElement("MEMORY"); memory->LinkEndChild(fDocument->NewText(fMachine->OSInfo().memory.c_str())); tinyxml2::XMLElement* name = fDocument->NewElement("NAME"); name->LinkEndChild(fDocument->NewText(fMachine->HostName().c_str())); tinyxml2::XMLElement* osComments = fDocument->NewElement("OSCOMMENTS"); osComments->LinkEndChild(fDocument->NewText(fMachine->OSInfo().comments.c_str())); tinyxml2::XMLElement* osName = fDocument->NewElement("OSNAME"); osName->LinkEndChild(fDocument->NewText(fMachine->OSInfo().os_description.c_str())); tinyxml2::XMLElement* osVersion = fDocument->NewElement("OSVERSION"); osVersion->LinkEndChild(fDocument->NewText(fMachine->OSInfo().os_release.c_str())); tinyxml2::XMLElement* processorN = fDocument->NewElement("PROCESSORN"); processorN->LinkEndChild(fDocument->NewText(int_to_string(fMachine->CountProcessors()).c_str())); tinyxml2::XMLElement* processorS = fDocument->NewElement("PROCESSORS"); processorS->LinkEndChild(fDocument->NewText(fMachine->ProcessorSpeed(0).c_str())); tinyxml2::XMLElement* processorT = fDocument->NewElement("PROCESSORT"); processorT->LinkEndChild(fDocument->NewText(fMachine->ProcessorType(0).c_str())); tinyxml2::XMLElement* swap = fDocument->NewElement("SWAP"); swap->LinkEndChild(fDocument->NewText(fMachine->OSInfo().swap.c_str())); tinyxml2::XMLElement* userID = fDocument->NewElement("USERID"); // TODO: Fix this userID->LinkEndChild(fDocument->NewText("root")); //<USERID>root</USERID> tinyxml2::XMLElement* uuid = fDocument->NewElement("UUID"); uuid->LinkEndChild(fDocument->NewText(fMachine->SystemUUID().c_str())); tinyxml2::XMLElement* vmSystem = fDocument->NewElement("VMSYSTEM"); vmSystem->LinkEndChild(fDocument->NewText("Physical")); // <VMSYSTEM>Xen</VMSYSTEM> tinyxml2::XMLElement* workGroup = fDocument->NewElement("WORKGROUP"); workGroup->LinkEndChild(fDocument->NewText(fMachine->OSInfo().domain_name.c_str())); hardware->LinkEndChild(checksum); hardware->LinkEndChild(defaultGW); hardware->LinkEndChild(description); hardware->LinkEndChild(ipAddress); try { LoggedUsers users; if (users.Count() > 0) { user_entry user = users.UserEntryAt(users.Count() - 1); tinyxml2::XMLElement* dateLastLoggedUser = fDocument->NewElement("DATELASTLOGGEDUSER"); dateLastLoggedUser->LinkEndChild(fDocument->NewText(user.logintimestring.c_str())); hardware->LinkEndChild(dateLastLoggedUser); tinyxml2::XMLElement* lastLoggedUser = fDocument->NewElement("LASTLOGGEDUSER"); lastLoggedUser->LinkEndChild(fDocument->NewText(user.login.c_str())); hardware->LinkEndChild(lastLoggedUser); } } catch (...) { // Not a big issue, after all. } hardware->LinkEndChild(memory); hardware->LinkEndChild(name); hardware->LinkEndChild(osComments); hardware->LinkEndChild(osName); hardware->LinkEndChild(osVersion); hardware->LinkEndChild(processorN); hardware->LinkEndChild(processorS); hardware->LinkEndChild(processorT); hardware->LinkEndChild(swap); hardware->LinkEndChild(userID); hardware->LinkEndChild(uuid); hardware->LinkEndChild(vmSystem); hardware->LinkEndChild(workGroup); parent->LinkEndChild(hardware); }