aboutsummaryrefslogtreecommitdiff
path: root/src
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
parente1b738e9ae8c1de5e677a4b7e71605138d179415 (diff)
parent228758c4c9c67a90eab087c864e91c560898956f (diff)
downloadqxmpp-2c54c28a78bde8bfa40652fe01bf810945bfc027.tar.gz
Merge branch 'master' of https://code.google.com/p/qxmpp
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppStream.cpp2
-rw-r--r--src/server/QXmppIncomingClient.cpp59
-rw-r--r--src/server/QXmppIncomingClient.h4
-rw-r--r--src/server/QXmppIncomingServer.cpp53
-rw-r--r--src/server/QXmppIncomingServer.h4
5 files changed, 93 insertions, 29 deletions
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..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
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
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<QString> 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 "<unknown>";
+}
+
/// 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