aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-04-20 15:21:56 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2012-04-20 15:21:56 +0000
commit7de79b51bb991b6d237522d3d30c73127dedbfa6 (patch)
tree8f4c38bba237fb02be1f35ad9208fef06d4e38e3 /src/base
parentd648473c16ac3fe5ce4f4b79c188b9bade381425 (diff)
downloadqxmpp-7de79b51bb991b6d237522d3d30c73127dedbfa6.tar.gz
encapsulate QXmppUtils methods in a QXmppUtils class
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppArchiveIq.cpp24
-rw-r--r--src/base/QXmppEntityTimeIq.cpp8
-rw-r--r--src/base/QXmppMessage.cpp4
-rw-r--r--src/base/QXmppSaslAuth.cpp2
-rw-r--r--src/base/QXmppStun.cpp42
-rw-r--r--src/base/QXmppUtils.cpp28
-rw-r--r--src/base/QXmppUtils.h38
7 files changed, 77 insertions, 69 deletions
diff --git a/src/base/QXmppArchiveIq.cpp b/src/base/QXmppArchiveIq.cpp
index e8bef8fc..a194f61f 100644
--- a/src/base/QXmppArchiveIq.cpp
+++ b/src/base/QXmppArchiveIq.cpp
@@ -89,7 +89,7 @@ QXmppArchiveChat::QXmppArchiveChat()
void QXmppArchiveChat::parse(const QDomElement &element)
{
m_with = element.attribute("with");
- m_start = datetimeFromString(element.attribute("start"));
+ m_start = QXmppUtils::datetimeFromString(element.attribute("start"));
m_subject = element.attribute("subject");
m_thread = element.attribute("thread");
m_version = element.attribute("version").toInt();
@@ -115,7 +115,7 @@ void QXmppArchiveChat::toXml(QXmlStreamWriter *writer) const
writer->writeAttribute("xmlns", ns_archive);
helperToXmlAddAttribute(writer, "with", m_with);
if (m_start.isValid())
- helperToXmlAddAttribute(writer, "start", datetimeToString(m_start));
+ helperToXmlAddAttribute(writer, "start", QXmppUtils::datetimeToString(m_start));
helperToXmlAddAttribute(writer, "subject", m_subject);
helperToXmlAddAttribute(writer, "thread", m_thread);
if (m_version)
@@ -344,8 +344,8 @@ void QXmppArchiveListIq::parseElementFromChild(const QDomElement &element)
{
QDomElement listElement = element.firstChildElement("list");
m_with = listElement.attribute("with");
- m_start = datetimeFromString(listElement.attribute("start"));
- m_end = datetimeFromString(listElement.attribute("end"));
+ m_start = QXmppUtils::datetimeFromString(listElement.attribute("start"));
+ m_end = QXmppUtils::datetimeFromString(listElement.attribute("end"));
QDomElement setElement = listElement.firstChildElement("set");
if (setElement.namespaceURI() == ns_rsm)
@@ -371,9 +371,9 @@ void QXmppArchiveListIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
if (!m_with.isEmpty())
helperToXmlAddAttribute(writer, "with", m_with);
if (m_start.isValid())
- helperToXmlAddAttribute(writer, "start", datetimeToString(m_start));
+ helperToXmlAddAttribute(writer, "start", QXmppUtils::datetimeToString(m_start));
if (m_end.isValid())
- helperToXmlAddAttribute(writer, "end", datetimeToString(m_end));
+ helperToXmlAddAttribute(writer, "end", QXmppUtils::datetimeToString(m_end));
if (m_max > 0)
{
writer->writeStartElement("set");
@@ -466,8 +466,8 @@ void QXmppArchiveRemoveIq::parseElementFromChild(const QDomElement &element)
{
QDomElement listElement = element.firstChildElement("remove");
m_with = listElement.attribute("with");
- m_start = datetimeFromString(listElement.attribute("start"));
- m_end = datetimeFromString(listElement.attribute("end"));
+ m_start = QXmppUtils::datetimeFromString(listElement.attribute("start"));
+ m_end = QXmppUtils::datetimeFromString(listElement.attribute("end"));
}
void QXmppArchiveRemoveIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
@@ -477,9 +477,9 @@ void QXmppArchiveRemoveIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
if (!m_with.isEmpty())
helperToXmlAddAttribute(writer, "with", m_with);
if (m_start.isValid())
- helperToXmlAddAttribute(writer, "start", datetimeToString(m_start));
+ helperToXmlAddAttribute(writer, "start", QXmppUtils::datetimeToString(m_start));
if (m_end.isValid())
- helperToXmlAddAttribute(writer, "end", datetimeToString(m_end));
+ helperToXmlAddAttribute(writer, "end", QXmppUtils::datetimeToString(m_end));
writer->writeEndElement();
}
@@ -549,7 +549,7 @@ void QXmppArchiveRetrieveIq::parseElementFromChild(const QDomElement &element)
{
QDomElement retrieveElement = element.firstChildElement("retrieve");
m_with = retrieveElement.attribute("with");
- m_start = datetimeFromString(retrieveElement.attribute("start"));
+ m_start = QXmppUtils::datetimeFromString(retrieveElement.attribute("start"));
QDomElement setElement = retrieveElement.firstChildElement("set");
if (setElement.namespaceURI() == ns_rsm)
m_max = setElement.firstChildElement("max").text().toInt();
@@ -560,7 +560,7 @@ void QXmppArchiveRetrieveIq::toXmlElementFromChild(QXmlStreamWriter *writer) con
writer->writeStartElement("retrieve");
writer->writeAttribute("xmlns", ns_archive);
helperToXmlAddAttribute(writer, "with", m_with);
- helperToXmlAddAttribute(writer, "start", datetimeToString(m_start));
+ helperToXmlAddAttribute(writer, "start", QXmppUtils::datetimeToString(m_start));
if (m_max > 0)
{
writer->writeStartElement("set");
diff --git a/src/base/QXmppEntityTimeIq.cpp b/src/base/QXmppEntityTimeIq.cpp
index 5e41e39f..fcb6a99c 100644
--- a/src/base/QXmppEntityTimeIq.cpp
+++ b/src/base/QXmppEntityTimeIq.cpp
@@ -72,8 +72,8 @@ bool QXmppEntityTimeIq::isEntityTimeIq(const QDomElement &element)
void QXmppEntityTimeIq::parseElementFromChild(const QDomElement &element)
{
QDomElement timeElement = element.firstChildElement("time");
- m_tzo = timezoneOffsetFromString(timeElement.firstChildElement("tzo").text());
- m_utc = datetimeFromString(timeElement.firstChildElement("utc").text());
+ m_tzo = QXmppUtils::timezoneOffsetFromString(timeElement.firstChildElement("tzo").text());
+ m_utc = QXmppUtils::datetimeFromString(timeElement.firstChildElement("utc").text());
}
void QXmppEntityTimeIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
@@ -83,8 +83,8 @@ void QXmppEntityTimeIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
if(m_utc.isValid())
{
- helperToXmlAddTextElement(writer, "tzo", timezoneOffsetToString(m_tzo));
- helperToXmlAddTextElement(writer, "utc", datetimeToString(m_utc));
+ helperToXmlAddTextElement(writer, "tzo", QXmppUtils::timezoneOffsetToString(m_tzo));
+ helperToXmlAddTextElement(writer, "utc", QXmppUtils::datetimeToString(m_utc));
}
writer->writeEndElement();
}
diff --git a/src/base/QXmppMessage.cpp b/src/base/QXmppMessage.cpp
index 109c0d84..8b1b649a 100644
--- a/src/base/QXmppMessage.cpp
+++ b/src/base/QXmppMessage.cpp
@@ -284,7 +284,7 @@ void QXmppMessage::parse(const QDomElement &element)
if (!delayElement.isNull() && delayElement.namespaceURI() == ns_delayed_delivery)
{
const QString str = delayElement.attribute("stamp");
- m_stamp = datetimeFromString(str);
+ m_stamp = QXmppUtils::datetimeFromString(str);
m_stampType = QXmppMessage::DelayedDelivery;
}
@@ -345,7 +345,7 @@ void QXmppMessage::toXml(QXmlStreamWriter *xmlWriter) const
// XEP-0203: Delayed Delivery
xmlWriter->writeStartElement("delay");
xmlWriter->writeAttribute("xmlns", ns_delayed_delivery);
- helperToXmlAddAttribute(xmlWriter, "stamp", datetimeToString(utcStamp));
+ helperToXmlAddAttribute(xmlWriter, "stamp", QXmppUtils::datetimeToString(utcStamp));
xmlWriter->writeEndElement();
} else {
// XEP-0091: Legacy Delayed Delivery
diff --git a/src/base/QXmppSaslAuth.cpp b/src/base/QXmppSaslAuth.cpp
index a528cd6d..826ef0ab 100644
--- a/src/base/QXmppSaslAuth.cpp
+++ b/src/base/QXmppSaslAuth.cpp
@@ -96,7 +96,7 @@ void QXmppSaslDigestMd5::setSecret(const QByteArray &secret)
QByteArray QXmppSaslDigestMd5::generateNonce()
{
- QByteArray nonce = generateRandomBytes(32);
+ QByteArray nonce = QXmppUtils::generateRandomBytes(32);
// The random data can the '=' char is not valid as it is a delimiter,
// so to be safe, base64 the nonce
diff --git a/src/base/QXmppStun.cpp b/src/base/QXmppStun.cpp
index 16cef928..ab596886 100644
--- a/src/base/QXmppStun.cpp
+++ b/src/base/QXmppStun.cpp
@@ -711,7 +711,7 @@ bool QXmppStunMessage::decode(const QByteArray &buffer, const QByteArray &key, Q
{
QByteArray copy = buffer.left(STUN_HEADER + done);
setBodyLength(copy, done + 24);
- if (integrity != generateHmacSha1(key, copy))
+ if (integrity != QXmppUtils::generateHmacSha1(key, copy))
{
*errors << QLatin1String("Bad message integrity");
return false;
@@ -732,7 +732,7 @@ bool QXmppStunMessage::decode(const QByteArray &buffer, const QByteArray &key, Q
// check CRC32
QByteArray copy = buffer.left(STUN_HEADER + done);
setBodyLength(copy, done + 8);
- const quint32 expected = generateCrc32(copy) ^ 0x5354554eL;
+ const quint32 expected = QXmppUtils::generateCrc32(copy) ^ 0x5354554eL;
if (fingerprint != expected)
{
*errors << QLatin1String("Bad fingerprint");
@@ -932,7 +932,7 @@ QByteArray QXmppStunMessage::encode(const QByteArray &key, bool addFingerprint)
if (!key.isEmpty())
{
setBodyLength(buffer, buffer.size() - STUN_HEADER + 24);
- QByteArray integrity = generateHmacSha1(key, buffer);
+ QByteArray integrity = QXmppUtils::generateHmacSha1(key, buffer);
stream << quint16(MessageIntegrity);
stream << quint16(integrity.size());
stream.writeRawData(integrity.data(), integrity.size());
@@ -942,7 +942,7 @@ QByteArray QXmppStunMessage::encode(const QByteArray &key, bool addFingerprint)
if (addFingerprint)
{
setBodyLength(buffer, buffer.size() - STUN_HEADER + 8);
- quint32 fingerprint = generateCrc32(buffer) ^ 0x5354554eL;
+ quint32 fingerprint = QXmppUtils::generateCrc32(buffer) ^ 0x5354554eL;
stream << quint16(Fingerprint);
stream << quint16(sizeof(fingerprint));
stream << fingerprint;
@@ -1195,7 +1195,7 @@ void QXmppTurnAllocation::connectToHost()
// send allocate request
QXmppStunMessage request;
request.setType(QXmppStunMessage::Allocate | QXmppStunMessage::Request);
- request.setId(generateRandomBytes(12));
+ request.setId(QXmppUtils::generateRandomBytes(12));
request.setLifetime(m_lifetime);
request.setRequestedTransport(0x11);
m_transactions << new QXmppStunTransaction(request, this);
@@ -1221,7 +1221,7 @@ void QXmppTurnAllocation::disconnectFromHost()
if (m_state == ConnectedState) {
QXmppStunMessage request;
request.setType(QXmppStunMessage::Refresh | QXmppStunMessage::Request);
- request.setId(generateRandomBytes(12));
+ request.setId(QXmppUtils::generateRandomBytes(12));
request.setNonce(m_nonce);
request.setRealm(m_realm);
request.setUsername(m_username);
@@ -1294,7 +1294,7 @@ void QXmppTurnAllocation::refresh()
{
QXmppStunMessage request;
request.setType(QXmppStunMessage::Refresh | QXmppStunMessage::Request);
- request.setId(generateRandomBytes(12));
+ request.setId(QXmppUtils::generateRandomBytes(12));
request.setNonce(m_nonce);
request.setRealm(m_realm);
request.setUsername(m_username);
@@ -1308,7 +1308,7 @@ void QXmppTurnAllocation::refreshChannels()
foreach (quint16 channel, m_channels.keys()) {
QXmppStunMessage request;
request.setType(QXmppStunMessage::ChannelBind | QXmppStunMessage::Request);
- request.setId(generateRandomBytes(12));
+ request.setId(QXmppUtils::generateRandomBytes(12));
request.setNonce(m_nonce);
request.setRealm(m_realm);
request.setUsername(m_username);
@@ -1407,7 +1407,7 @@ void QXmppTurnAllocation::transactionFinished()
// retry request
QXmppStunMessage request(transaction->request());
- request.setId(generateRandomBytes(12));
+ request.setId(QXmppUtils::generateRandomBytes(12));
request.setNonce(m_nonce);
request.setRealm(m_realm);
request.setUsername(m_username);
@@ -1491,7 +1491,7 @@ qint64 QXmppTurnAllocation::writeDatagram(const QByteArray &data, const QHostAdd
// bind channel
QXmppStunMessage request;
request.setType(QXmppStunMessage::ChannelBind | QXmppStunMessage::Request);
- request.setId(generateRandomBytes(12));
+ request.setId(QXmppUtils::generateRandomBytes(12));
request.setNonce(m_nonce);
request.setRealm(m_realm);
request.setUsername(m_username);
@@ -1535,7 +1535,7 @@ QXmppIceComponent::Pair::Pair(int component, bool controlling)
m_component(component),
m_controlling(controlling)
{
- transaction = generateRandomBytes(ID_SIZE);
+ transaction = QXmppUtils::generateRandomBytes(ID_SIZE);
}
quint64 QXmppIceComponent::Pair::priority() const
@@ -1582,8 +1582,8 @@ QXmppIceComponent::QXmppIceComponent(QObject *parent)
bool check;
Q_UNUSED(check);
- m_localUser = generateStanzaHash(4);
- m_localPassword = generateStanzaHash(22);
+ m_localUser = QXmppUtils::generateStanzaHash(4);
+ m_localPassword = QXmppUtils::generateStanzaHash(22);
m_timer = new QTimer(this);
m_timer->setInterval(500);
@@ -1812,7 +1812,7 @@ QXmppIceComponent::Pair *QXmppIceComponent::addRemoteCandidate(QUdpSocket *socke
QXmppJingleCandidate candidate;
candidate.setComponent(m_component);
candidate.setHost(host);
- candidate.setId(generateStanzaHash(10));
+ candidate.setId(QXmppUtils::generateStanzaHash(10));
candidate.setPort(port);
candidate.setPriority(priority);
candidate.setProtocol("udp");
@@ -1874,7 +1874,7 @@ void QXmppIceComponent::setSockets(QList<QUdpSocket*> sockets)
addr.setScopeId(QString());
}
candidate.setHost(addr);
- candidate.setId(generateStanzaHash(10));
+ candidate.setId(QXmppUtils::generateStanzaHash(10));
candidate.setPort(socket->localPort());
candidate.setProtocol("udp");
candidate.setType(QXmppJingleCandidate::HostType);
@@ -1906,7 +1906,7 @@ void QXmppIceComponent::setStunServer(const QHostAddress &host, quint16 port)
{
m_stunHost = host;
m_stunPort = port;
- m_stunId = generateRandomBytes(ID_SIZE);
+ m_stunId = QXmppUtils::generateRandomBytes(ID_SIZE);
}
/// Sets the TURN server to use to relay packets in double-NAT configurations.
@@ -2036,7 +2036,7 @@ void QXmppIceComponent::handleDatagram(const QByteArray &buffer, const QHostAddr
QXmppJingleCandidate candidate;
candidate.setComponent(m_component);
candidate.setHost(reflexiveHost);
- candidate.setId(generateStanzaHash(10));
+ candidate.setId(QXmppUtils::generateStanzaHash(10));
candidate.setPort(reflexivePort);
candidate.setProtocol("udp");
candidate.setType(QXmppJingleCandidate::ServerReflexiveType);
@@ -2105,7 +2105,7 @@ void QXmppIceComponent::handleDatagram(const QByteArray &buffer, const QHostAddr
#if 0
// send a binding indication
QXmppStunMessage indication;
- indication.setId(generateRandomBytes(ID_SIZE));
+ indication.setId(QXmppUtils::generateRandomBytes(ID_SIZE));
indication.setType(BindingIndication);
m_socket->writeStun(indication, pair);
#endif
@@ -2139,7 +2139,7 @@ void QXmppIceComponent::turnConnected()
QXmppJingleCandidate candidate;
candidate.setComponent(m_component);
candidate.setHost(m_turnAllocation->relayedHost());
- candidate.setId(generateStanzaHash(10));
+ candidate.setId(QXmppUtils::generateStanzaHash(10));
candidate.setPort(m_turnAllocation->relayedPort());
candidate.setProtocol("udp");
candidate.setType(QXmppJingleCandidate::RelayedType);
@@ -2304,8 +2304,8 @@ QXmppIceConnection::QXmppIceConnection(QObject *parent)
{
bool check;
- m_localUser = generateStanzaHash(4);
- m_localPassword = generateStanzaHash(22);
+ m_localUser = QXmppUtils::generateStanzaHash(4);
+ m_localPassword = QXmppUtils::generateStanzaHash(22);
// timer to limit connection time to 30 seconds
m_connectTimer = new QTimer(this);
diff --git a/src/base/QXmppUtils.cpp b/src/base/QXmppUtils.cpp
index 3dcf0354..f308710c 100644
--- a/src/base/QXmppUtils.cpp
+++ b/src/base/QXmppUtils.cpp
@@ -107,7 +107,7 @@ static quint32 crctable[256] =
0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
};
-QDateTime datetimeFromString(const QString &str)
+QDateTime QXmppUtils::datetimeFromString(const QString &str)
{
QRegExp tzRe("(Z|([+-])([0-9]{2}):([0-9]{2}))");
int tzPos = tzRe.indexIn(str, 19);
@@ -137,7 +137,7 @@ QDateTime datetimeFromString(const QString &str)
return dt;
}
-QString datetimeToString(const QDateTime &dt)
+QString QXmppUtils::datetimeToString(const QDateTime &dt)
{
QDateTime utc = dt.toUTC();
if (utc.time().msec())
@@ -151,7 +151,7 @@ QString datetimeToString(const QDateTime &dt)
/// \param str
///
-int timezoneOffsetFromString(const QString &str)
+int QXmppUtils::timezoneOffsetFromString(const QString &str)
{
QRegExp tzRe("(Z|([+-])([0-9]{2}):([0-9]{2}))");
if (!tzRe.exactMatch(str))
@@ -174,7 +174,7 @@ int timezoneOffsetFromString(const QString &str)
///
/// \param secs
-QString timezoneOffsetToString(int secs)
+QString QXmppUtils::timezoneOffsetToString(int secs)
{
if (!secs)
return QString::fromLatin1("Z");
@@ -183,12 +183,12 @@ QString timezoneOffsetToString(int secs)
return (secs < 0 ? "-" : "+") + tzoTime.toString("hh:mm");
}
-QString jidToDomain(const QString &jid)
+QString QXmppUtils::jidToDomain(const QString &jid)
{
return jidToBareJid(jid).split("@").last();
}
-QString jidToResource(const QString& jid)
+QString QXmppUtils::jidToResource(const QString& jid)
{
const int pos = jid.indexOf(QChar('/'));
if (pos < 0)
@@ -196,7 +196,7 @@ QString jidToResource(const QString& jid)
return jid.mid(pos+1);
}
-QString jidToUser(const QString &jid)
+QString QXmppUtils::jidToUser(const QString &jid)
{
const int pos = jid.indexOf(QChar('@'));
if (pos < 0)
@@ -204,7 +204,7 @@ QString jidToUser(const QString &jid)
return jid.left(pos);
}
-QString jidToBareJid(const QString& jid)
+QString QXmppUtils::jidToBareJid(const QString& jid)
{
const int pos = jid.indexOf(QChar('/'));
if (pos < 0)
@@ -212,7 +212,7 @@ QString jidToBareJid(const QString& jid)
return jid.left(pos);
}
-quint32 generateCrc32(const QByteArray &in)
+quint32 QXmppUtils::generateCrc32(const QByteArray &in)
{
quint32 result = 0xffffffff;
for(int n = 0; n < in.size(); ++n)
@@ -243,12 +243,12 @@ static QByteArray generateHmac(QCryptographicHash::Algorithm algorithm, const QB
return hasher.result();
}
-QByteArray generateHmacMd5(const QByteArray &key, const QByteArray &text)
+QByteArray QXmppUtils::generateHmacMd5(const QByteArray &key, const QByteArray &text)
{
return generateHmac(QCryptographicHash::Md5, key, text);
}
-QByteArray generateHmacSha1(const QByteArray &key, const QByteArray &text)
+QByteArray QXmppUtils::generateHmacSha1(const QByteArray &key, const QByteArray &text)
{
return generateHmac(QCryptographicHash::Sha1, key, text);
}
@@ -257,7 +257,7 @@ QByteArray generateHmacSha1(const QByteArray &key, const QByteArray &text)
///
/// \param N
-int generateRandomInteger(int N)
+int QXmppUtils::generateRandomInteger(int N)
{
Q_ASSERT(N > 0 && N <= RAND_MAX);
int val;
@@ -269,7 +269,7 @@ int generateRandomInteger(int N)
///
/// \param length
-QByteArray generateRandomBytes(int length)
+QByteArray QXmppUtils::generateRandomBytes(int length)
{
QByteArray bytes(length, 'm');
for (int i = 0; i < length; ++i)
@@ -281,7 +281,7 @@ QByteArray generateRandomBytes(int length)
///
/// \param length
-QString generateStanzaHash(int length)
+QString QXmppUtils::generateStanzaHash(int length)
{
const QString somechars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int N = somechars.size();
diff --git a/src/base/QXmppUtils.h b/src/base/QXmppUtils.h
index 3a4dc8f6..74f7cd3c 100644
--- a/src/base/QXmppUtils.h
+++ b/src/base/QXmppUtils.h
@@ -32,29 +32,37 @@
// for an explanation.
#include <QXmlStreamWriter>
+#include "QXmppGlobal.h"
+
class QByteArray;
class QDateTime;
class QDomElement;
class QString;
class QStringList;
-// XEP-0082: XMPP Date and Time Profiles
-QDateTime datetimeFromString(const QString &str);
-QString datetimeToString(const QDateTime &dt);
-int timezoneOffsetFromString(const QString &str);
-QString timezoneOffsetToString(int secs);
+/// \brief The QXmppUtils class contains static utility functions.
+///
+class QXMPP_EXPORT QXmppUtils
+{
+public:
+ // XEP-0082: XMPP Date and Time Profiles
+ static QDateTime datetimeFromString(const QString &str);
+ static QString datetimeToString(const QDateTime &dt);
+ static int timezoneOffsetFromString(const QString &str);
+ static QString timezoneOffsetToString(int secs);
-QString jidToDomain(const QString& jid);
-QString jidToResource(const QString& jid);
-QString jidToUser(const QString& jid);
-QString jidToBareJid(const QString& jid);
+ static QString jidToDomain(const QString& jid);
+ static QString jidToResource(const QString& jid);
+ static QString jidToUser(const QString& jid);
+ static QString jidToBareJid(const QString& jid);
-quint32 generateCrc32(const QByteArray &input);
-QByteArray generateHmacMd5(const QByteArray &key, const QByteArray &text);
-QByteArray generateHmacSha1(const QByteArray &key, const QByteArray &text);
-int generateRandomInteger(int N);
-QByteArray generateRandomBytes(int length);
-QString generateStanzaHash(int length=32);
+ static quint32 generateCrc32(const QByteArray &input);
+ static QByteArray generateHmacMd5(const QByteArray &key, const QByteArray &text);
+ static QByteArray generateHmacSha1(const QByteArray &key, const QByteArray &text);
+ static int generateRandomInteger(int N);
+ static QByteArray generateRandomBytes(int length);
+ static QString generateStanzaHash(int length=32);
+};
void helperToXmlAddAttribute(QXmlStreamWriter* stream, const QString& name,
const QString& value);