From c5bf762bc48466334309f78491bd9cf3c06c97ea Mon Sep 17 00:00:00 2001
From: deva <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(-)

(limited to 'client')

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<QSslError> &)),
-          this, SLOT(sslError(const QList<QSslError> &)));
-  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<QSslError> &errlst)
-{
-  QList<QSslError>::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 <QString>
 #include <QTcpSocket>
 #include <QDomDocument>
-#include <QHttp>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
 
 //#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<QSslError> &errlst);
-#endif
+  void replyFinished(QNetworkReply*);
 
 private:
-  volatile bool transfering;
-
   QString user;
   QString cpr;
 
-  QHttp http;
+  QNetworkAccessManager *manager;
+  QNetworkRequest request;
 
-  QByteArray buffer;
   QString sessionid;
+
+  QMap<QNetworkReply *, bool> finished;
+
+  QDomDocument makeTransfer(QDomDocument &dom, bool commit, bool lockgui);
 };
 
 #endif/*__PRACRO_NETCOM_H__*/
-- 
cgit v1.2.3