aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-13 11:23:19 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-13 11:23:19 +0000
commit0acf07023dca6b6d35c347cb28dce44a04363019 (patch)
tree4f83d1bbf51fd4ec4954e03a706c1df5ab53e572 /src
parentf9b824dd3901b925bed2cb33ac4c4d41c4420ca9 (diff)
downloadqxmpp-0acf07023dca6b6d35c347cb28dce44a04363019.tar.gz
* don't initialise random number generator multiple times, breaks randomness
* make QXmppStream easier to subclass, e.g. for a server
Diffstat (limited to 'src')
-rw-r--r--src/QXmppStream.cpp15
-rw-r--r--src/QXmppStream.h16
2 files changed, 19 insertions, 12 deletions
diff --git a/src/QXmppStream.cpp b/src/QXmppStream.cpp
index 2edcca6f..bdcd61c3 100644
--- a/src/QXmppStream.cpp
+++ b/src/QXmppStream.cpp
@@ -57,6 +57,7 @@
#include <QXmlStreamWriter>
#include <QTimer>
+static bool randomSeeded = false;
static const QString capabilitiesNode = "http://code.google.com/p/qxmpp";
static const QByteArray streamRootElementEnd = "</stream:stream>";
@@ -102,7 +103,11 @@ QXmppStream::QXmppStream(QSslSocket *socket, QObject *parent)
d(new QXmppStreamPrivate)
{
// Make sure the random number generator is seeded
- qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
+ if (!randomSeeded)
+ {
+ qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
+ randomSeeded = true;
+ }
// initialise logger
setLogger(QXmppLogger::getLogger());
@@ -807,12 +812,12 @@ void QXmppStream::handleStanza(const QDomElement &nodeRecv)
}
}
-void QXmppStream::sendStartStream()
+bool QXmppStream::sendStartStream()
{
QByteArray data = "<?xml version='1.0'?><stream:stream to='";
data.append(configuration().domain());
data.append("' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>");
- sendData(data);
+ return sendData(data);
}
bool QXmppStream::sendData(const QByteArray& packet)
@@ -1003,9 +1008,9 @@ bool QXmppStream::sendPacket(const QXmppPacket& packet)
return sendData(data);
}
-void QXmppStream::sendEndStream()
+bool QXmppStream::sendEndStream()
{
- sendData(streamRootElementEnd);
+ return sendData(streamRootElementEnd);
}
void QXmppStream::pingStart()
diff --git a/src/QXmppStream.h b/src/QXmppStream.h
index 79d4802c..d7d0d38d 100644
--- a/src/QXmppStream.h
+++ b/src/QXmppStream.h
@@ -130,8 +130,16 @@ signals:
void jingleIqReceived(const QXmppJingleIq&);
protected:
+ // Logging helpers
+ void debug(const QString&);
+ void info(const QString&);
+ void warning(const QString&);
+
+ // Overridable methods
virtual void handleStanza(const QDomElement &element);
virtual void handleStream(const QDomElement &element);
+ virtual bool sendStartStream();
+ virtual bool sendEndStream();
private slots:
void socketHostFound();
@@ -149,12 +157,8 @@ private slots:
private:
QXmppDiscoveryIq capabilities() const;
- void debug(const QString&);
- void info(const QString&);
- void warning(const QString&);
+ void flushDataBuffer();
void parser(const QByteArray&);
- void sendStartStream();
- void sendEndStream();
void sendNonSASLAuth(bool plaintext);
void sendNonSASLAuthQuery();
void sendAuthDigestMD5ResponseStep1(const QString& challenge);
@@ -162,8 +166,6 @@ private:
void sendBindIQ();
void sendSessionIQ();
- void flushDataBuffer();
-
QXmppStreamPrivate * const d;
};