ReviewedTest ReviewedTestSerializator::loadTest(const QString &filename) { QDomDocument xml; try { loadXmlSchema(":/xsd/xsd/reviewedtestconfig.xsd"); xml = loadXml(filename); if (!checkXml(xml)) { throw Exception(Exception::BadXMLFile, QString("Bad XML file - " + filename)); } } catch (const Exception &err) { throw; } QString title = xml.elementsByTagName("title").at(0).toElement().text(); QString version = xml.elementsByTagName("testVersion").at(0).toElement().text(); ReviewedTest test(title, version); QDomNodeList tasks = xml.elementsByTagName("task"); for (uint i = 0; i < tasks.length(); i++) { test.addTask(getTask(tasks.at(i))); } return test; }
/** * \brief Main function of wrekavoc client * * \param argc number ao argument passed to binaries file * \param argv pointer to Array pointer that contains arguments * \return exit code * \see --- * */ int main (int argc, char **argv) { char xmldoc[SIZE_OF_STRING] = "\0"; strcat (xmldoc, getenv ("HOME")); strcat (xmldoc, CLIENT_CONF_DIR); if (opendir (xmldoc) == NULL) mkdir (xmldoc, 0755); strcat (xmldoc, CLIENT_CONF_FILE); /* Is there enough parameters */ if (argc <= 1) { printf ("Usage: %s <script>|<-c host [rhost] >|<-r [script] >|<-q>\n", argv[0]); return (0); } /* Option -r reset all wrekavocd */ if (argc <= 3 && argv[1][0] == '-' && argv[1][1] == 'r') { if (argc <= 2) Back2normalHost (xmldoc); else { buildXml (argv[2], "/tmp/wrekavoc.reset"); Back2normalHost ("/tmp/wrekavoc.reset"); } } /* Option -c : check host */ else if (argc <= 4 && argv[1][0] == '-' && argv[1][1] == 'c') { if (argc == 3) checkHost (argv[2], "a"); else if (argc == 4) checkHost (argv[2], argv[3]); } /* Option -q : quit all wrekavocd */ else if (argc == 2 && argv[1][0] == '-' && argv[1][1] == 'q') { killHost (xmldoc); } /* Normal : transfert data to nodes */ else { /* Create xml structure from script */ printf ("Building Xml...\n\n"); buildXml (argv[1], xmldoc); /* Check if xml structure is ok */ printf ("Checking Xml...\n\n"); checkXml (xmldoc); /* Send xml structure to nodes */ printf ("Sending Xml...\n"); sendXml (xmldoc); } printf ("\nAction finished!\n"); return 0; }
/** * \brief function to resetconfiguration * * \param xmldoc * \return exit code, 0 if ok * \see --- * */ int Back2normalHost (char *xmldoc) { int fd; xmlDocPtr doc; xmlXPathContextPtr xpathCtx; xmlXPathObjectPtr xpathObj; int size; xmlNodeSetPtr nodes; int i; printf ("Loading Xml...\n\n"); if ((fd = open (xmldoc, O_RDONLY)) == -1) { perror ("Error opening the configuration file"); exit (-7); } printf ("Checking Xml...\n\n"); checkXml (xmldoc); doc = xmlParseFile (xmldoc); printf ("Sending Xml...\n"); xpathCtx = xmlXPathNewContext (doc); xpathObj = xmlXPathEvalExpression ("//machine", xpathCtx); nodes = xpathObj->nodesetval; size = (nodes) ? nodes->nodeNr : 0; for (i = size - 1; i >= 0; i--) { int sockfd = startClientSocket (PORT, xmlGetProp (nodes->nodeTab[i], "name")); printf (" -> reseting %s\'s state...\n", xmlGetProp (nodes->nodeTab[i], "name")); if ((write (sockfd, "normal\0 ", 10)) < 0) { perror ("ERROR writing to socket"); exit (-8); } close (sockfd); } xmlFreeDoc (doc); close (fd); return 0; }