8#include "QXmppLogger.h"
10#include "StreamError.h"
12#include <QAbstractSocket>
13#include <QDomDocument>
15#include <QXmlStreamReader>
21namespace QXmpp::Private {
36class SendDataInterface
39 virtual bool sendData(
const QByteArray &) = 0;
45 struct Unfinished { };
50 UnsupportedXmlFeature,
57 using Result = std::variant<QDomElement, Unfinished, Error>;
59 Result process(QXmlStreamReader &);
63 QDomElement currentElement;
67class QXMPP_EXPORT XmppSocket :
public QXmppLoggable,
public SendDataInterface
71 explicit XmppSocket(QObject *parent);
72 XmppSocket(QSslSocket *socket, QObject *parent);
73 ~XmppSocket()
override =
default;
75 QSslSocket *internalSocket()
const {
return m_socket; }
76 void resetInternalSocket();
78 bool isConnected()
const;
79 void connectToHost(
const ServerAddress &);
80 void disconnectFromHost();
81 bool sendData(
const QByteArray &)
override;
83 bool isStreamReceived()
const {
return m_streamReceived; }
85 Q_SIGNAL
void started();
86 Q_SIGNAL
void disconnected();
87 Q_SIGNAL
void stanzaReceived(
const QDomElement &);
88 Q_SIGNAL
void streamReceived(
const QXmpp::Private::StreamOpen &);
89 Q_SIGNAL
void streamClosed();
90 Q_SIGNAL
void errorOccurred(
const QString &text, std::variant<StreamError, QAbstractSocket::SocketError> condition);
91 Q_SIGNAL
void sslErrorsOccurred(
const QList<QSslError> &errors);
93 Q_SIGNAL
void internalSocketStateChanged();
96 void setSocket(QSslSocket *socket);
97 void throwError(
const QString &text, StreamError condition);
98 void processData(
const QString &data);
100 friend class ::tst_QXmppStream;
102 QXmlStreamReader m_reader;
103 std::optional<DomReader> m_domReader;
104 bool m_streamReceived =
false;
105 bool m_directTls =
false;
106 bool m_acceptInput =
true;
108 QSslSocket *m_socket =
nullptr;
The QXmppLoggable class represents a source of logging messages.
Definition QXmppLogger.h:110