blob: 445f519e284a6b69845bcbf5d92abb16145fe3aa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/*
* 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 <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;
if (auto index = STARTTLS_TYPES.indexOf(element.tagName()); index >= 0) {
m_type = Type(index);
} else {
m_type = Invalid;
}
}
void QXmppStartTlsPacket::toXml(QXmlStreamWriter *writer) const
{
if (m_type != Invalid) {
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
/// <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));
}
|