diff options
author | Alex <b0ris@b0ris-satellite.localdomain> | 2011-11-05 02:45:53 +0200 |
---|---|---|
committer | Alex <b0ris@b0ris-satellite.localdomain> | 2011-11-05 02:45:53 +0200 |
commit | 2f71a1e82c20f4322ea0fb2994da251de58b366f (patch) | |
tree | 3686abb1ed4f1c06613a49a15b563e08aef1bc64 | |
parent | 6f9a82364b5480ac7b0056b3563776bacf605f62 (diff) |
Fix segfault in SslClient
-rw-r--r-- | client/Config.cpp | 2 | ||||
-rw-r--r-- | client/SslClient.cpp | 35 | ||||
-rw-r--r-- | client/SslClient.h | 4 |
3 files changed, 20 insertions, 21 deletions
diff --git a/client/Config.cpp b/client/Config.cpp index 7e617a3..ee8b9da 100644 --- a/client/Config.cpp +++ b/client/Config.cpp @@ -97,10 +97,8 @@ Config::Config(): QObject(), StaticProxySpeedLow(50) this, SLOT(updateConfig())); client = new SslClient(servers[0].host); - /* connect(client, SIGNAL(ReplyRecieved(SslClient::RequestType&, QByteArray&)), this, SLOT(gotServerReply(SslClient::RequestType&, QByteArray&))); - */ client->SendRequest(SslClient::Config); } diff --git a/client/SslClient.cpp b/client/SslClient.cpp index 70d32a7..86449f4 100644 --- a/client/SslClient.cpp +++ b/client/SslClient.cpp @@ -39,25 +39,25 @@ SslClient::SslClient(char* addr): port(13666) QSslCertificate cert(cert_arr); /* create ssl socket */ - sslSocket = new QSslSocket; - sslSocket->setLocalCertificate(cert); - sslSocket->setPrivateKey(key); - sslSocket->setCaCertificates(ca_certs); - sslSocket->setPeerVerifyMode(QSslSocket::VerifyPeer); - sslSocket->setProtocol(QSsl::SslV3); + //sslSocket = new QSslSocket; + sslSocket.setLocalCertificate(cert); + sslSocket.setPrivateKey(key); + sslSocket.setCaCertificates(ca_certs); + sslSocket.setPeerVerifyMode(QSslSocket::VerifyPeer); + sslSocket.setProtocol(QSsl::SslV3); /* setup signal handlers */ - connect(sslSocket, SIGNAL(encrypted()), + connect(&sslSocket, SIGNAL(encrypted()), this, SLOT(Connected())); - connect(sslSocket, SIGNAL(disconnected()), + connect(&sslSocket, SIGNAL(disconnected()), this, SLOT(Disconnected())); - connect(sslSocket, SIGNAL(readyRead()), + connect(&sslSocket, SIGNAL(readyRead()), this, SLOT(DataRecieved())); - connect(sslSocket, SIGNAL(error(QAbstractSocket::SocketError)), + connect(&sslSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(Error(QAbstractSocket::SocketError))); - connect(sslSocket, SIGNAL(peerVerifyError(const QSslError &)), + connect(&sslSocket, SIGNAL(peerVerifyError(const QSslError &)), this, SLOT(PeerVerifyError(const QSslError))); - connect(sslSocket, SIGNAL(sslErrors(const QList<QSslError> &)), + connect(&sslSocket, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(SslErrors(const QList<QSslError> &))); } @@ -68,8 +68,9 @@ void SslClient::SetServerAddr(char* addr) void SslClient::SendRequest(RequestType type) { - if (sslSocket->state() != QAbstractSocket::ConnectedState) - sslSocket->connectToHostEncrypted(server, port); + Logger::Trace("Sending request w code %x\n", type); + if (sslSocket.state() != QAbstractSocket::ConnectedState) + sslSocket.connectToHostEncrypted(server, port); unsigned char rcode = 0x00; switch (type) @@ -87,7 +88,7 @@ void SslClient::SendRequest(RequestType type) char data[5] = {0x13, 0x13, rcode, 0x14, 0x14}; QByteArray pkt(data); - sslSocket->write(pkt); + sslSocket.write(pkt); } /* @@ -106,7 +107,7 @@ void SslClient::Disconnected() void SslClient::DataRecieved() { Logger::Trace("Recieved reply from %s\n", server.toStdString().c_str()); - QByteArray data = sslSocket->readAll(); + QByteArray data = sslSocket.readAll(); int length = data.size(); char h1 = data[0]; @@ -158,7 +159,7 @@ void SslClient::PeerVerifyError(const QSslError &error) Logger::Fatal("Critical peer verify error!, Aborting connection\n" "Error description: %s", error.errorString().toStdString().c_str()); - sslSocket->abort(); + sslSocket.abort(); break; default: Logger::Fatal("Can't verify peer: %s", error.errorString().toStdString().c_str()); diff --git a/client/SslClient.h b/client/SslClient.h index 3a00de5..030c335 100644 --- a/client/SslClient.h +++ b/client/SslClient.h @@ -4,12 +4,12 @@ #include <QAbstractSocket> #include <QObject> +#include <QSslSocket> #include "client.h" using std::string; class QByteArray; -class QSslSocket; class QSslError; class QString; @@ -97,7 +97,7 @@ private slots: void PeerVerifyError(const QSslError &error); void SslErrors(const QList<QSslError> &errors); private: - QSslSocket *sslSocket; + QSslSocket sslSocket; QString server; unsigned short port; }; |