diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-04-20 15:21:56 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-04-20 15:21:56 +0000 |
| commit | 7de79b51bb991b6d237522d3d30c73127dedbfa6 (patch) | |
| tree | 8f4c38bba237fb02be1f35ad9208fef06d4e38e3 /src/base | |
| parent | d648473c16ac3fe5ce4f4b79c188b9bade381425 (diff) | |
| download | qxmpp-7de79b51bb991b6d237522d3d30c73127dedbfa6.tar.gz | |
encapsulate QXmppUtils methods in a QXmppUtils class
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppArchiveIq.cpp | 24 | ||||
| -rw-r--r-- | src/base/QXmppEntityTimeIq.cpp | 8 | ||||
| -rw-r--r-- | src/base/QXmppMessage.cpp | 4 | ||||
| -rw-r--r-- | src/base/QXmppSaslAuth.cpp | 2 | ||||
| -rw-r--r-- | src/base/QXmppStun.cpp | 42 | ||||
| -rw-r--r-- | src/base/QXmppUtils.cpp | 28 | ||||
| -rw-r--r-- | src/base/QXmppUtils.h | 38 |
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); |
