[X2Go-Commits] [x2goclient] 02/02: Switch to QNetworkAccessManager. Appropriately set content type header to "application/x-www-form-urlencoded" for HTTP post requests. (Fixes: #440, #138).
git-admin at x2go.org
git-admin at x2go.org
Mon Mar 3 11:56:07 CET 2014
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository x2goclient.
commit 19fe7875e2b8203780340272dc83189e9b8e470c
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date: Mon Mar 3 11:55:44 2014 +0100
Switch to QNetworkAccessManager. Appropriately set content type header to "application/x-www-form-urlencoded" for HTTP post requests. (Fixes: #440, #138).
---
debian/changelog | 6 +++
httpbrokerclient.cpp | 113 +++++++++++++++++++++++++-------------------------
httpbrokerclient.h | 23 +++++-----
3 files changed, 76 insertions(+), 66 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 42c5799..daec032 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -14,6 +14,12 @@ x2goclient (4.0.2.0-0x2go1) UNRELEASED; urgency=low
from terminal on linux and mac.
- If no user in session config, display system username in pass form.
+ [ Josh Lukens ]
+ * New upstream version (4.0.2.0):
+ - Switch to QNetworkAccessManager. Appropriately set content type
+ header to "application/x-www-form-urlencoded" for HTTP post
+ requests. (Fixes: #440, #138).
+
[ Mike Gabriel ]
* debian/control:
+ Build-depend on libssh-dev (>= 0.5.4-2).
diff --git a/httpbrokerclient.cpp b/httpbrokerclient.cpp
index 4ca8e5d..fca59b4 100644
--- a/httpbrokerclient.cpp
+++ b/httpbrokerclient.cpp
@@ -16,8 +16,11 @@
***************************************************************************/
#include "httpbrokerclient.h"
+#include <QNetworkAccessManager>
#include <QUrl>
-#include <QHttp>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+#include <QUuid>
#include <QTextStream>
#include <QFile>
#include <QDir>
@@ -34,6 +37,7 @@
#include <QTemporaryFile>
#include <QInputDialog>
+
HttpBrokerClient::HttpBrokerClient ( ONMainWindow* wnd, ConfigFile* cfg )
{
config=cfg;
@@ -56,30 +60,19 @@ HttpBrokerClient::HttpBrokerClient ( ONMainWindow* wnd, ConfigFile* cfg )
{
sshBroker=false;
- http=new QHttp ( this );
+ if ((config->brokerCaCertFile.length() >0) && (QFile::exists(config->brokerCaCertFile))) {
+ QSslSocket::addDefaultCaCertificates(config->brokerCaCertFile, QSsl::Pem);
+ x2goDebug<<"Custom CA certificate file loaded into HTTPS broker client: "<<config->brokerCaCertFile;
+ }
- if ( config->brokerurl.indexOf ( "https://" ) ==0 ) {
- if ((config->brokerCaCertFile.length() >0) && (QFile::exists(config->brokerCaCertFile))) {
+ http=new QNetworkAccessManager ( this );
+ x2goDebug<<"Setting up connection to broker: "<<config->brokerurl;
- sslSocket = new QSslSocket(this);
- connect ( sslSocket, SIGNAL ( sslErrors ( const QList<QSslError>& ) ),this,
- SLOT ( slotSslErrors ( const QList<QSslError>& ) ) );
- http->setSocket(sslSocket);
- sslSocket->addCaCertificates(config->brokerCaCertFile, QSsl::Pem);
- x2goDebug<<"Custom CA certificate file loaded into HTTPS broker client: "<<config->brokerCaCertFile;
+ connect ( http, SIGNAL ( sslErrors ( QNetworkReply*, const QList<QSslError>& ) ),this,
+ SLOT ( slotSslErrors ( QNetworkReply*, const QList<QSslError>& ) ) );
- } else {
- connect ( http, SIGNAL ( sslErrors ( const QList<QSslError>& ) ),this,
- SLOT ( slotSslErrors ( const QList<QSslError>& ) ) );
- }
- http->setHost ( lurl.host(),QHttp::ConnectionModeHttps,
- lurl.port ( 443 ) );
- } else {
- http->setHost ( lurl.host(),QHttp::ConnectionModeHttp,
- lurl.port ( 80 ) );
- }
- connect ( http,SIGNAL ( requestFinished ( int,bool ) ),this,
- SLOT ( slotRequestFinished ( int,bool ) ) );
+ connect ( http,SIGNAL ( finished (QNetworkReply*) ),this,
+ SLOT ( slotRequestFinished (QNetworkReply*) ) );
}
}
@@ -248,6 +241,7 @@ void HttpBrokerClient::slotSshUserAuthError(QString error)
void HttpBrokerClient::getUserSessions()
{
QString brokerUser=config->brokerUser;
+ x2goDebug<<"called getUserSessions: brokeruser: "<<brokerUser<<" authid: "<<config->brokerUserId;
if(mainWindow->getUsePGPCard())
brokerUser=mainWindow->getCardLogin();
config->sessiondata=QString::null;
@@ -259,10 +253,11 @@ void HttpBrokerClient::getUserSessions()
"user="<<brokerUser<<"&"<<
"password="<<config->brokerPass<<"&"<<
"authid="<<config->brokerUserId;
- QUrl lurl ( config->brokerurl );
- httpSessionAnswer.close();
- httpSessionAnswer.setData ( 0,0 );
- sessionsRequest=http->post ( lurl.path(),req.toUtf8(),&httpSessionAnswer );
+
+ x2goDebug << "sending request: "<< req.toUtf8();
+ QNetworkRequest request(QUrl(config->brokerurl));
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
+ sessionsRequest=http->post (request, req.toUtf8() );
}
else
{
@@ -283,6 +278,7 @@ void HttpBrokerClient::getUserSessions()
void HttpBrokerClient::selectUserSession(const QString& session)
{
+ x2goDebug<<"called selectUserSessions";
QString brokerUser=config->brokerUser;
if(mainWindow->getUsePGPCard())
brokerUser=mainWindow->getCardLogin();
@@ -296,10 +292,11 @@ void HttpBrokerClient::selectUserSession(const QString& session)
"user="<<brokerUser<<"&"<<
"password="<<config->brokerPass<<"&"<<
"authid="<<config->brokerUserId;
- QUrl lurl ( config->brokerurl );
- httpSessionAnswer.close();
- httpSessionAnswer.setData ( 0,0 );
- selSessRequest=http->post ( lurl.path(),req.toUtf8(),&httpSessionAnswer );
+ x2goDebug << "sending request: "<< req.toUtf8();
+ QNetworkRequest request(QUrl(config->brokerurl));
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
+ sessionsRequest=http->post (request, req.toUtf8() );
+
}
else
{
@@ -330,10 +327,10 @@ void HttpBrokerClient::changePassword(QString newPass)
"user="<<brokerUser<<"&"<<
"password="<<config->brokerPass<<"&"<<
"authid="<<config->brokerUserId;
- QUrl lurl ( config->brokerurl );
- httpSessionAnswer.close();
- httpSessionAnswer.setData ( 0,0 );
- chPassRequest=http->post ( lurl.path(),req.toUtf8(),&httpSessionAnswer );
+ x2goDebug << "sending request: "<< req.toUtf8();
+ QNetworkRequest request(QUrl(config->brokerurl));
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
+ sessionsRequest=http->post (request, req.toUtf8() );
}
else
{
@@ -349,16 +346,16 @@ void HttpBrokerClient::changePassword(QString newPass)
void HttpBrokerClient::testConnection()
{
+ x2goDebug<<"called testConnection";
if(!sshBroker)
{
QString req;
QTextStream ( &req ) <<
"task=testcon";
- QUrl lurl ( config->brokerurl );
- httpSessionAnswer.close();
- httpSessionAnswer.setData ( 0,0 );
- requestTime.start();
- testConRequest=http->post ( lurl.path(),req.toUtf8(),&httpSessionAnswer );
+ x2goDebug << "sending request: "<< req.toUtf8();
+ QNetworkRequest request(QUrl(config->brokerurl));
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
+ sessionsRequest=http->post (request, req.toUtf8() );
}
else
{
@@ -392,6 +389,7 @@ void HttpBrokerClient::createIniFile(const QString& raw_content)
bool HttpBrokerClient::checkAccess(QString answer )
{
+ x2goDebug<<"called checkAccess - answer was: "<<answer;
if (answer.indexOf("Access granted")==-1)
{
QMessageBox::critical (
@@ -408,6 +406,7 @@ bool HttpBrokerClient::checkAccess(QString answer )
void HttpBrokerClient::slotConnectionTest(bool success, QString answer, int)
{
+ x2goDebug<<"called slotConnectionTest";
if(!success)
{
x2goDebug<<answer;
@@ -419,8 +418,8 @@ void HttpBrokerClient::slotConnectionTest(bool success, QString answer, int)
return;
if(!sshBroker)
{
- x2goDebug<<"elapsed: "<<requestTime.elapsed()<<"received:"<<httpSessionAnswer.size()<<endl;
- emit connectionTime(requestTime.elapsed(),httpSessionAnswer.size());
+ x2goDebug<<"elapsed: "<<requestTime.elapsed()<<"received:"<<answer.size()<<endl;
+ emit connectionTime(requestTime.elapsed(),answer.size());
}
return;
@@ -471,36 +470,38 @@ void HttpBrokerClient::slotSelectSession(bool success, QString answer, int)
}
-void HttpBrokerClient::slotRequestFinished ( int id, bool error )
+void HttpBrokerClient::slotRequestFinished ( QNetworkReply* reply )
{
-// x2goDebug<<"http request "<<id<<", finished with: "<<error;
-
- if ( error )
+ if(reply->error() != QNetworkReply::NoError)
{
- x2goDebug<<http->errorString();
- QMessageBox::critical(0,tr("Error"),http->errorString());
+ x2goDebug<<"Broker HTTP request failed with error: "<<reply->errorString();
+ QMessageBox::critical(0,tr("Error"),reply->errorString());
emit fatalHttpError();
return;
}
- QString answer ( httpSessionAnswer.data() );
- x2goDebug<<"cmd request answer: "<<answer;
- if (id==testConRequest)
+ QString answer ( reply->readAll() );
+ x2goDebug<<"A http request returned. Result was: "<<answer;
+ if (reply == testConRequest)
{
slotConnectionTest(true,answer,0);
}
- if (id == sessionsRequest)
+ if (reply == sessionsRequest)
{
slotListSessions(true, answer,0);
}
- if (id == selSessRequest)
+ if (reply == selSessRequest)
{
slotSelectSession(true,answer,0);
}
- if ( id == chPassRequest)
+ if (reply == chPassRequest)
{
slotPassChanged(true,answer,0);
}
+
+ // We receive ownership of the reply object
+ // and therefore need to handle deletion.
+ reply->deleteLater();
}
void HttpBrokerClient::parseSession(QString sinfo)
@@ -537,7 +538,7 @@ void HttpBrokerClient::parseSession(QString sinfo)
}
-void HttpBrokerClient::slotSslErrors ( const QList<QSslError> & errors )
+void HttpBrokerClient::slotSslErrors ( QNetworkReply* netReply, const QList<QSslError> & errors )
{
QStringList err;
QSslCertificate cert;
@@ -564,7 +565,7 @@ void HttpBrokerClient::slotSslErrors ( const QList<QSslError> & errors )
QSslCertificate mcert ( &fl );
if ( mcert==cert )
{
- http->ignoreSslErrors();
+ netReply->ignoreSslErrors();
requestTime.restart();
return;
}
@@ -635,7 +636,7 @@ void HttpBrokerClient::slotSslErrors ( const QList<QSslError> & errors )
fl.open ( QIODevice::WriteOnly | QIODevice::Text );
QTextStream ( &fl ) <<cert.toPem();
fl.close();
- http->ignoreSslErrors();
+ netReply->ignoreSslErrors();
x2goDebug<<"store certificate in "<<homeDir+"/.x2go/ssl/exceptions/"+
lurl.host() +"/"+fname;
requestTime.restart();
diff --git a/httpbrokerclient.h b/httpbrokerclient.h
index 4ea4a3d..8a772df 100644
--- a/httpbrokerclient.h
+++ b/httpbrokerclient.h
@@ -18,6 +18,10 @@
#ifndef HTTPBROKERCLIENT_H
#define HTTPBROKERCLIENT_H
#include "x2goclientconfig.h"
+#include <QNetworkAccessManager>
+#include <QUrl>
+#include <QNetworkRequest>
+#include <QNetworkReply>
#include <QSslError>
#include <QBuffer>
#include <QObject>
@@ -27,7 +31,7 @@
/**
@author Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
*/
-class QHttp;
+class QNetworkAccessManager;
struct ConfigFile;
class ONMainWindow;
@@ -41,14 +45,13 @@ public:
void changePassword(QString newPass);
void testConnection();
private:
- QBuffer httpCmdAnswer;
- QBuffer httpSessionAnswer;
- QHttp* http;
+ QNetworkAccessManager* http;
+ QNetworkRequest* netRequest;
QSslSocket* sslSocket;
- int sessionsRequest;
- int selSessRequest;
- int chPassRequest;
- int testConRequest;
+ QNetworkReply* sessionsRequest;
+ QNetworkReply* selSessRequest;
+ QNetworkReply* chPassRequest;
+ QNetworkReply* testConRequest;
QString newBrokerPass;
ConfigFile* config;
ONMainWindow* mainWindow;
@@ -62,8 +65,8 @@ private:
bool checkAccess(QString answer);
private slots:
- void slotRequestFinished ( int id, bool error );
- void slotSslErrors ( const QList<QSslError> & errors ) ;
+ void slotRequestFinished ( QNetworkReply* reply );
+ void slotSslErrors ( QNetworkReply* netReply, const QList<QSslError> & errors ) ;
QString getHexVal ( const QByteArray& ba );
void slotSshConnectionError ( QString message, QString lastSessionError );
void slotSshServerAuthError ( int error, QString sshMessage, SshMasterConnection* connection );
--
Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
More information about the x2go-commits
mailing list