From 8eaf6c3def32f1aa07fe863d5eab69f44672b3a5 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Tue, 13 Sep 2011 12:08:15 +0000 Subject: * hide some QXmppServer internals * improve QXmppServer performance --- src/QXmppOutgoingServer.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src/QXmppOutgoingServer.cpp') diff --git a/src/QXmppOutgoingServer.cpp b/src/QXmppOutgoingServer.cpp index adcbd079..7984fd92 100644 --- a/src/QXmppOutgoingServer.cpp +++ b/src/QXmppOutgoingServer.cpp @@ -36,6 +36,7 @@ class QXmppOutgoingServerPrivate { public: + QList dataQueue; QString localDomain; QString localStreamKey; QString remoteDomain; @@ -180,7 +181,7 @@ void QXmppOutgoingServer::handleStanza(const QDomElement &stanza) } else if (ns == ns_tls) { - if (stanza.tagName() == "proceed") + if (stanza.tagName() == QLatin1String("proceed")) { debug("Starting encryption"); socket()->startClientEncryption(); @@ -202,10 +203,17 @@ void QXmppOutgoingServer::handleStanza(const QDomElement &stanza) } if (response.command() == QXmppDialback::Result) { - if (response.type() == "valid") + if (response.type() == QLatin1String("valid")) { info(QString("Outgoing server stream to %1 is ready").arg(response.from())); d->ready = true; + + // send queued data + foreach (const QByteArray &data, d->dataQueue) + sendData(data); + d->dataQueue.clear(); + + // emit signal emit connected(); } } @@ -252,6 +260,18 @@ void QXmppOutgoingServer::setVerify(const QString &id, const QString &key) d->verifyKey = key; } +/// Sends or queues data until connected. +/// +/// \param data + +void QXmppOutgoingServer::queueData(const QByteArray &data) +{ + if (isConnected()) + sendData(data); + else + d->dataQueue.append(data); +} + /// Returns the remote server's domain. QString QXmppOutgoingServer::remoteDomain() const -- cgit v1.2.3