aboutsummaryrefslogtreecommitdiff
path: root/src/server/QXmppIncomingClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-06-26 14:32:50 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-06-26 14:32:50 +0200
commit2c54c28a78bde8bfa40652fe01bf810945bfc027 (patch)
treec870ad262ef0173c6605b293715907217b7d7c10 /src/server/QXmppIncomingClient.cpp
parente1b738e9ae8c1de5e677a4b7e71605138d179415 (diff)
parent228758c4c9c67a90eab087c864e91c560898956f (diff)
downloadqxmpp-2c54c28a78bde8bfa40652fe01bf810945bfc027.tar.gz
Merge branch 'master' of https://code.google.com/p/qxmpp
Diffstat (limited to 'src/server/QXmppIncomingClient.cpp')
-rw-r--r--src/server/QXmppIncomingClient.cpp59
1 files changed, 45 insertions, 14 deletions
diff --git a/src/server/QXmppIncomingClient.cpp b/src/server/QXmppIncomingClient.cpp
index df553e0f..ce6beec4 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,30 @@ 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
+{
+ QSslSocket *socket = q->socket();
+ if (socket)
+ return socket->peerAddress().toString() + " " + QString::number(socket->peerPort());
+ else
+ return "<unknown>";
+}
+
/// Constructs a new incoming client stream.
///
/// \param socket The socket for the XMPP stream.
@@ -60,27 +83,30 @@ 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())));
+ 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 +311,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("<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>");
handleStart();
}
@@ -415,26 +441,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("<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>");
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("<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure>");
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("<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><temporary-auth-failure/></failure>");
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