Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
NetworkClient.cpp
1 #include "Logger.h"
2 #include "NetworkClient.h"
3 #include <QNetworkReply>
4 #include <QNetworkRequest>
5 
6 
7 const QString SERVER_URL ("http://engaugedigitizer.net/receive_crash_report.php");
8 
9 NetworkClient::NetworkClient (QObject *parent) :
10  QNetworkAccessManager (parent)
11 {
12  connect (this, SIGNAL (finished (QNetworkReply *)), this, SLOT (slotFinished (QNetworkReply *)));
13 }
14 
15 QString NetworkClient::cleanXml (const QString &before)
16 {
17  LOG4CPP_INFO_S ((*mainCat)) << "NetworkClient::cleanXml";
18 
19  // Remove characters that are known to break the xml parsing in Document. Bad characters AFTER the
20  // CDATA will break the parsing of the CDATA, which is a very hard bug to track down, so this
21  // method should prevent that specific issue
22 
23  QString after;
24  for (int i = 0; i < before.size(); i++) {
25 
26  if (before.at (i).unicode() < 128) {
27 
28  after += before.at (i);
29  }
30  }
31 
32  return after;
33 }
34 
35 void NetworkClient::slotFinished (QNetworkReply *reply)
36 {
37  reply->deleteLater();
38 }
39 
40 void NetworkClient::uploadErrorReport (const QString &report)
41 {
42  QString reportClean = cleanXml (report);
43 
44  // Put report into byte array, which must persist until the finished signal
45  // is received according to QNetworkAccessManager::post documentation
46  QByteArray postData = reportClean.toLatin1();
47 
48  QNetworkRequest request (SERVER_URL);
49  request.setHeader (QNetworkRequest::ContentTypeHeader,
50  QVariant (QString ("text/xml")));
51  request.setHeader (QNetworkRequest::ContentLengthHeader,
52  QVariant (qulonglong (postData.size())));
53 
54  post(request,
55  postData);
56 }
void slotFinished(QNetworkReply *)
Cleanup after response is returned.
NetworkClient(QObject *parent)
Single constructor.
void uploadErrorReport(const QString &report)
Upload the error report asynchronously.