Commit cb33ac1f3ebc8011fe178439eb93e2a8230457d1
1 parent
61632edb
Exists in
master
Métodos de download de arquivos por ftp e http terminados.
Showing
5 changed files
with
309 additions
and
222 deletions
Show diff stats
cacic-daemon/cacicD/cacicD.pro
| @@ -24,6 +24,7 @@ TEMPLATE = app | @@ -24,6 +24,7 @@ TEMPLATE = app | ||
| 24 | SOURCES += main.cpp \ | 24 | SOURCES += main.cpp \ |
| 25 | cacicd.cpp \ | 25 | cacicd.cpp \ |
| 26 | cacictimer.cpp \ | 26 | cacictimer.cpp \ |
| 27 | + ../../src/cacic_comm.cpp \ | ||
| 27 | ../../src/ccacic.cpp \ | 28 | ../../src/ccacic.cpp \ |
| 28 | ../../src/wmi.cpp \ | 29 | ../../src/wmi.cpp \ |
| 29 | ../../src/cacic_computer.cpp \ | 30 | ../../src/cacic_computer.cpp \ |
cacic-teste/cacic-teste.pro
| @@ -23,6 +23,7 @@ SOURCES += \ | @@ -23,6 +23,7 @@ SOURCES += \ | ||
| 23 | testcacic.cpp \ | 23 | testcacic.cpp \ |
| 24 | ../src/ccacic.cpp \ | 24 | ../src/ccacic.cpp \ |
| 25 | ../src/cacic_computer.cpp \ | 25 | ../src/cacic_computer.cpp \ |
| 26 | + ../src/cacic_comm.cpp \ | ||
| 26 | ../src/operatingsystem.cpp \ | 27 | ../src/operatingsystem.cpp \ |
| 27 | ../src/cacic_software.cpp \ | 28 | ../src/cacic_software.cpp \ |
| 28 | ../src/cacic_hardware.cpp \ | 29 | ../src/cacic_hardware.cpp \ |
cacic-teste/testcacic.cpp
| @@ -323,9 +323,9 @@ void CTestCacic::testFtpDownload() | @@ -323,9 +323,9 @@ void CTestCacic::testFtpDownload() | ||
| 323 | OCacicComm->ftpDownload("ftp://ftp.unicamp.br", "/pub/gnu/Licenses/gpl-2.0.txt"); | 323 | OCacicComm->ftpDownload("ftp://ftp.unicamp.br", "/pub/gnu/Licenses/gpl-2.0.txt"); |
| 324 | QFile downloaded("gpl-2.0.txt"); | 324 | QFile downloaded("gpl-2.0.txt"); |
| 325 | 325 | ||
| 326 | - QVERIFY( !downloaded.open(QIODevice::ReadOnly) && | ||
| 327 | - downloaded.exists() && | ||
| 328 | - downloaded.readAll() != "" ); | 326 | + QVERIFY( downloaded.open(QIODevice::ReadOnly) ); |
| 327 | + QVERIFY( downloaded.exists() ); | ||
| 328 | + QVERIFY( downloaded.readAll() != "" ); | ||
| 329 | } | 329 | } |
| 330 | 330 | ||
| 331 | void CTestCacic::cleanupTestCase() | 331 | void CTestCacic::cleanupTestCase() |
| @@ -0,0 +1,273 @@ | @@ -0,0 +1,273 @@ | ||
| 1 | +#include "cacic_comm.h" | ||
| 2 | + | ||
| 3 | +CacicComm::CacicComm () | ||
| 4 | +{ | ||
| 5 | +} | ||
| 6 | + | ||
| 7 | +CacicComm::CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher, | ||
| 8 | + QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName, | ||
| 9 | + QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser, | ||
| 10 | + QString so, QString cacicVersion, QString gercolsVersion) | ||
| 11 | +{ | ||
| 12 | + this->setUrlGerente(urlGerente); | ||
| 13 | + params.addQueryItem("OperatingSystem", operatingSystem); | ||
| 14 | + params.addQueryItem("ComputerSystem",computerSystem); | ||
| 15 | + params.addQueryItem("cs_cipher",csCipher); | ||
| 16 | + params.addQueryItem("cs_debug",csDebug); | ||
| 17 | + params.addQueryItem("cs_compress",csCompress); | ||
| 18 | + params.addQueryItem("HTTP_USER_AGENT",httpUserAgent); | ||
| 19 | + params.addQueryItem("ModuleFolderName",moduleFolderName); | ||
| 20 | + params.addQueryItem("ModuleProgramName",moduleProgramName); | ||
| 21 | + params.addQueryItem("NetworkAdapterConfiguration",networkConfiguration); | ||
| 22 | + params.addQueryItem("PHP_AUTH_PW",phpAuthPw); | ||
| 23 | + params.addQueryItem("PHP_AUTH_USER",phpAuthUser); | ||
| 24 | + params.addQueryItem("te_so",so); | ||
| 25 | + params.addQueryItem("te_versao_cacic",cacicVersion); | ||
| 26 | + params.addQueryItem("te_versao_gercols",gercolsVersion); | ||
| 27 | + | ||
| 28 | + | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +QJsonObject CacicComm::comm(QString route, bool *ok, const QJsonObject &json, bool isSsl) | ||
| 32 | +{ | ||
| 33 | + *ok = false; | ||
| 34 | + QByteArray data; | ||
| 35 | + QNetworkRequest req; | ||
| 36 | + QUrl url; | ||
| 37 | + QString strReply; | ||
| 38 | + QJsonObject jsonObj; | ||
| 39 | + if (isSsl){ | ||
| 40 | + url = urlSsl.isEmpty() ? "https://" + this->urlGerente + route : this->urlSsl + route; | ||
| 41 | + if (!url.isValid()){ | ||
| 42 | + jsonObj["error"] = QVariant("Invalid Url").toJsonValue(); | ||
| 43 | + return jsonObj; | ||
| 44 | + } | ||
| 45 | + req.setSslConfiguration(QSslConfiguration::defaultConfiguration()); | ||
| 46 | + } else | ||
| 47 | + url = "http://" + urlGerente + route; | ||
| 48 | + req.setUrl(url); | ||
| 49 | + req.setHeader(QNetworkRequest::LocationHeader, "Cacic Agente"); | ||
| 50 | + if (json.empty()){ | ||
| 51 | + //se não for passado QJson, será mandado os valores do get/test antigo. (Será retirado depois) | ||
| 52 | + req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); | ||
| 53 | + data.append(params.toString()); | ||
| 54 | + } else { | ||
| 55 | + // Add JSON | ||
| 56 | + QJsonDocument d(json); | ||
| 57 | + data.append(d.toJson()); | ||
| 58 | + req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); | ||
| 59 | + } | ||
| 60 | + QEventLoop eventLoop; | ||
| 61 | + QNetworkAccessManager mgr; | ||
| 62 | + QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); | ||
| 63 | + | ||
| 64 | + QNetworkReply *reply = mgr.post(req, data); | ||
| 65 | + if (!reply->sslConfiguration().isNull()){ | ||
| 66 | + reply->ignoreSslErrors(); | ||
| 67 | + } | ||
| 68 | + eventLoop.exec(); // sai do looping chamando o "finished()". | ||
| 69 | + | ||
| 70 | + jsonObj.insert("codestatus", QJsonValue::fromVariant(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute))); | ||
| 71 | + | ||
| 72 | + if (reply->error() == QNetworkReply::NoError) { | ||
| 73 | + //se não houver erro, grava o retorno; | ||
| 74 | + QVariant replyVariant = reply->readAll(); | ||
| 75 | + QJsonDocument replyDocument = QJsonDocument::fromJson(replyVariant.toByteArray()); | ||
| 76 | + jsonObj["reply"] = (!replyDocument.isNull()) ? | ||
| 77 | + replyDocument.object() : | ||
| 78 | + QJsonValue::fromVariant(replyVariant.toString()); | ||
| 79 | + *ok = true; | ||
| 80 | + delete reply; | ||
| 81 | + } else { | ||
| 82 | + strReply = reply->errorString(); | ||
| 83 | + jsonObj.insert("error", QJsonValue::fromVariant(strReply)); | ||
| 84 | + delete reply; | ||
| 85 | + } | ||
| 86 | + return jsonObj; | ||
| 87 | +} | ||
| 88 | + | ||
| 89 | + | ||
| 90 | +/* commStatus | ||
| 91 | + * execulta um teste do tipo GET na urlGerente; | ||
| 92 | + * @return retorna o resultado da conexão HTTP: | ||
| 93 | + * exemplo: 200 OK | ||
| 94 | + */ | ||
| 95 | +bool CacicComm::commStatus(){ | ||
| 96 | + // cria um event-loop temporario | ||
| 97 | + QEventLoop eventLoop; | ||
| 98 | + // "quit()" o event-loop, when the network request "finished()" | ||
| 99 | + QNetworkAccessManager mgr; | ||
| 100 | + QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); | ||
| 101 | + // a requisição HTTP | ||
| 102 | + QUrl url = "http://" + urlGerente; | ||
| 103 | + QNetworkRequest req( url ); | ||
| 104 | + req.setHeader(QNetworkRequest::LocationHeader, "Cacic Agente"); | ||
| 105 | + QNetworkReply *reply = mgr.get(req); | ||
| 106 | + eventLoop.exec(); // sai do looping chamando o "finished()". | ||
| 107 | + | ||
| 108 | + QString reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString(); | ||
| 109 | + if (reply->attribute( QNetworkRequest::HttpStatusCodeAttribute ).isValid()){ | ||
| 110 | +// qDebug() << "Status:" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() << reason; | ||
| 111 | + return true; | ||
| 112 | + }else{ | ||
| 113 | + reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString(); | ||
| 114 | +// qDebug() << "Error:" << reason; | ||
| 115 | + return false; | ||
| 116 | + } | ||
| 117 | +} | ||
| 118 | + | ||
| 119 | +/* login | ||
| 120 | + * realiza login com usuario e senha | ||
| 121 | + * @return retorna json com sessão e chave de criptografia | ||
| 122 | + */ | ||
| 123 | +QJsonObject CacicComm::login(bool *ok) { | ||
| 124 | + *ok = false; | ||
| 125 | + // Cria dados de login | ||
| 126 | + QVariantMap login; | ||
| 127 | + login["user"] = this->usuario; | ||
| 128 | + login["password"] = this->password; | ||
| 129 | + // Cria conexão e retorna Json da sessão | ||
| 130 | + QJsonObject retorno = this->comm("/ws/neo/getLogin", ok, QJsonObject::fromVariantMap(login), true); | ||
| 131 | + if (*ok) | ||
| 132 | + this->session = retorno["reply"].toObject()["session"].toString(); | ||
| 133 | + return retorno; | ||
| 134 | +} | ||
| 135 | + | ||
| 136 | +/* fileDownload( QString path ) | ||
| 137 | + * | ||
| 138 | + * Faz o download de um arquivo usando o protocolo mode | ||
| 139 | + * a partir da url do gerente e do caminho até o arquivo. | ||
| 140 | + */ | ||
| 141 | +bool CacicComm::fileDownload(const QString &mode, const QString &path){ | ||
| 142 | + QEventLoop eventLoop; | ||
| 143 | + QNetworkAccessManager manager; | ||
| 144 | + QNetworkRequest request; | ||
| 145 | + QNetworkReply *reply; | ||
| 146 | + | ||
| 147 | + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileDownloadFinished(QNetworkReply*)) ); | ||
| 148 | + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()) ); | ||
| 149 | + | ||
| 150 | + QStringList splitPath = path.split("/"); | ||
| 151 | + | ||
| 152 | + fileHandler = new QFile(splitPath[splitPath.size() - 1]); | ||
| 153 | + if( !fileHandler->open(QIODevice::WriteOnly) ) { | ||
| 154 | + qDebug() << "ftpDownload: fileHandler nâo pode abrir arquivo."; | ||
| 155 | + return false; | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + QUrl url(urlGerente); | ||
| 159 | + url.setScheme(mode); | ||
| 160 | + url.setPath(path); | ||
| 161 | + request.setUrl(url); | ||
| 162 | + | ||
| 163 | + reply = manager.get(request); | ||
| 164 | + | ||
| 165 | + eventLoop.exec(); | ||
| 166 | + | ||
| 167 | + delete fileHandler; | ||
| 168 | + delete reply; | ||
| 169 | + | ||
| 170 | + return true; | ||
| 171 | +} | ||
| 172 | + | ||
| 173 | +/* fileDownload( QString urlServer, QString path ) | ||
| 174 | + * | ||
| 175 | + * Faz o download de um arquivo usando o protocolo mode | ||
| 176 | + * a partir da url recebida e do caminho até o arquivo. | ||
| 177 | + */ | ||
| 178 | +bool CacicComm::fileDownload(const QString &mode, const QString &urlServer, const QString &path){ | ||
| 179 | + QEventLoop eventLoop; | ||
| 180 | + QNetworkAccessManager manager; | ||
| 181 | + QNetworkRequest request; | ||
| 182 | + QNetworkReply *reply; | ||
| 183 | + | ||
| 184 | + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileDownloadFinished(QNetworkReply*)) ); | ||
| 185 | + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()) ); | ||
| 186 | + | ||
| 187 | + QStringList splitPath = path.split("/"); | ||
| 188 | + | ||
| 189 | + fileHandler = new QFile(splitPath[splitPath.size() - 1]); | ||
| 190 | + if( !fileHandler->open(QIODevice::WriteOnly) ) { | ||
| 191 | + qDebug() << "ftpDownload: fileHandler nâo pode abrir arquivo."; | ||
| 192 | + return false; | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + QUrl url(urlServer); | ||
| 196 | + url.setScheme(mode); | ||
| 197 | + url.setPath(path); | ||
| 198 | + request.setUrl(url); | ||
| 199 | + | ||
| 200 | + reply = manager.get(request); | ||
| 201 | + | ||
| 202 | + eventLoop.exec(); | ||
| 203 | + | ||
| 204 | + delete fileHandler; | ||
| 205 | + delete reply; | ||
| 206 | + | ||
| 207 | + return true; | ||
| 208 | +} | ||
| 209 | + | ||
| 210 | +bool CacicComm::ftpDownload( const QString &path ){ | ||
| 211 | + return fileDownload("ftp", path); | ||
| 212 | +} | ||
| 213 | + | ||
| 214 | +bool CacicComm::ftpDownload( const QString &urlServer, const QString &path ){ | ||
| 215 | + return fileDownload("ftp", urlServer, path); | ||
| 216 | +} | ||
| 217 | + | ||
| 218 | +bool CacicComm::httpDownload( const QString &path ){ | ||
| 219 | + return fileDownload("http", path); | ||
| 220 | +} | ||
| 221 | + | ||
| 222 | +bool CacicComm::httpDownload( const QString &urlServer, const QString &path ){ | ||
| 223 | + return fileDownload("http", urlServer, path); | ||
| 224 | +} | ||
| 225 | + | ||
| 226 | +QString CacicComm::getUrlSsl (){ | ||
| 227 | + return this->urlSsl; | ||
| 228 | +} | ||
| 229 | + | ||
| 230 | +void CacicComm::setUrlSsl(QString value){ | ||
| 231 | + this->urlSsl = value; | ||
| 232 | +} | ||
| 233 | + | ||
| 234 | +QString CacicComm::getUrlGerente (){ | ||
| 235 | + return this->urlGerente; | ||
| 236 | +} | ||
| 237 | + | ||
| 238 | +void CacicComm::setUrlGerente(QString value){ | ||
| 239 | + if (value.contains("://", Qt::CaseInsensitive)){ | ||
| 240 | + value = value.mid(value.indexOf("://") + 3); | ||
| 241 | + } | ||
| 242 | + if (value.endsWith("/")){ | ||
| 243 | + value.remove(value.size()-1, 1); | ||
| 244 | + } | ||
| 245 | + this->urlGerente = value; | ||
| 246 | +} | ||
| 247 | + | ||
| 248 | +QString CacicComm::getPassword() | ||
| 249 | +{ | ||
| 250 | + return this->password; | ||
| 251 | +} | ||
| 252 | + | ||
| 253 | +void CacicComm::setPassword(QString value) | ||
| 254 | +{ | ||
| 255 | + this->password = value; | ||
| 256 | +} | ||
| 257 | +QString CacicComm::getUsuario() | ||
| 258 | +{ | ||
| 259 | + return this->usuario; | ||
| 260 | +} | ||
| 261 | + | ||
| 262 | +void CacicComm::setUsuario(QString value) | ||
| 263 | +{ | ||
| 264 | + this->usuario = value; | ||
| 265 | +} | ||
| 266 | + | ||
| 267 | +void CacicComm::fileDownloadFinished(QNetworkReply* reply) | ||
| 268 | +{ | ||
| 269 | + QTextStream out(fileHandler); | ||
| 270 | + out << reply->readAll(); | ||
| 271 | + fileHandler->close(); | ||
| 272 | + reply->close(); | ||
| 273 | +} |
src/cacic_comm.h
| @@ -16,240 +16,52 @@ | @@ -16,240 +16,52 @@ | ||
| 16 | class CacicComm : public QObject{ | 16 | class CacicComm : public QObject{ |
| 17 | 17 | ||
| 18 | Q_OBJECT | 18 | Q_OBJECT |
| 19 | -private: | ||
| 20 | - QFile *fileHandler; | ||
| 21 | - QUrlQuery params; | ||
| 22 | - QString urlGerente; | ||
| 23 | - QString urlSsl; | ||
| 24 | - QString usuario; | ||
| 25 | - QString password; | ||
| 26 | - QString session; | ||
| 27 | 19 | ||
| 28 | public: | 20 | public: |
| 29 | - CacicComm (){ | ||
| 30 | - } | ||
| 31 | 21 | ||
| 22 | + CacicComm (); | ||
| 32 | CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher, | 23 | CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher, |
| 33 | QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName, | 24 | QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName, |
| 34 | QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser, | 25 | QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser, |
| 35 | - QString so, QString cacicVersion, QString gercolsVersion) | ||
| 36 | - { | ||
| 37 | - this->setUrlGerente(urlGerente); | ||
| 38 | - params.addQueryItem("OperatingSystem", operatingSystem); | ||
| 39 | - params.addQueryItem("ComputerSystem",computerSystem); | ||
| 40 | - params.addQueryItem("cs_cipher",csCipher); | ||
| 41 | - params.addQueryItem("cs_debug",csDebug); | ||
| 42 | - params.addQueryItem("cs_compress",csCompress); | ||
| 43 | - params.addQueryItem("HTTP_USER_AGENT",httpUserAgent); | ||
| 44 | - params.addQueryItem("ModuleFolderName",moduleFolderName); | ||
| 45 | - params.addQueryItem("ModuleProgramName",moduleProgramName); | ||
| 46 | - params.addQueryItem("NetworkAdapterConfiguration",networkConfiguration); | ||
| 47 | - params.addQueryItem("PHP_AUTH_PW",phpAuthPw); | ||
| 48 | - params.addQueryItem("PHP_AUTH_USER",phpAuthUser); | ||
| 49 | - params.addQueryItem("te_so",so); | ||
| 50 | - params.addQueryItem("te_versao_cacic",cacicVersion); | ||
| 51 | - params.addQueryItem("te_versao_gercols",gercolsVersion); | ||
| 52 | - | ||
| 53 | - | ||
| 54 | - } | ||
| 55 | - | ||
| 56 | - QJsonObject comm(QString route, bool *ok, const QJsonObject &json = QJsonObject(), bool isSsl = false) | ||
| 57 | - { | ||
| 58 | - *ok = false; | ||
| 59 | - QByteArray data; | ||
| 60 | - QNetworkRequest req; | ||
| 61 | - QUrl url; | ||
| 62 | - QString strReply; | ||
| 63 | - QJsonObject jsonObj; | ||
| 64 | - if (isSsl){ | ||
| 65 | - url = urlSsl.isEmpty() ? "https://" + this->urlGerente + route : this->urlSsl + route; | ||
| 66 | - if (!url.isValid()){ | ||
| 67 | - jsonObj["error"] = QVariant("Invalid Url").toJsonValue(); | ||
| 68 | - return jsonObj; | ||
| 69 | - } | ||
| 70 | - req.setSslConfiguration(QSslConfiguration::defaultConfiguration()); | ||
| 71 | - } else | ||
| 72 | - url = "http://" + urlGerente + route; | ||
| 73 | - req.setUrl(url); | ||
| 74 | - req.setHeader(QNetworkRequest::LocationHeader, "Cacic Agente"); | ||
| 75 | - if (json.empty()){ | ||
| 76 | - //se não for passado QJson, será mandado os valores do get/test antigo. (Será retirado depois) | ||
| 77 | - req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); | ||
| 78 | - data.append(params.toString()); | ||
| 79 | - } else { | ||
| 80 | - // Add JSON | ||
| 81 | - QJsonDocument d(json); | ||
| 82 | - data.append(d.toJson()); | ||
| 83 | - req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); | ||
| 84 | - } | ||
| 85 | - QEventLoop eventLoop; | ||
| 86 | - QNetworkAccessManager mgr; | ||
| 87 | - QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); | ||
| 88 | - | ||
| 89 | - QNetworkReply *reply = mgr.post(req, data); | ||
| 90 | - if (!reply->sslConfiguration().isNull()){ | ||
| 91 | - reply->ignoreSslErrors(); | ||
| 92 | - } | ||
| 93 | - eventLoop.exec(); // sai do looping chamando o "finished()". | ||
| 94 | - | ||
| 95 | - jsonObj.insert("codestatus", QJsonValue::fromVariant(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute))); | ||
| 96 | - | ||
| 97 | - if (reply->error() == QNetworkReply::NoError) { | ||
| 98 | - //se não houver erro, grava o retorno; | ||
| 99 | - QVariant replyVariant = reply->readAll(); | ||
| 100 | - QJsonDocument replyDocument = QJsonDocument::fromJson(replyVariant.toByteArray()); | ||
| 101 | - jsonObj["reply"] = (!replyDocument.isNull()) ? | ||
| 102 | - replyDocument.object() : | ||
| 103 | - QJsonValue::fromVariant(replyVariant.toString()); | ||
| 104 | - *ok = true; | ||
| 105 | - delete reply; | ||
| 106 | - } else { | ||
| 107 | - strReply = reply->errorString(); | ||
| 108 | - jsonObj.insert("error", QJsonValue::fromVariant(strReply)); | ||
| 109 | - delete reply; | ||
| 110 | - } | ||
| 111 | - return jsonObj; | ||
| 112 | - } | ||
| 113 | - | ||
| 114 | - | ||
| 115 | - /* commStatus | ||
| 116 | - * execulta um teste do tipo GET na urlGerente; | ||
| 117 | - * @return retorna o resultado da conexão HTTP: | ||
| 118 | - * exemplo: 200 OK | ||
| 119 | - */ | ||
| 120 | - bool commStatus(){ | ||
| 121 | - // cria um event-loop temporario | ||
| 122 | - QEventLoop eventLoop; | ||
| 123 | - // "quit()" o event-loop, when the network request "finished()" | ||
| 124 | - QNetworkAccessManager mgr; | ||
| 125 | - QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); | ||
| 126 | - // a requisição HTTP | ||
| 127 | - QUrl url = "http://" + urlGerente; | ||
| 128 | - QNetworkRequest req( url ); | ||
| 129 | - req.setHeader(QNetworkRequest::LocationHeader, "Cacic Agente"); | ||
| 130 | - QNetworkReply *reply = mgr.get(req); | ||
| 131 | - eventLoop.exec(); // sai do looping chamando o "finished()". | ||
| 132 | - | ||
| 133 | - QString reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString(); | ||
| 134 | - if (reply->attribute( QNetworkRequest::HttpStatusCodeAttribute ).isValid()){ | ||
| 135 | -// qDebug() << "Status:" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() << reason; | ||
| 136 | - return true; | ||
| 137 | - }else{ | ||
| 138 | - reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString(); | ||
| 139 | -// qDebug() << "Error:" << reason; | ||
| 140 | - return false; | ||
| 141 | - } | ||
| 142 | - } | ||
| 143 | - | ||
| 144 | - /* login | ||
| 145 | - * realiza login com usuario e senha | ||
| 146 | - * @return retorna json com sessão e chave de criptografia | ||
| 147 | - */ | ||
| 148 | - QJsonObject login(bool *ok) { | ||
| 149 | - *ok = false; | ||
| 150 | - // Cria dados de login | ||
| 151 | - QVariantMap login; | ||
| 152 | - login["user"] = this->usuario; | ||
| 153 | - login["password"] = this->password; | ||
| 154 | - // Cria conexão e retorna Json da sessão | ||
| 155 | - QJsonObject retorno = this->comm("/ws/neo/getLogin", ok, QJsonObject::fromVariantMap(login), true); | ||
| 156 | - if (*ok) | ||
| 157 | - this->session = retorno["reply"].toObject()["session"].toString(); | ||
| 158 | - return retorno; | ||
| 159 | - } | ||
| 160 | - | ||
| 161 | - bool ftpDownload(QString path){ | ||
| 162 | - QUrl url(urlGerente); | ||
| 163 | - url.setScheme("ftp"); | ||
| 164 | - url.setPath(path); | ||
| 165 | - | ||
| 166 | - return false; | ||
| 167 | - } | ||
| 168 | - | ||
| 169 | - bool ftpDownload(QString urlServer, QString path){ | ||
| 170 | - QNetworkAccessManager manager; | ||
| 171 | - QNetworkRequest req; | ||
| 172 | - QNetworkReply *reply; | 26 | + QString so, QString cacicVersion, QString gercolsVersion); |
| 27 | + QJsonObject comm(QString route, bool *ok, const QJsonObject &json = QJsonObject(), bool isSsl = false); | ||
| 28 | + bool commStatus(); | ||
| 29 | + QJsonObject login(bool *ok); | ||
| 30 | + bool ftpDownload(const QString &path); | ||
| 31 | + bool ftpDownload(const QString &urlServer, const QString &path); | ||
| 32 | + bool httpDownload(const QString &path); | ||
| 33 | + bool httpDownload(const QString &urlServer, const QString &path); | ||
| 34 | + QString getUrlSsl (); | ||
| 35 | + void setUrlSsl(QString value); | ||
| 36 | + QString getUrlGerente (); | ||
| 37 | + void setUrlGerente(QString value); | ||
| 38 | + QString getPassword(); | ||
| 39 | + void setPassword(QString value); | ||
| 40 | + QString getUsuario(); | ||
| 41 | + void setUsuario(QString value); | ||
| 173 | 42 | ||
| 174 | - QStringList splitPath = path.split("/"); | ||
| 175 | 43 | ||
| 176 | - fileHandler = new QFile(splitPath[splitPath.size() - 1]); | ||
| 177 | - if( !fileHandler->open(QIODevice::WriteOnly) ) { | ||
| 178 | - return false; | ||
| 179 | - } | ||
| 180 | 44 | ||
| 181 | - QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(ftpDownloadFinished(QNetworkReply*)) ); | ||
| 182 | -// QObject::connect(reply, SIGNAL(finished()), this, SIGNAL(finished(reply)) ); | ||
| 183 | -// QObject::connect(this, SIGNAL(finished(reply)), this, SLOT(ftpDownloadFinished(reply)) ); | ||
| 184 | - | ||
| 185 | - QUrl url(urlServer); | ||
| 186 | - url.setScheme("ftp"); | ||
| 187 | - url.setPath(path); | ||
| 188 | - req.setUrl(url); | ||
| 189 | - | ||
| 190 | - reply = manager.get(req); | ||
| 191 | - | ||
| 192 | - return true; | ||
| 193 | - } | ||
| 194 | - | ||
| 195 | - bool httpDownload( QString urlServer, QString path ){ | ||
| 196 | - return false; | ||
| 197 | - } | ||
| 198 | - | ||
| 199 | - QString getUrlSsl (){ | ||
| 200 | - return this->urlSsl; | ||
| 201 | - } | ||
| 202 | - | ||
| 203 | - void setUrlSsl(QString value){ | ||
| 204 | - this->urlSsl = value; | ||
| 205 | - } | ||
| 206 | - | ||
| 207 | - QString getUrlGerente (){ | ||
| 208 | - return this->urlGerente; | ||
| 209 | - } | ||
| 210 | - | ||
| 211 | - void setUrlGerente(QString value){ | ||
| 212 | - if (value.contains("://", Qt::CaseInsensitive)){ | ||
| 213 | - value = value.mid(value.indexOf("://") + 3); | ||
| 214 | - } | ||
| 215 | - if (value.endsWith("/")){ | ||
| 216 | - value.remove(value.size()-1, 1); | ||
| 217 | - } | ||
| 218 | - this->urlGerente = value; | ||
| 219 | - } | ||
| 220 | - | ||
| 221 | - QString getPassword() | ||
| 222 | - { | ||
| 223 | - return this->password; | ||
| 224 | - } | 45 | +signals: |
| 46 | +// void finished(QNetworkReply* reply); | ||
| 225 | 47 | ||
| 226 | - void setPassword(QString value) | ||
| 227 | - { | ||
| 228 | - this->password = value; | ||
| 229 | - } | ||
| 230 | - QString getUsuario() | ||
| 231 | - { | ||
| 232 | - return this->usuario; | ||
| 233 | - } | 48 | +private slots: |
| 234 | 49 | ||
| 235 | - void setUsuario(QString value) | ||
| 236 | - { | ||
| 237 | - this->usuario = value; | ||
| 238 | - } | 50 | + void fileDownloadFinished(QNetworkReply* reply); |
| 239 | 51 | ||
| 52 | +private: | ||
| 240 | 53 | ||
| 241 | -signals: | ||
| 242 | - void finished(QNetworkReply* reply); | 54 | + bool fileDownload(const QString &mode, const QString &path); |
| 55 | + bool fileDownload(const QString &mode, const QString &urlServer, const QString &path); | ||
| 243 | 56 | ||
| 244 | -private slots: | 57 | + QUrlQuery params; |
| 58 | + QString urlGerente; | ||
| 59 | + QString urlSsl; | ||
| 60 | + QString usuario; | ||
| 61 | + QString password; | ||
| 62 | + QString session; | ||
| 245 | 63 | ||
| 246 | - void ftpDownloadFinished(QNetworkReply* reply) | ||
| 247 | - { | ||
| 248 | - qDebug() << "Entrou no SLOT."; | 64 | + QFile *fileHandler; |
| 249 | 65 | ||
| 250 | - QTextStream out(fileHandler); | ||
| 251 | - out << reply->readAll(); | ||
| 252 | - fileHandler->close(); | ||
| 253 | - } | ||
| 254 | }; | 66 | }; |
| 255 | #endif // CACIC_COMM_H | 67 | #endif // CACIC_COMM_H |