From 875bc27088fb6016bb5bf18f7b8672b20505051a Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 7 Jun 2012 15:23:06 +0200 Subject: improve server debugging --- src/base/QXmppStream.cpp | 2 +- src/server/QXmppIncomingClient.cpp | 59 +++++++++++++++++++++++++++----------- src/server/QXmppIncomingClient.h | 4 ++- 3 files changed, 46 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/base/QXmppStream.cpp b/src/base/QXmppStream.cpp index 30228109..0f8d4d6e 100644 --- a/src/base/QXmppStream.cpp +++ b/src/base/QXmppStream.cpp @@ -197,7 +197,7 @@ void QXmppStream::_q_socketConnected() void QXmppStream::_q_socketDisconnected() { - info("Socket disconnected"); + debug("Socket disconnected"); } void QXmppStream::_q_socketEncrypted() diff --git a/src/server/QXmppIncomingClient.cpp b/src/server/QXmppIncomingClient.cpp index df553e0f..082531f6 100644 --- a/src/server/QXmppIncomingClient.cpp +++ b/src/server/QXmppIncomingClient.cpp @@ -41,6 +41,7 @@ class QXmppIncomingClientPrivate { public: + QXmppIncomingClientPrivate(QXmppIncomingClient *qq); QTimer *idleTimer; QString domain; @@ -50,8 +51,26 @@ public: QXmppSaslDigestMd5 saslDigest; int saslDigestStep; QString saslDigestUsername; + + QString origin() const; + +private: + QXmppIncomingClient *q; }; +QXmppIncomingClientPrivate::QXmppIncomingClientPrivate(QXmppIncomingClient *qq) + : idleTimer(0) + , passwordChecker(0) + , saslDigestStep(0) + , q(qq) +{ +} + +QString QXmppIncomingClientPrivate::origin() const +{ + return q->socket()->peerAddress().toString() + " " + QString::number(q->socket()->peerPort()); +} + /// Constructs a new incoming client stream. /// /// \param socket The socket for the XMPP stream. @@ -60,27 +79,28 @@ public: /// QXmppIncomingClient::QXmppIncomingClient(QSslSocket *socket, const QString &domain, QObject *parent) - : QXmppStream(parent), - d(new QXmppIncomingClientPrivate) + : QXmppStream(parent) { - d->passwordChecker = 0; + bool check; + Q_UNUSED(check); + + d = new QXmppIncomingClientPrivate(this); d->domain = domain; - d->saslDigestStep = 0; - if (socket) { - info(QString("Incoming client connection from %1 %2").arg( - socket->peerAddress().toString(), - QString::number(socket->peerPort()))); - setSocket(socket); - } + check = connect(socket, SIGNAL(disconnected()), + this, SLOT(onSocketDisconnected())); + Q_ASSERT(check); + + setSocket(socket); + + info(QString("Incoming client connection from %1").arg(d->origin())); // create inactivity timer d->idleTimer = new QTimer(this); d->idleTimer->setSingleShot(true); - bool check = connect(d->idleTimer, SIGNAL(timeout()), + check = connect(d->idleTimer, SIGNAL(timeout()), this, SLOT(onTimeout())); Q_ASSERT(check); - Q_UNUSED(check); } /// Destroys the current stream. @@ -285,7 +305,7 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) // authentication succeeded d->saslDigestStep = 3; d->jid = QString("%1@%2").arg(d->saslDigestUsername, d->domain); - info(QString("Authentication succeeded for '%1'").arg(d->jid)); + info(QString("Authentication succeeded for '%1' from %2").arg(d->jid, d->origin())); sendData(""); handleStart(); } @@ -415,26 +435,31 @@ void QXmppIncomingClient::onPasswordReply() switch (reply->error()) { case QXmppPasswordReply::NoError: d->jid = jid; - info(QString("Authentication succeeded for '%1'").arg(d->jid)); + info(QString("Authentication succeeded for '%1' from %2").arg(d->jid, d->origin())); sendData(""); handleStart(); break; case QXmppPasswordReply::AuthorizationError: - warning(QString("Authentication failed for '%1'").arg(jid)); + warning(QString("Authentication failed for '%1' from %2").arg(jid, d->origin())); sendData(""); disconnectFromHost(); break; case QXmppPasswordReply::TemporaryError: - warning(QString("Temporary authentication failure for '%1'").arg(jid)); + warning(QString("Temporary authentication failure for '%1' from %2").arg(jid, d->origin())); sendData(""); disconnectFromHost(); break; } } +void QXmppIncomingClient::onSocketDisconnected() +{ + info(QString("Socket disconnected for '%1' from %2").arg(d->jid, d->origin())); +} + void QXmppIncomingClient::onTimeout() { - warning(QString("Idle timeout for '%1'").arg(d->jid)); + warning(QString("Idle timeout for '%1' from %2").arg(d->jid, d->origin())); disconnectFromHost(); // make sure disconnected() gets emitted no matter what diff --git a/src/server/QXmppIncomingClient.h b/src/server/QXmppIncomingClient.h index 92a8146b..6c52a386 100644 --- a/src/server/QXmppIncomingClient.h +++ b/src/server/QXmppIncomingClient.h @@ -63,11 +63,13 @@ protected: private slots: void onDigestReply(); void onPasswordReply(); + void onSocketDisconnected(); void onTimeout(); private: Q_DISABLE_COPY(QXmppIncomingClient) - QXmppIncomingClientPrivate* const d; + QXmppIncomingClientPrivate* d; + friend class QXmppIncomingClientPrivate; }; #endif -- cgit v1.2.3 From 193975d6cbb315d6a6da8a5596fc859570c81868 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 7 Jun 2012 16:20:23 +0200 Subject: protect against null socket --- src/server/QXmppIncomingClient.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/server/QXmppIncomingClient.cpp b/src/server/QXmppIncomingClient.cpp index 082531f6..ce6beec4 100644 --- a/src/server/QXmppIncomingClient.cpp +++ b/src/server/QXmppIncomingClient.cpp @@ -68,7 +68,11 @@ QXmppIncomingClientPrivate::QXmppIncomingClientPrivate(QXmppIncomingClient *qq) QString QXmppIncomingClientPrivate::origin() const { - return q->socket()->peerAddress().toString() + " " + QString::number(q->socket()->peerPort()); + QSslSocket *socket = q->socket(); + if (socket) + return socket->peerAddress().toString() + " " + QString::number(socket->peerPort()); + else + return ""; } /// Constructs a new incoming client stream. @@ -87,11 +91,13 @@ QXmppIncomingClient::QXmppIncomingClient(QSslSocket *socket, const QString &doma d = new QXmppIncomingClientPrivate(this); d->domain = domain; - check = connect(socket, SIGNAL(disconnected()), - this, SLOT(onSocketDisconnected())); - Q_ASSERT(check); + if (socket) { + check = connect(socket, SIGNAL(disconnected()), + this, SLOT(onSocketDisconnected())); + Q_ASSERT(check); - setSocket(socket); + setSocket(socket); + } info(QString("Incoming client connection from %1").arg(d->origin())); -- cgit v1.2.3 From 228758c4c9c67a90eab087c864e91c560898956f Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 7 Jun 2012 16:35:33 +0200 Subject: improve incoming server debugging --- src/server/QXmppIncomingServer.cpp | 53 +++++++++++++++++++++++++++++--------- src/server/QXmppIncomingServer.h | 4 ++- 2 files changed, 44 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/server/QXmppIncomingServer.cpp b/src/server/QXmppIncomingServer.cpp index 1bab03ac..88ab0513 100644 --- a/src/server/QXmppIncomingServer.cpp +++ b/src/server/QXmppIncomingServer.cpp @@ -36,11 +36,31 @@ class QXmppIncomingServerPrivate { public: + QXmppIncomingServerPrivate(QXmppIncomingServer *qq); + QString origin() const; + QSet authenticated; QString domain; QString localStreamId; + +private: + QXmppIncomingServer *q; }; +QXmppIncomingServerPrivate::QXmppIncomingServerPrivate(QXmppIncomingServer *qq) + : q(qq) +{ +} + +QString QXmppIncomingServerPrivate::origin() const +{ + QSslSocket *socket = q->socket(); + if (socket) + return socket->peerAddress().toString() + " " + QString::number(socket->peerPort()); + else + return ""; +} + /// Constructs a new incoming server stream. /// /// \param socket The socket for the XMPP stream. @@ -49,17 +69,22 @@ public: /// QXmppIncomingServer::QXmppIncomingServer(QSslSocket *socket, const QString &domain, QObject *parent) - : QXmppStream(parent), - d(new QXmppIncomingServerPrivate) + : QXmppStream(parent) { + bool check; + Q_UNUSED(check); + + d = new QXmppIncomingServerPrivate(this); d->domain = domain; if (socket) { - info(QString("Incoming server connection from %1 %2").arg( - socket->peerAddress().toString(), - QString::number(socket->peerPort()))); + check = connect(socket, SIGNAL(disconnected()), + this, SLOT(slotSocketDisconnected())); + Q_ASSERT(check); + setSocket(socket); } + info(QString("Incoming server connection from %1").arg(d->origin())); } /// Destroys the current stream. @@ -81,7 +106,7 @@ void QXmppIncomingServer::handleStream(const QDomElement &streamElement) { const QString from = streamElement.attribute("from"); if (!from.isEmpty()) - info(QString("Incoming server stream from %1").arg(from)); + info(QString("Incoming server stream from %1 on %2").arg(from, d->origin())); // start stream d->localStreamId = QXmppUtils::generateStanzaHash().toAscii(); @@ -122,14 +147,14 @@ void QXmppIncomingServer::handleStanza(const QDomElement &stanza) request.to() != d->domain || request.key().isEmpty()) { - warning("Invalid dialback received"); + warning(QString("Invalid dialback received on %1").arg(d->origin())); return; } const QString domain = request.from(); if (request.command() == QXmppDialback::Result) { - debug(QString("Received a dialback result from %1").arg(domain)); + debug(QString("Received a dialback result from '%1' on %2").arg(domain, d->origin())); // establish dialback connection QXmppOutgoingServer *stream = new QXmppOutgoingServer(d->domain, this); @@ -142,7 +167,7 @@ void QXmppIncomingServer::handleStanza(const QDomElement &stanza) } else if (request.command() == QXmppDialback::Verify) { - debug(QString("Received a dialback verify from %1").arg(domain)); + debug(QString("Received a dialback verify from '%1' on %2").arg(domain, d->origin())); emit dialbackRequestReceived(request); } @@ -152,7 +177,7 @@ void QXmppIncomingServer::handleStanza(const QDomElement &stanza) // relay stanza if the remote party is authenticated emit elementReceived(stanza); } else { - warning(QString("Received an element from unverified domain %1").arg(QXmppUtils::jidToDomain(stanza.attribute("from")))); + warning(QString("Received an element from unverified domain '%1' on %2").arg(QXmppUtils::jidToDomain(stanza.attribute("from")), d->origin())); disconnectFromHost(); } } @@ -191,13 +216,13 @@ void QXmppIncomingServer::slotDialbackResponseReceived(const QXmppDialback &dial // check for success if (response.type() == QLatin1String("valid")) { - info(QString("Verified incoming domain %1").arg(dialback.from())); + info(QString("Verified incoming domain '%1' on %2").arg(dialback.from(), d->origin())); const bool wasConnected = !d->authenticated.isEmpty(); d->authenticated.insert(dialback.from()); if (!wasConnected) emit connected(); } else { - warning(QString("Failed to verify incoming domain %1").arg(dialback.from())); + warning(QString("Failed to verify incoming domain '%1' on %2").arg(dialback.from(), d->origin())); disconnectFromHost(); } @@ -206,3 +231,7 @@ void QXmppIncomingServer::slotDialbackResponseReceived(const QXmppDialback &dial stream->deleteLater(); } +void QXmppIncomingServer::slotSocketDisconnected() +{ + info(QString("Socket disconnected from %1").arg(d->origin())); +} diff --git a/src/server/QXmppIncomingServer.h b/src/server/QXmppIncomingServer.h index 371da404..ef86ec20 100644 --- a/src/server/QXmppIncomingServer.h +++ b/src/server/QXmppIncomingServer.h @@ -60,10 +60,12 @@ protected: private slots: void slotDialbackResponseReceived(const QXmppDialback &dialback); + void slotSocketDisconnected(); private: Q_DISABLE_COPY(QXmppIncomingServer) - QXmppIncomingServerPrivate* const d; + QXmppIncomingServerPrivate* d; + friend class QXmppIncomingServerPrivate; }; #endif -- cgit v1.2.3