From c5bf762bc48466334309f78491bd9cf3c06c97ea Mon Sep 17 00:00:00 2001 From: deva Date: Thu, 6 May 2010 11:46:57 +0000 Subject: Dispose of old QHttp class in favor of the more recent QNetworkAccessManager class. --- client/netcom.cc | 169 +++++++++++++++++++++++-------------------------------- client/netcom.h | 23 ++++---- 2 files changed, 82 insertions(+), 110 deletions(-) diff --git a/client/netcom.cc b/client/netcom.cc index 4126b02..a8f4da2 100644 --- a/client/netcom.cc +++ b/client/netcom.cc @@ -51,55 +51,85 @@ NetCom::NetCom(QString host, quint16 port, QString user, QString cpr) this->user = user; this->cpr = cpr; - connect(&http, SIGNAL(readyRead(const QHttpResponseHeader &)), - this, SLOT(readyRead(const QHttpResponseHeader &))); - connect(&http, SIGNAL(stateChanged(int)), this, SLOT(stateChanged(int))); + // + // Setup connection + // + QUrl url; + url.setHost(host); + url.setPort(port); + url.setScheme("http"); + // url.setScheme("https"); -#ifdef USE_SSL - connect(&http, SIGNAL(sslErrors(const QList &)), - this, SLOT(sslError(const QList &))); - http.setHost(host, QHttp::ConnectionModeHttps, port); -#else - http.setHost(host, QHttp::ConnectionModeHttp, port); -#endif + request.setUrl(url); - transfering = false; + manager = new QNetworkAccessManager(this); + connect(manager, SIGNAL(finished(QNetworkReply*)), + this, SLOT(replyFinished(QNetworkReply*))); - QHttpRequestHeader h("HTTP 1.1", "/"); - http.request(h, ""); + QDomDocument doc; + makeTransfer(doc, false, true); +} - transfering = true; - buffer = ""; - do { - qApp->processEvents(QEventLoop::WaitForMoreEvents); - } while(transfering); +NetCom::~NetCom() +{ + // + // Send commit + // + QDomDocument doc; + makeTransfer(doc, true, true); - sessionid = http.lastResponse().value("SessionID"); - printf("SESSION ID: %s\n", sessionid.toStdString().c_str()); + // + // Clean up + // + delete manager; } -NetCom::~NetCom() +void NetCom::replyFinished(QNetworkReply *reply) { - QHttpRequestHeader h("HTTP 1.1", "/"); - h.setValue("SessionCommit", ""); - h.setValue("SessionID", sessionid); - http.request(h, ""); - - transfering = true; - buffer = ""; - do { - qApp->processEvents(QEventLoop::WaitForMoreEvents); - } while(transfering); + finished[reply] = true; } -QDomDocument NetCom::send(QString templ, QString macro, bool lockgui) +QDomDocument NetCom::makeTransfer(QDomDocument &doc, bool commit, bool lockgui) { + printf("\nMaking transfer:\n%s", doc.toString().toStdString().c_str()); + if(lockgui && qApp->activeWindow()) qApp->activeWindow()->setEnabled(false); if(lockgui) QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + if(sessionid != "") request.setRawHeader("SessionID", + sessionid.toStdString().c_str()); + if(commit) request.setRawHeader("SessionCommit", "yes"); + + // QNetworkReply *reply = manager->get(request); + QNetworkReply *reply = manager->put(request, doc.toByteArray()); + finished[reply] = false; + while(finished[reply] == false) { + qApp->processEvents(QEventLoop::WaitForMoreEvents); + } + finished.remove(reply); + + QDomDocument res_doc; + res_doc.setContent(reply->readAll()); + + printf("\nRecieved repons:\n%s", res_doc.toString().toStdString().c_str()); + + if(reply->hasRawHeader("SessionID")) { + sessionid = reply->rawHeader("SessionID"); + printf("SESSION ID: %s\n", sessionid.toStdString().c_str()); + } + + if(lockgui) QApplication::restoreOverrideCursor(); + if(lockgui && qApp->activeWindow()) qApp->activeWindow()->setEnabled(true); + + return res_doc; +} + +QDomDocument NetCom::send(QString templ, QString macro, bool lockgui) +{ QDomDocument doc; - QDomProcessingInstruction header = doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); + QDomProcessingInstruction header = + doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); doc.appendChild(header); QDomElement pracro_elem = doc.createElement("pracro"); @@ -112,36 +142,17 @@ QDomDocument NetCom::send(QString templ, QString macro, bool lockgui) request_elem.setAttribute("template", templ); if(macro != "") request_elem.setAttribute("macro", macro); pracro_elem.appendChild(request_elem); - - printf("\nSending request:\n%s", doc.toString().toStdString().c_str()); - QHttpRequestHeader h("HTTP 1.1", "/"); - h.setValue("SessionID", sessionid); - http.request(h, doc.toByteArray()); - - QDomDocument res_doc; - transfering = true; - buffer = ""; - do { - qApp->processEvents(QEventLoop::WaitForMoreEvents); - } while(transfering); - res_doc.setContent(buffer); - - QDomElement elem = res_doc.documentElement(); - - printf("\nRecieved request:\n%s", res_doc.toString().toStdString().c_str()); - - if(lockgui) QApplication::restoreOverrideCursor(); - if(lockgui && qApp->activeWindow()) qApp->activeWindow()->setEnabled(true); - - return res_doc; + return makeTransfer(doc, false, lockgui); } -void NetCom::send(QVector< Widget* > widgets, QString templ, QString macro, QString version) +void NetCom::send(QVector< Widget* > widgets, QString templ, + QString macro, QString version) { QDomDocument doc; - QDomProcessingInstruction header = doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); + QDomProcessingInstruction header = + doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); doc.appendChild(header); QDomElement pracro_elem = doc.createElement("pracro"); @@ -156,7 +167,8 @@ void NetCom::send(QVector< Widget* > widgets, QString templ, QString macro, QStr commit_elem.setAttribute("version", version); pracro_elem.appendChild(commit_elem); - // Iterate the different entries, and append their results to the commit string + // Iterate the different entries, and append their results to + // the commit string QVector< Widget* >::iterator i = widgets.begin(); while (i != widgets.end()) { Widget* w = *i; @@ -171,44 +183,5 @@ void NetCom::send(QVector< Widget* > widgets, QString templ, QString macro, QStr i++; } - if(qApp->activeWindow()) qApp->activeWindow()->setEnabled(false); - - printf("\nSending commit:\n%s", doc.toString().toStdString().c_str()); - - QHttpRequestHeader h("HTTP 1.1", "/"); - h.setValue("SessionID", sessionid); - http.request(h, doc.toByteArray()); - - transfering = true; - buffer = ""; - do { - qApp->processEvents(QEventLoop::WaitForMoreEvents); - } while(transfering); - - QApplication::restoreOverrideCursor(); - if(qApp->activeWindow()) qApp->activeWindow()->setEnabled(true); -} - -void NetCom::readyRead(const QHttpResponseHeader &) -{ - // printf("STATE: readyRead\n"); - buffer += http.readAll(); -} - -void NetCom::stateChanged(int state) -{ - // printf("STATE: %d\n", state); - if(transfering && state == QHttp::Connected) transfering = false; -} - -#ifdef USE_SSL -void NetCom::sslError(const QList &errlst) -{ - QList::const_iterator i = errlst.begin(); - while(i != errlst.end()) { - QMessageBox::warning(qApp->activeWindow(), "SSL Error", i->errorString()); - i++; - } - http.ignoreSslErrors(); + makeTransfer(doc, false, true); } -#endif diff --git a/client/netcom.h b/client/netcom.h index 718d5a6..32f5982 100644 --- a/client/netcom.h +++ b/client/netcom.h @@ -31,7 +31,8 @@ #include #include #include -#include +#include +#include //#define USE_SSL @@ -45,26 +46,24 @@ public: ~NetCom(); QDomDocument send(QString templ, QString macro = "", bool lockgui = true); - void send(QVector< Widget* > widgets, QString templ, QString macro, QString version); + void send(QVector< Widget* > widgets, QString templ, QString macro, + QString version); public slots: - void stateChanged(int state); - void readyRead(const QHttpResponseHeader &resp); - -#ifdef USE_SSL - void sslError(const QList &errlst); -#endif + void replyFinished(QNetworkReply*); private: - volatile bool transfering; - QString user; QString cpr; - QHttp http; + QNetworkAccessManager *manager; + QNetworkRequest request; - QByteArray buffer; QString sessionid; + + QMap finished; + + QDomDocument makeTransfer(QDomDocument &dom, bool commit, bool lockgui); }; #endif/*__PRACRO_NETCOM_H__*/ -- cgit v1.2.3