diff options
Diffstat (limited to 'src/QXmppStream.cpp')
| -rw-r--r-- | src/QXmppStream.cpp | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/src/QXmppStream.cpp b/src/QXmppStream.cpp index 424b1f00..d1456b23 100644 --- a/src/QXmppStream.cpp +++ b/src/QXmppStream.cpp @@ -71,7 +71,7 @@ public: QXmppConfiguration config; QByteArray dataBuffer; QXmppLogger* logger; - QSslSocket socket; + QSslSocket* socket; QAbstractSocket::SocketError socketError; QXmppStanza::Error::Condition xmppStreamError; @@ -106,26 +106,29 @@ QXmppStream::QXmppStream(QObject *parent) // initialise logger setLogger(QXmppLogger::getLogger()); - bool check = QObject::connect(&d->socket, SIGNAL(hostFound()), + // create socket + d->socket = new QSslSocket(this); + + bool check = QObject::connect(d->socket, SIGNAL(hostFound()), this, SLOT(socketHostFound())); Q_ASSERT(check); - check = QObject::connect(&d->socket, SIGNAL(connected()), + check = QObject::connect(d->socket, SIGNAL(connected()), this, SLOT(socketConnected())); Q_ASSERT(check); - check = QObject::connect(&d->socket, SIGNAL(disconnected()), + check = QObject::connect(d->socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected())); Q_ASSERT(check); - check = QObject::connect(&d->socket, SIGNAL(readyRead()), + check = QObject::connect(d->socket, SIGNAL(readyRead()), this, SLOT(socketReadReady())); Q_ASSERT(check); - check = QObject::connect(&d->socket, SIGNAL(encrypted()), + check = QObject::connect(d->socket, SIGNAL(encrypted()), this, SLOT(socketEncrypted())); Q_ASSERT(check); - check = QObject::connect(&d->socket, + check = QObject::connect(d->socket, SIGNAL(sslErrors(const QList<QSslError>&)), this, SLOT(socketSslErrors(const QList<QSslError>&))); Q_ASSERT(check); - check = QObject::connect(&d->socket, + check = QObject::connect(d->socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError))); Q_ASSERT(check); @@ -165,8 +168,8 @@ void QXmppStream::connect() // prepare for connection d->authStep = 0; - d->socket.setProxy(configuration().networkProxy()); - d->socket.connectToHost(configuration(). + d->socket->setProxy(configuration().networkProxy()); + d->socket->connectToHost(configuration(). host(), configuration().port()); } @@ -177,7 +180,7 @@ void QXmppStream::socketSslErrors(const QList<QSslError> & error) warning(error.at(i).errorString()); if (configuration().ignoreSslErrors()) - d->socket.ignoreSslErrors(); + d->socket->ignoreSslErrors(); } void QXmppStream::socketHostFound() @@ -211,12 +214,12 @@ void QXmppStream::socketError(QAbstractSocket::SocketError ee) { d->socketError = ee; emit error(QXmppClient::SocketError); - warning(QString("Socket error: " + d->socket.errorString())); + warning(QString("Socket error: " + d->socket->errorString())); } void QXmppStream::socketReadReady() { - const QByteArray data = d->socket.readAll(); + const QByteArray data = d->socket->readAll(); //debug("SERVER [COULD BE PARTIAL DATA]:" + data.left(20)); parser(data); } @@ -339,7 +342,7 @@ void QXmppStream::parser(const QByteArray& data) namespaceURI() == ns_sasl; bool useSasl = configuration().useSASLAuthentication(); - if (!d->socket.isEncrypted()) + if (!d->socket->isEncrypted()) { // parse remote TLS mode QXmppConfiguration::StreamSecurityMode remoteSecurity; @@ -356,7 +359,7 @@ void QXmppStream::parser(const QByteArray& data) // determine TLS mode to use const QXmppConfiguration::StreamSecurityMode localSecurity = configuration().streamSecurityMode(); - if (!d->socket.supportsSsl() && + if (!d->socket->supportsSsl() && (localSecurity == QXmppConfiguration::TLSRequired || remoteSecurity == QXmppConfiguration::TLSRequired)) { @@ -372,7 +375,7 @@ void QXmppStream::parser(const QByteArray& data) return; } - if (d->socket.supportsSsl() && + if (d->socket->supportsSsl() && (remoteSecurity == QXmppConfiguration::TLSRequired || localSecurity != QXmppConfiguration::TLSDisabled)) { @@ -468,7 +471,7 @@ void QXmppStream::parser(const QByteArray& data) if(nodeRecv.tagName() == "proceed") { debug("Starting encryption"); - d->socket.startClientEncryption(); + d->socket->startClientEncryption(); return; } } @@ -800,7 +803,6 @@ void QXmppStream::parser(const QByteArray& data) } } - void QXmppStream::sendStartStream() { QByteArray data = "<?xml version='1.0'?><stream:stream to='"; @@ -814,7 +816,7 @@ bool QXmppStream::sendToServer(const QByteArray& packet) emit logMessage(QXmppLogger::SentMessage, QString::fromUtf8(packet)); if (!isConnected()) return false; - return d->socket.write( packet ) == packet.size(); + return d->socket->write( packet ) == packet.size(); } void QXmppStream::sendNonSASLAuth(bool plainText) @@ -987,13 +989,13 @@ void QXmppStream::disconnect() { d->authStep = 0; sendEndStream(); - d->socket.flush(); - d->socket.disconnectFromHost(); + d->socket->flush(); + d->socket->disconnectFromHost(); } bool QXmppStream::isConnected() const { - return d->socket.state() == QAbstractSocket::ConnectedState; + return d->socket->state() == QAbstractSocket::ConnectedState; } bool QXmppStream::sendPacket(const QXmppPacket& packet) |
