7#ifndef QXMPPOUTGOINGCLIENT_H
8#define QXMPPOUTGOINGCLIENT_H
10#include "QXmppAuthenticationError.h"
11#include "QXmppBindError.h"
12#include "QXmppClient.h"
13#include "QXmppStanza.h"
14#include "QXmppStreamError.h"
16#include <QAbstractSocket>
27class QXmppOutgoingClientPrivate;
30namespace QXmpp::Private {
31class C2sStreamManager;
32class OutgoingIqManager;
34class StreamAckManager;
37enum HandleElementResult {
44namespace QXmpp::Private::Sasl2 {
54 using IqResult = std::variant<QDomElement, QXmppError>;
55 using ConnectionError = std::variant<QAbstractSocket::SocketError, QXmpp::TimeoutError, QXmpp::StreamError, QXmpp::AuthenticationError, QXmpp::BindError>;
57 explicit QXmppOutgoingClient(QObject *parent);
58 ~QXmppOutgoingClient()
override;
61 void disconnectFromHost();
62 bool isAuthenticated()
const;
63 bool isConnected()
const;
64 bool isClientStateIndicationEnabled()
const;
68 QSslSocket *socket()
const;
73 QXmpp::Private::XmppSocket &xmppSocket()
const;
74 QXmpp::Private::StreamAckManager &streamAckManager()
const;
75 QXmpp::Private::OutgoingIqManager &iqManager()
const;
76 QXmpp::Private::C2sStreamManager &c2sStreamManager();
79 Q_SIGNAL
void connected();
82 Q_SIGNAL
void disconnected();
85 Q_SIGNAL
void errorOccurred(
const QString &text,
const QXmppOutgoingClient::ConnectionError &details,
QXmppClient::Error oldError);
88 Q_SIGNAL
void elementReceived(
const QDomElement &element,
bool &handled);
98 Q_SIGNAL
void iqReceived(
const QXmppIq &);
101 Q_SIGNAL
void sslErrors(
const QList<QSslError> &errors);
105 void handlePacketReceived(
const QDomElement &element);
106 QXmpp::Private::HandleElementResult handleElement(
const QDomElement &nodeRecv);
107 void handleStream(
const QDomElement &element);
109 void _q_socketDisconnected();
110 void socketError(QAbstractSocket::SocketError);
111 void socketSslErrors(
const QList<QSslError> &);
113 void startSasl2Auth(
const QXmpp::Private::Sasl2::StreamFeature &sasl2Feature);
114 void startNonSaslAuth();
115 void startResourceBinding();
116 void onSMResumeFinished();
117 void onSMEnableFinished();
118 void throwKeepAliveError();
121 void enableStreamManagement(
bool resetSequenceNumber);
122 bool handleIqResponse(
const QDomElement &);
124 friend class QXmppOutgoingClientPrivate;
125 friend class QXmpp::Private::PingManager;
126 friend class QXmpp::Private::C2sStreamManager;
127 friend class TestClient;
129 const std::unique_ptr<QXmppOutgoingClientPrivate> d;
132namespace QXmpp::Private {
134class C2sStreamManager
137 explicit C2sStreamManager(QXmppOutgoingClient *q);
139 bool handleElement(
const QDomElement &);
140 bool hasResumeAddress()
const {
return m_canResume && !m_resumeHost.isEmpty() && m_resumePort; }
141 std::pair<QString, quint16> resumeAddress()
const {
return { m_resumeHost, m_resumePort }; }
142 void onStreamStart();
144 void onDisconnecting();
145 bool canResume()
const {
return m_canResume; }
146 bool enabled()
const {
return m_enabled; }
147 bool streamResumed()
const {
return m_streamResumed; }
148 bool canRequestResume()
const {
return m_smAvailable && m_canResume; }
149 void requestResume();
150 bool canRequestEnable()
const {
return m_smAvailable; }
151 void requestEnable();
154 friend class ::TestClient;
156 bool setResumeAddress(
const QString &address);
157 void setEnabled(
bool enabled) { m_enabled = enabled; }
158 void setResumed(
bool resumed) { m_streamResumed = resumed; }
160 QXmppOutgoingClient *q;
162 bool m_smAvailable =
false;
164 bool m_canResume =
false;
165 bool m_isResuming =
false;
166 QString m_resumeHost;
167 quint16 m_resumePort = 0;
168 bool m_enabled =
false;
169 bool m_streamResumed =
false;
Error
Definition QXmppClient.h:99
The QXmppConfiguration class holds configuration options.
Definition QXmppConfiguration.h:32
The QXmppIq class is the base class for all IQs.
Definition QXmppIq.h:23
The QXmppLoggable class represents a source of logging messages.
Definition QXmppLogger.h:110
The QXmppMessage class represents an XMPP message.
Definition QXmppMessage.h:39
The QXmppPresence class represents an XMPP presence stanza.
Definition QXmppPresence.h:21
Condition
A detailed condition of the error.
Definition QXmppStanza.h:110
The QXmppStreamFeatures class represents the features returned by an XMPP server or client.
Definition QXmppStreamFeatures.h:23
Definition QXmppTask.h:62