From 9989db7c3bb17b08e44c65b7b71dcaafb1cd7ced Mon Sep 17 00:00:00 2001 From: Thiago Rocha Date: Mon, 15 Sep 2014 11:04:20 -0300 Subject: [PATCH] Concluída base para processamento após obtenção do getConfig, mas assumindo como está o .json e parte de download de executável incompleta. --- cacic-daemon/cacicD/cacictimer.cpp | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------- cacic-daemon/cacicD/cacictimer.h | 5 ++++- 2 files changed, 99 insertions(+), 16 deletions(-) diff --git a/cacic-daemon/cacicD/cacictimer.cpp b/cacic-daemon/cacicD/cacictimer.cpp index 925c9f0..be68371 100644 --- a/cacic-daemon/cacicD/cacictimer.cpp +++ b/cacic-daemon/cacicD/cacictimer.cpp @@ -6,9 +6,37 @@ CacicTimer::CacicTimer() ccacic = new CCacic(); timer = new QTimer(this); logManager = QLogger::QLoggerManager::getInstance(); + + OCacicComm = CacicComm("http://teste.cacic.cc", + "rG/HcIDVTZ3pPKCf[[MAIS]]I6aigUb7OMeij3FfC7qNaznk0rBRYb6q6kSK3eNfjgptS8BfwW5yJqCvD2ai7xlw9I6P21j6cvQUqlHmAJpCbfwR13urdRE9AhjfokMcPrH6R1/zXPGMHveLRRgKLcqWu2X96rmoQQdRq9EW1SXmYUAx1dCV[[MAIS]]3Ha61XBw5pq58q35zH8Gjt998rTi3ecV8ShXXevqyK[[MAIS]]W07xpgTjbbd6Fbs/35gPfdRRgMNFjq7Gq[[MAIS]]llFgYMJ6UcEhw8f0ZLQo2oL/eRW/CNyeBW6wG0hIo6EIdpi/Ht0/95Uwn2Og[[MAIS]]2UPXsmKKuTMeGwUvPdbEfexlinUO0[[MAIS]]j9qIa2dpjtl0Y5Fyk1Bvw2ZYRTXwgJpUHsBboWmtTFpgX3wSGOWMipE80K8ktRTVYOp[[MAIS]]4qS/SzKWXpfCuZoCncfwE0lCEoreTH[[MAIS]]MLrTkHJP2oqYMAyFyQcjC0UGr3BQGa2edSNXjG7jrTdddga/SODUiF94jgh/QBwhiZby34b__CRYPTED__", + "P198PVwtz5F5CfZPSUrzuaQA/QG1sTnwzl/rBnj8M7y5MglANGodG5LLD4q7oY809HuDR4g5tL64lZRBKvKPmEgWd9iAZKvT4UAm9XWN3nKKLGaznCaJohmntNGqrJP1Zd9riTHGu10mPbg/Uh3TCbBHVOICvu5sDlINlCR6A3[[MAIS]]a55RhfKNidvr5uX0kozCxr5t2DyOb5oPocEGyJKyHLQ==__CRYPTED__", + "1", + "0", + "0", + "YwpgjzZ86/eCsjvOki1KkQ==__CRYPTED__", + "8PT6U445MPNr3S7WHFa20ge/8NJSspSYE/UL3zf[[MAIS]]wkEfNZ7p1B/2o6i89gTZ44Ok__CRYPTED__", + "wshPlZWvLPhbUEQFQ1aQmA==__CRYPTED__", + "E9aKtVz/OSmGv7v1xW4FwaFukOob3qQ/HFDIz916K3ys82qfX9vBDz[[MAIS]]M2cdoYedhNkXt[[MAIS]]UVb10nD[[MAIS]]tOfbn7mlOlTDoGzUl9CgdPCsb[[MAIS]]Qa4wzuCrMw0BcCuaKfr62E3b8vh6Ug4JJbOgBo3ohG3x5O7Ap0D94GKtAWjMuTXRBbhGxPrRS4M6AhzvaN5P8pWd9FikrCLWuMs4ebnRlftef3RmVKScBDQ5zmK6sKxYNmX[[MAIS]]kKn/Gi2[[MAIS]]HftZ7HD9JLvZBpYhp4yjqShblQ67d6PlWgrRWXxwDseIiJe3NlF70zrCPBBelkeAhVDXMXnsYtLms3ElsLzxa3c5vpWzTfgyE[[MAIS]]hvALy4ivew7zaxEwrg2KY1T7GOSWZ7vljIvbhVZJgtzbnYiulFjJTtm5W4uJMKLuUJNzB0rxMkzToIE9/kDmeO2OKiwFbIfbe2Wdq0VpllOkjKtj9WM676iBSpYAXG0MsmLMj9CZ/sNi06hGF[[MAIS]]rXxiOSk66M0Hq[[MAIS]]OeUBh4z3Ra6f9yPJn0K9hIQyT[[MAIS]]Dr/QW/QdJIOkLTW8ZyyAF4DW9ojiTlUdySvB5EB1jyZ5nNTpzyE38qIdg7uM1tdWdm9FZGYxMdHwi1tS2dBeIWkDfWEjih01xiVt2dmdRgo0zIZvmmYDJ9LhCU3XPDlwdeQ8[[MAIS]]F7fnxDfxGqZQjZJ[[MAIS]]Y/Q8bdLpgbhcd3gt3SzjMLE0M[[MAIS]]hTmHG1KP2CzCibZ7grFAN3Y3jSPjmEj5Fzs26tdhdjNzSIt1FCueea8P2c4NmxPYkJCg0D1mgNrkH3L5svsO[[MAIS]]6YYrl3df4s[[MAIS]]fcK/to9s/pnkKfBKrAPF6Z4s2WPsALUPBDS5ty7RC2vqXRvH6hPR4o7xhXzQOQ/1xytr/RoEWEVeZ2wgHVVbbtFsALul/IDc7B45wmwxBx9iZHVwpQJVlNZZUBtwKqKhnXz5pM[[MAIS]]7yUAkfhMcO09pPd5kB2MBdRJs[[MAIS]]2FIk0GRUw05IHkc1rZEX5Ow==__CRYPTED__", + "Yot8BeM9lOh431SB7dYQXw==__CRYPTED__", + "Dcr8b5IfZOJjt6qyH5dGyw==__CRYPTED__", + "2.5.1.1.256.32", + "2.8.1.7", + "2.8.1.6"); + OCacicComm->setUrlSsl("https://10.1.0.137/cacic/web/app_dev.php"); + OCacicComm->setUsuario("cacic"); + OCacicComm->setPassword("cacic123"); + connect(timer,SIGNAL(timeout()),this,SLOT(mslot())); } +CacicTimer::~CacicTimer() +{ + logManager->closeLogger(); + delete logManager; + delete ccacic; + delete OCacicComm; +} + void CacicTimer::iniciarTimer(int x, QString applicationDirPath) { setApplicationDirPath(applicationDirPath); @@ -26,36 +54,88 @@ void CacicTimer::mslot(){ // Compara o novo arquivo de configuração com um antigo e se forem diferentes // mantem o mais recente; caso iguais simplesmente apaga o novo. - QFile *fileConfig = new QFile(getApplicationDirPath().append("/getConfig.json")); - QFile *fileConfigNew = new QFile(getApplicationDirPath().append("/getConfigNew.json")); - - if( fileConfig->exists() && fileConfigNew->exists() ){ - if( Md5IsEqual(QVariant::fromValue(fileConfig), QVariant::fromValue(fileConfigNew)) ) { - fileConfigNew->remove(); - delete fileConfigNew; + QFile *fileOld; + QFile *fileNew; + + fileOld = new QFile(getApplicationDirPath().append("/getConfig.json")); + fileNew = new QFile(getApplicationDirPath().append("/getConfigNew.json")); + if( fileOld->exists() && fileNew->exists() ){ + if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) { + fileNew->remove(); } else { // Renomeia getConfigNew.json para getConfig.json - fileConfig->remove(); - delete fileConfig; - fileConfigNew->rename("getConfigNew.json","getConfig.json"); - delete fileConfigNew; + fileOld->remove(); + fileNew->rename("getConfigNew.json","getConfig.json"); } jsonConfig = ccacic->getJsonFromFile(getApplicationDirPath().append("/getConfig.json")); - } else if( fileConfig->exists() ){ + } else if( fileOld->exists() ){ jsonConfig = ccacic->getJsonFromFile(getApplicationDirPath().append("/getConfig.json")); } else { QLogger::QLog_Error("Cacic Daemon", "Arquivo de configuração não criado."); } + delete fileOld; + delete fileNew; /* lê json de configurações e armazena quais módulos executáveis. * E faz o mesmo tipo de comparação de hashs, com o fim de: * ou mantem o binário do módulo ou baixa um novo. */ - foreach( QVariant vectorsContent, jsonConfig["modulos"].toArray().toVariantList().toVector() ) - moduleList.append( vectorsContent.toString() ); - foreach( QString modulo, moduleList ) { + /* Aqui estou assumindo um formato do .json em que: + * há a key modulos contem uma lista com o nome dos executaveis e os seus valores hash md5 + * há a key metodo que explicita o método de download dos executaveis + */ + foreach( QJsonValue moduloValues, jsonConfig["modulos"].toArray() ) { + QString moduloKey, moduloValue; + + moduloKey = moduloValues.toObject()["md5"].toString(); + moduloValue = moduloValues.toObject()["nome"].toString(); + + moduleMap.insert(moduloKey, moduloValue); + } + metodoDownload = jsonConfig["metodo"].toString(); + + int countExecNotFound = 0; + QMap::const_iterator mapIterator = moduleMap.constBegin(); + while (mapIterator != moduleMap.constEnd()) { + QString nomeModulo = mapIterator.value(); + QString hashModulo = mapIterator.key(); + + // Calcula hash do binario atual +#if defined(Q_OS_WIN) + fileOld = new QFile(getApplicationDirPath().append("/").append(modulo).append(".exe")); +#else + fileOld = new QFile(getApplicationDirPath().append("/").append(nomeModulo)); +#endif + if(!fileOld->exists()) { + QLogger::QLog_Error("Cacic Daemon", QString("Módulo ").append(nomeModulo).append(" não encontrado.")); + + countExecNotFound++; + if( countExecNotFound == moduleMap.size() ) { + QLogger::QLog_Error("Cacic Daemon", "Não foi possível encontrar nenhum módulo executável!"); + return; + } + continue; + } + + QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex()); + + if ( oldMd5 != hashModulo ) { + + fileOld->rename(getApplicationDirPath().append("/").append(nomeModulo), + getApplicationDirPath().append("/").append("nomeModulo").append("Old") ); + + // Download nova versão do executável + if(metodoDownload == "ftp" || metodoDownload == "") { +// OCacicComm->ftpDownload( QString("/ws/get/").append(nomeModulo) ); + } + + + fileOld->remove(); + delete fileOld; + } + mapIterator++; } //aqui irá abrir o semaforo e iniciar a coleta. diff --git a/cacic-daemon/cacicD/cacictimer.h b/cacic-daemon/cacicD/cacictimer.h index 8a882c8..0a6cf87 100644 --- a/cacic-daemon/cacicD/cacictimer.h +++ b/cacic-daemon/cacicD/cacictimer.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "ccacic.h" #include "cacic_comm.h" #include "cacic_computer.h" @@ -34,7 +35,9 @@ private: QJsonObject jsonConfig; QLogger::QLoggerManager *logManager; QString applicationDirPath; - QStringList moduleList; + QString metodoDownload; + QMap moduleMap; // key = hash md5, value = nome do modulo + private slots: void mslot(); -- libgit2 0.21.2