aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-28 10:10:06 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-28 10:10:06 +0000
commitd2c606cb668f8b6716eb4c22910f5422e0ca7935 (patch)
tree04829d258bb4dd823b3c7f9df539f130e91037fa /src
parent754ab1a32d250f7fd6110546d8baa5e19b68240d (diff)
downloadqxmpp-d2c606cb668f8b6716eb4c22910f5422e0ca7935.tar.gz
parse / serialise stream compression feature
Diffstat (limited to 'src')
-rw-r--r--src/QXmppConfiguration.h6
-rw-r--r--src/QXmppConstants.cpp1
-rw-r--r--src/QXmppConstants.h1
-rw-r--r--src/QXmppStreamFeatures.cpp40
-rw-r--r--src/QXmppStreamFeatures.h4
5 files changed, 52 insertions, 0 deletions
diff --git a/src/QXmppConfiguration.h b/src/QXmppConfiguration.h
index 6879347d..130d2895 100644
--- a/src/QXmppConfiguration.h
+++ b/src/QXmppConfiguration.h
@@ -73,6 +73,12 @@ public:
SASLAnonymous ///< Anonymous
};
+ /// An enumeration for stream compression methods.
+ enum CompressionMethod
+ {
+ ZlibCompression = 0 ///< zlib compression
+ };
+
QXmppConfiguration();
~QXmppConfiguration();
diff --git a/src/QXmppConstants.cpp b/src/QXmppConstants.cpp
index 1cfbf282..dd15972c 100644
--- a/src/QXmppConstants.cpp
+++ b/src/QXmppConstants.cpp
@@ -38,6 +38,7 @@ const char* ns_vcard = "vcard-temp";
const char* ns_auth = "jabber:iq:auth";
const char* ns_authFeature = "http://jabber.org/features/iq-auth";
const char* ns_capabilities = "http://jabber.org/protocol/caps";
+const char* ns_compress = "http://jabber.org/features/compress";
const char* ns_disco_info = "http://jabber.org/protocol/disco#info";
const char* ns_disco_items = "http://jabber.org/protocol/disco#items";
const char* ns_ibb = "http://jabber.org/protocol/ibb";
diff --git a/src/QXmppConstants.h b/src/QXmppConstants.h
index 9191dd35..fe59d56f 100644
--- a/src/QXmppConstants.h
+++ b/src/QXmppConstants.h
@@ -39,6 +39,7 @@ extern const char* ns_vcard;
extern const char* ns_auth;
extern const char* ns_authFeature;
extern const char* ns_capabilities;
+extern const char* ns_compress;
extern const char* ns_disco_info;
extern const char* ns_disco_items;
extern const char* ns_ibb;
diff --git a/src/QXmppStreamFeatures.cpp b/src/QXmppStreamFeatures.cpp
index 0b78f0e9..fb36f399 100644
--- a/src/QXmppStreamFeatures.cpp
+++ b/src/QXmppStreamFeatures.cpp
@@ -74,6 +74,16 @@ void QXmppStreamFeatures::setAuthMechanisms(QList<QXmppConfiguration::SASLAuthMe
m_authMechanisms = mechanisms;
}
+QList<QXmppConfiguration::CompressionMethod> QXmppStreamFeatures::compressionMethods() const
+{
+ return m_compressionMethods;
+}
+
+void QXmppStreamFeatures::setCompressionMethods(QList<QXmppConfiguration::CompressionMethod> &methods)
+{
+ m_compressionMethods = methods;
+}
+
QXmppConfiguration::StreamSecurityMode QXmppStreamFeatures::securityMode() const
{
return m_securityMode;
@@ -95,6 +105,19 @@ void QXmppStreamFeatures::parse(const QDomElement &element)
m_bindAvailable = !element.firstChildElement("bind").isNull();
m_sessionAvailable = !element.firstChildElement("session").isNull();
+ // parse advertised compression methods
+ QDomElement compression = element.firstChildElement("compression");
+ if (compression.namespaceURI() == ns_compress)
+ {
+ QDomElement subElement = compression.firstChildElement("method");
+ while(!subElement.isNull())
+ {
+ if (subElement.text() == QLatin1String("zlib"))
+ m_compressionMethods << QXmppConfiguration::ZlibCompression;
+ subElement = subElement.nextSiblingElement("method");
+ }
+ }
+
// parse advertised SASL Authentication mechanisms
QDomElement mechs = element.firstChildElement("mechanisms");
if (mechs.namespaceURI() == ns_sasl)
@@ -144,6 +167,23 @@ void QXmppStreamFeatures::toXml(QXmlStreamWriter *writer) const
writer->writeAttribute("xmlns", ns_session);
writer->writeEndElement();
}
+ if (!m_compressionMethods.isEmpty())
+ {
+ writer->writeStartElement("compression");
+ writer->writeAttribute("xmlns", ns_compress);
+ for (int i = 0; i < m_compressionMethods.size(); i++)
+ {
+ writer->writeStartElement("method");
+ switch (m_compressionMethods[i])
+ {
+ case QXmppConfiguration::ZlibCompression:
+ writer->writeCharacters("zlib");
+ break;
+ }
+ writer->writeEndElement();
+ }
+ writer->writeEndElement();
+ }
if (!m_authMechanisms.isEmpty())
{
writer->writeStartElement("mechanisms");
diff --git a/src/QXmppStreamFeatures.h b/src/QXmppStreamFeatures.h
index 0a865033..df2d504f 100644
--- a/src/QXmppStreamFeatures.h
+++ b/src/QXmppStreamFeatures.h
@@ -44,6 +44,9 @@ public:
QList<QXmppConfiguration::SASLAuthMechanism> authMechanisms() const;
void setAuthMechanisms(QList<QXmppConfiguration::SASLAuthMechanism> &mecanisms);
+ QList<QXmppConfiguration::CompressionMethod> compressionMethods() const;
+ void setCompressionMethods(QList<QXmppConfiguration::CompressionMethod> &methods);
+
QXmppConfiguration::StreamSecurityMode securityMode() const;
void setSecurityMode(QXmppConfiguration::StreamSecurityMode mode);
@@ -59,6 +62,7 @@ private:
bool m_sessionAvailable;
bool m_nonSaslAuthAvailable;
QList<QXmppConfiguration::SASLAuthMechanism> m_authMechanisms;
+ QList<QXmppConfiguration::CompressionMethod> m_compressionMethods;
QXmppConfiguration::StreamSecurityMode m_securityMode;
};