aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppByteStreamIq.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-02-25 12:21:53 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-02-25 12:21:53 +0000
commitb9123796e79b1f9c08b5b113900826008f5d6dc8 (patch)
tree5a18ffd99ee0af574f83f3e88aaf421abf5aa68c /source/QXmppByteStreamIq.cpp
parent9334406b1ac2716ba799c5bb71d25efefaca29bc (diff)
downloadqxmpp-b9123796e79b1f9c08b5b113900826008f5d6dc8.tar.gz
add code for handling SOCKS5 bytestreams
Diffstat (limited to 'source/QXmppByteStreamIq.cpp')
-rw-r--r--source/QXmppByteStreamIq.cpp163
1 files changed, 163 insertions, 0 deletions
diff --git a/source/QXmppByteStreamIq.cpp b/source/QXmppByteStreamIq.cpp
new file mode 100644
index 00000000..3f9f3ecb
--- /dev/null
+++ b/source/QXmppByteStreamIq.cpp
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2010 Bolloré telecom
+ *
+ * Author:
+ * Jeremy Lainé
+ *
+ * Source:
+ * http://code.google.com/p/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+#include <QDomElement>
+
+#include "QXmppByteStreamIq.h"
+#include "QXmppConstants.h"
+#include "QXmppUtils.h"
+
+QHostAddress QXmppByteStreamIq::StreamHost::host() const
+{
+ return m_host;
+}
+
+void QXmppByteStreamIq::StreamHost::setHost(const QHostAddress &host)
+{
+ m_host = host;
+}
+
+QString QXmppByteStreamIq::StreamHost::jid() const
+{
+ return m_jid;
+}
+
+void QXmppByteStreamIq::StreamHost::setJid(const QString &jid)
+{
+ m_jid = jid;
+}
+
+quint16 QXmppByteStreamIq::StreamHost::port() const
+{
+ return m_port;
+}
+
+void QXmppByteStreamIq::StreamHost::setPort(quint16 port)
+{
+ m_port = port;
+}
+
+QXmppByteStreamIq::Mode QXmppByteStreamIq::mode() const
+{
+ return m_mode;
+}
+
+void QXmppByteStreamIq::setMode(QXmppByteStreamIq::Mode mode)
+{
+ m_mode = mode;
+}
+
+QString QXmppByteStreamIq::sid() const
+{
+ return m_sid;
+}
+
+void QXmppByteStreamIq::setSid(const QString &sid)
+{
+ m_sid = sid;
+}
+
+QList<QXmppByteStreamIq::StreamHost> QXmppByteStreamIq::streamHosts() const
+{
+ return m_streamHosts;
+}
+
+void QXmppByteStreamIq::setStreamHosts(const QList<QXmppByteStreamIq::StreamHost> &streamHosts)
+{
+ m_streamHosts = streamHosts;
+}
+
+QString QXmppByteStreamIq::streamHostUsed() const
+{
+ return m_streamHostUsed;
+}
+
+void QXmppByteStreamIq::setStreamHostUsed(const QString &jid)
+{
+ m_streamHostUsed = jid;
+}
+
+bool QXmppByteStreamIq::isByteStreamIq(QDomElement &element)
+{
+ return element.firstChildElement("query").namespaceURI() == ns_bytestreams;
+}
+
+void QXmppByteStreamIq::parse(QDomElement &element)
+{
+ setId(element.attribute("id"));
+ setFrom(element.attribute("from"));
+ setTo(element.attribute("to"));
+ setTypeFromStr(element.attribute("type"));
+
+ QDomElement queryElement = element.firstChildElement("query");
+ m_sid = queryElement.attribute("sid");
+ const QString modeStr = queryElement.attribute("mode");
+ if (modeStr == "tcp")
+ m_mode = Tcp;
+ else if (modeStr == "udp")
+ m_mode = Udp;
+ else
+ m_mode = None;
+
+ QDomElement hostElement = queryElement.firstChildElement("streamhost");
+ while (!hostElement.isNull())
+ {
+ StreamHost streamHost;
+ streamHost.setHost(QHostAddress(hostElement.attribute("host")));
+ streamHost.setJid(hostElement.attribute("jid"));
+ streamHost.setPort(hostElement.attribute("port").toInt());
+ m_streamHosts.append(streamHost);
+
+ hostElement = hostElement.nextSiblingElement("streamhost");
+ }
+ m_streamHostUsed = queryElement.firstChildElement("streamhost-used").attribute("jid");
+}
+
+void QXmppByteStreamIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+{
+ writer->writeStartElement("query");
+ helperToXmlAddAttribute(writer, "xmlns", ns_bytestreams);
+ helperToXmlAddAttribute(writer, "sid", m_sid);
+ QString modeStr;
+ if (m_mode == Tcp)
+ modeStr = "tcp";
+ else if (m_mode == Udp)
+ modeStr = "udp";
+ helperToXmlAddAttribute(writer, "mode", modeStr);
+ foreach (const StreamHost& streamHost, m_streamHosts)
+ {
+ writer->writeStartElement("streamhost");
+ helperToXmlAddAttribute(writer, "host", streamHost.host().toString());
+ helperToXmlAddAttribute(writer, "jid", streamHost.jid());
+ helperToXmlAddAttribute(writer, "port", QString::number(streamHost.port()));
+ writer->writeEndElement();
+ }
+ if (!m_streamHostUsed.isEmpty())
+ {
+ writer->writeStartElement("streamhost-used");
+ helperToXmlAddAttribute(writer, "jid", m_streamHostUsed);
+ writer->writeEndElement();
+ }
+
+ writer->writeEndElement();
+}