diff options
Diffstat (limited to 'src/base/QXmppStartTlsPacket.cpp')
| -rw-r--r-- | src/base/QXmppStartTlsPacket.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/base/QXmppStartTlsPacket.cpp b/src/base/QXmppStartTlsPacket.cpp new file mode 100644 index 00000000..46aafc7d --- /dev/null +++ b/src/base/QXmppStartTlsPacket.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2008-2019 The QXmpp developers + * + * Authors: + * Linus Jahn + * + * Source: + * https://github.com/qxmpp-project/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 "QXmppStartTlsPacket.h" + +#include "QXmppConstants_p.h" + +#include <QDomElement> +#include <QXmlStreamWriter> + +const static QStringList STARTTLS_TYPES = { + QStringLiteral("starttls"), + QStringLiteral("proceed"), + QStringLiteral("failure") +}; + +/// Constructs a new QXmppStartTlsPacket +/// +/// \param type The type of the new QXmppStartTlsPacket. + +QXmppStartTlsPacket::QXmppStartTlsPacket(Type type) + : m_type(type) +{ +} + +QXmppStartTlsPacket::~QXmppStartTlsPacket() = default; + +/// Returns the type of the STARTTLS packet + +QXmppStartTlsPacket::Type QXmppStartTlsPacket::type() const +{ + return m_type; +} + +/// Sets the type of the STARTTLS packet + +void QXmppStartTlsPacket::setType(QXmppStartTlsPacket::Type type) +{ + m_type = type; +} + +/// \cond +void QXmppStartTlsPacket::parse(const QDomElement &element) +{ + if (!QXmppStartTlsPacket::isStartTlsPacket(element)) + return; + + m_type = Type(STARTTLS_TYPES.indexOf(element.tagName())); +} + +void QXmppStartTlsPacket::toXml(QXmlStreamWriter *writer) const +{ + writer->writeStartElement(STARTTLS_TYPES.at(int(m_type))); + writer->writeAttribute(QStringLiteral("xmlns"), ns_tls); + writer->writeEndElement(); +} +/// \endcond + +/// Checks whether the given \p element is a STARTTLS packet according to +/// <a href="https://xmpp.org/rfcs/rfc6120.html#tls-process-initiate">RFC6120</a>. +/// +/// \param element The element that should be checked for being a STARTTLS packet. +/// +/// \returns True, if the element is a STARTTLS packet. + +bool QXmppStartTlsPacket::isStartTlsPacket(const QDomElement &element) +{ + return element.namespaceURI() == ns_tls && STARTTLS_TYPES.contains(element.tagName()); +} + +/// Checks whether the given \p element is a STARTTLS packet according to +/// <a href="https://xmpp.org/rfcs/rfc6120.html#tls-process-initiate">RFC6120</a> +/// and has the correct type. +/// +/// \param element The element that should be checked for being a STARTTLS packet. +/// \param type The type the element needs to have. +/// +/// \returns True, if the element is a STARTTLS packet and has the correct type. + +bool QXmppStartTlsPacket::isStartTlsPacket(const QDomElement &element, Type type) +{ + return element.namespaceURI() == ns_tls && element.tagName() == STARTTLS_TYPES.at(int(type)); +} |
