/* * Copyright (C) 2008-2021 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 #include 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->writeDefaultNamespace(ns_tls); writer->writeEndElement(); } /// \endcond /// Checks whether the given \p element is a STARTTLS packet according to /// RFC6120. /// /// \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 /// RFC6120 /// 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)); }