QXmpp  Version: 1.15.1
QXmppServer.h
1 // SPDX-FileCopyrightText: 2010 Jeremy LainĂ© <jeremy.laine@m4x.org>
2 //
3 // SPDX-License-Identifier: LGPL-2.1-or-later
4 
5 #ifndef QXMPPSERVER_H
6 #define QXMPPSERVER_H
7 
8 #include "QXmppLogger.h"
9 
10 #include <QTcpServer>
11 #include <QVariantMap>
12 
13 class QDomElement;
14 class QSslCertificate;
15 class QSslKey;
16 class QSslSocket;
17 
18 class QXmppDialback;
22 class QXmppPresence;
24 class QXmppServerPrivate;
25 class QXmppSslServer;
26 class QXmppStanza;
27 
40 class QXMPP_EXPORT QXmppServer : public QXmppLoggable
41 {
42  Q_OBJECT
44  Q_PROPERTY(QXmppLogger *logger READ logger WRITE setLogger NOTIFY loggerChanged)
45 
46 public:
47  QXmppServer(QObject *parent = nullptr);
48  ~QXmppServer() override;
49 
50  void addExtension(QXmppServerExtension *extension);
51  QList<QXmppServerExtension *> extensions();
52 
53  QString domain() const;
54  void setDomain(const QString &domain);
55 
56  // documentation needs to be here, see https://stackoverflow.com/questions/49192523/
58  QXmppLogger *logger();
59  void setLogger(QXmppLogger *logger);
60 
61  QXmppPasswordChecker *passwordChecker();
62  void setPasswordChecker(QXmppPasswordChecker *checker);
63 
64  QVariantMap statistics() const;
65 
66  void addCaCertificates(const QString &caCertificates);
67  void setLocalCertificate(const QString &path);
68  void setLocalCertificate(const QSslCertificate &certificate);
69  void setPrivateKey(const QString &path);
70  void setPrivateKey(const QSslKey &key);
71 
72  void close();
73  bool listenForClients(const QHostAddress &address = QHostAddress::Any, quint16 port = 5222);
74  bool listenForServers(const QHostAddress &address = QHostAddress::Any, quint16 port = 5269);
75 
76  bool sendElement(const QDomElement &element);
77  bool sendPacket(const QXmppStanza &stanza);
78 
79  void addIncomingClient(QXmppIncomingClient *stream);
80 
82  Q_SIGNAL void clientConnected(const QString &jid);
83 
85  Q_SIGNAL void clientDisconnected(const QString &jid);
86 
88  Q_SIGNAL void loggerChanged(QXmppLogger *logger);
89 
90  Q_SLOT void handleElement(const QDomElement &element);
91 
92 private:
93  Q_SLOT void _q_clientConnection(QSslSocket *socket);
94  Q_SLOT void _q_clientConnected();
95  Q_SLOT void _q_clientDisconnected();
96  Q_SLOT void _q_dialbackRequestReceived(const QXmppDialback &dialback);
97  Q_SLOT void _q_outgoingServerDisconnected();
98  Q_SLOT void _q_serverConnection(QSslSocket *socket);
99  Q_SLOT void _q_serverDisconnected();
100 
101  const std::unique_ptr<QXmppServerPrivate> d;
102 
103  friend class QXmppServerPrivate;
104 };
105 
106 class QXmppSslServerPrivate;
107 
110 
111 class QXMPP_EXPORT QXmppSslServer : public QTcpServer
112 {
113  Q_OBJECT
114 
115 public:
116  QXmppSslServer(QObject *parent = nullptr);
117  ~QXmppSslServer() override;
118 
119  void addCaCertificates(const QList<QSslCertificate> &certificates);
120  void setLocalCertificate(const QSslCertificate &certificate);
121  void setPrivateKey(const QSslKey &key);
122 
124  Q_SIGNAL void newConnection(QSslSocket *socket);
125 
126 private:
127  void incomingConnection(qintptr socketDescriptor) override;
128  const std::unique_ptr<QXmppSslServerPrivate> d;
129 };
130 
131 #endif
The QXmppPasswordChecker class represents an abstract password checker.
Definition: QXmppPasswordChecker.h:80
The QXmppSslServer class represents an SSL-enabled TCP server.
Definition: QXmppServer.h:111
The QXmppStanza class is the base class for all XMPP stanzas.
Definition: QXmppStanza.h:105
The QXmppDialback class represents a stanza used for the Server Dialback protocol as specified by XEP...
Definition: QXmppDialback.h:15
The QXmppServer class represents an XMPP server.
Definition: QXmppServer.h:40
The QXmppLoggable class represents a source of logging messages.
Definition: QXmppLogger.h:108
The QXmppServerExtension class is the base class for QXmppServer extensions.
Definition: QXmppServerExtension.h:28
The QXmppIncomingClient class represents an incoming XMPP stream from an XMPP client.
Definition: QXmppIncomingClient.h:26
The QXmppLogger class represents a sink for logging messages.
Definition: QXmppLogger.h:28
The QXmppOutgoingServer class represents an outgoing XMPP stream to another XMPP server.
Definition: QXmppOutgoingServer.h:28
The QXmppPresence class represents an XMPP presence stanza.
Definition: QXmppPresence.h:21