From e4c9336b2319aba7cc254b84b76e957e92b301e6 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Sat, 14 Dec 2019 23:44:51 +0100 Subject: server: Replace manual checks and hard-coded XML by QXmppStartTlsPacket --- src/server/QXmppIncomingClient.cpp | 10 ++++------ src/server/QXmppIncomingServer.cpp | 10 ++++------ src/server/QXmppOutgoingServer.cpp | 32 +++++++++++--------------------- 3 files changed, 19 insertions(+), 33 deletions(-) (limited to 'src/server') diff --git a/src/server/QXmppIncomingClient.cpp b/src/server/QXmppIncomingClient.cpp index c7da7bfd..009d4427 100644 --- a/src/server/QXmppIncomingClient.cpp +++ b/src/server/QXmppIncomingClient.cpp @@ -33,6 +33,7 @@ #include "QXmppPasswordChecker.h" #include "QXmppSasl_p.h" #include "QXmppSessionIq.h" +#include "QXmppStartTlsPacket.h" #include "QXmppStreamFeatures.h" #include "QXmppUtils.h" @@ -237,15 +238,12 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) if (d->idleTimer->interval()) d->idleTimer->start(); - if (ns == ns_tls && nodeRecv.tagName() == QLatin1String("starttls")) - { - sendData(""); + if (QXmppStartTlsPacket::isStartTlsPacket(nodeRecv, QXmppStartTlsPacket::StartTls)) { + sendPacket(QXmppStartTlsPacket(QXmppStartTlsPacket::Proceed)); socket()->flush(); socket()->startServerEncryption(); return; - } - else if (ns == ns_sasl) - { + } else if (ns == ns_sasl) { if (!d->passwordChecker) { warning("Cannot perform authentication, no password checker"); sendPacket(QXmppSaslFailure("temporary-auth-failure")); diff --git a/src/server/QXmppIncomingServer.cpp b/src/server/QXmppIncomingServer.cpp index f121e479..bc76738d 100644 --- a/src/server/QXmppIncomingServer.cpp +++ b/src/server/QXmppIncomingServer.cpp @@ -30,6 +30,7 @@ #include "QXmppDialback.h" #include "QXmppIncomingServer.h" #include "QXmppOutgoingServer.h" +#include "QXmppStartTlsPacket.h" #include "QXmppStreamFeatures.h" #include "QXmppUtils.h" @@ -129,15 +130,12 @@ void QXmppIncomingServer::handleStanza(const QDomElement &stanza) { const QString ns = stanza.namespaceURI(); - if (ns == ns_tls && stanza.tagName() == QLatin1String("starttls")) - { - sendData(""); + if (QXmppStartTlsPacket::isStartTlsPacket(stanza, QXmppStartTlsPacket::StartTls)) { + sendPacket(QXmppStartTlsPacket(QXmppStartTlsPacket::Proceed)); socket()->flush(); socket()->startServerEncryption(); return; - } - else if (QXmppDialback::isDialback(stanza)) - { + } else if (QXmppDialback::isDialback(stanza)) { QXmppDialback request; request.parse(stanza); // check the request is valid diff --git a/src/server/QXmppOutgoingServer.cpp b/src/server/QXmppOutgoingServer.cpp index aec5018a..99e9fd9a 100644 --- a/src/server/QXmppOutgoingServer.cpp +++ b/src/server/QXmppOutgoingServer.cpp @@ -32,6 +32,7 @@ #include "QXmppConstants_p.h" #include "QXmppDialback.h" #include "QXmppOutgoingServer.h" +#include "QXmppStartTlsPacket.h" #include "QXmppStreamFeatures.h" #include "QXmppUtils.h" @@ -162,17 +163,14 @@ void QXmppOutgoingServer::handleStanza(const QDomElement &stanza) { const QString ns = stanza.namespaceURI(); - if(QXmppStreamFeatures::isStreamFeatures(stanza)) - { + if(QXmppStreamFeatures::isStreamFeatures(stanza)) { QXmppStreamFeatures features; features.parse(stanza); - if (!socket()->isEncrypted()) - { + if (!socket()->isEncrypted()) { // check we can satisfy TLS constraints if (!socket()->supportsSsl() && - features.tlsMode() == QXmppStreamFeatures::Required) - { + features.tlsMode() == QXmppStreamFeatures::Required) { warning("Disconnecting as TLS is required, but SSL support is not available"); disconnectFromHost(); return; @@ -180,9 +178,8 @@ void QXmppOutgoingServer::handleStanza(const QDomElement &stanza) // enable TLS if possible if (socket()->supportsSsl() && - features.tlsMode() != QXmppStreamFeatures::Disabled) - { - sendData(""); + features.tlsMode() != QXmppStreamFeatures::Disabled) { + sendPacket(QXmppStartTlsPacket(QXmppStartTlsPacket::StartTls)); return; } } @@ -190,18 +187,11 @@ void QXmppOutgoingServer::handleStanza(const QDomElement &stanza) // send dialback if needed d->dialbackTimer->stop(); sendDialback(); - } - else if (ns == ns_tls) - { - if (stanza.tagName() == QLatin1String("proceed")) - { - debug("Starting encryption"); - socket()->startClientEncryption(); - return; - } - } - else if (QXmppDialback::isDialback(stanza)) - { + } else if (QXmppStartTlsPacket::isStartTlsPacket(stanza, QXmppStartTlsPacket::Proceed)) { + debug("Starting encryption"); + socket()->startClientEncryption(); + return; + } else if (QXmppDialback::isDialback(stanza)) { QXmppDialback response; response.parse(stanza); -- cgit v1.2.3