swift
dbusserver.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2014 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_DBUSSERVER_H
7 #define SWIFT_MISC_DBUSSERVER_H
8 
9 #include <QDBusConnection>
10 #include <QDBusError>
11 #include <QFlags>
12 #include <QMap>
13 #include <QObject>
14 #include <QScopedPointer>
15 #include <QString>
16 
17 #include "misc/logcategories.h"
18 #include "misc/swiftmiscexport.h"
19 
20 class QDBusServer;
21 
23 #define SWIFT_SERVICENAME "org.swift-project"
24 
25 namespace swift::misc
26 {
33  class SWIFT_MISC_EXPORT CDBusServer : public QObject
34  {
35  Q_OBJECT
36 
37  public:
39  static const QString &coreServiceName();
40 
42  static const QString &coreServiceName(const QDBusConnection &connection);
43 
45  static const QStringList &getLogCategories();
46 
49  {
50  SERVERMODE_P2P,
51  SERVERMODE_SESSIONBUS,
52  SERVERMODE_SYSTEMBUS
53  };
54 
56  CDBusServer(const QString &address, QObject *parent = nullptr) : CDBusServer(coreServiceName(), address, parent)
57  {}
58 
60  CDBusServer(const QString &service, const QString &address, QObject *parent = nullptr);
61 
63  virtual ~CDBusServer() override;
64 
66  void addObject(const QString &name, QObject *object);
67 
69  QDBusError lastQDBusServerError() const;
70 
72  const QDBusServer *qDBusServer() const;
73 
75  bool hasQDBusServer() const;
76 
78  void removeAllObjects();
79 
81  static const QDBusConnection &defaultConnection();
82 
84  static const QString &sessionBusAddress();
85 
87  static const QString &systemBusAddress();
88 
90  static QDBusConnection connectToDBus(const QString &dbusAddress, const QString &name = {});
91 
93  static void disconnectFromDBus(const QDBusConnection &connection, const QString &dBusAddress);
94 
98  static QString p2pAddress(const QString &host, const QString &port = "");
99 
101  static const QString &p2pConnectionName();
102 
106  static QString normalizeAddress(const QString &address);
107 
109  static ServerMode modeOfAddress(QString address);
110 
112  static const QString &modeToString(ServerMode mode);
113 
115  static bool isQtDBusAddress(const QString &address);
116 
119  static bool isSessionOrSystemAddress(const QString &address);
120 
122  static bool isP2PAddress(const QString &address);
123 
125  static bool isP2PConnection(const QDBusConnection &connection);
126 
128  static bool dBusAddressToHostAndPort(const QString &dbusAddress, QString &o_host, int &o_port);
129 
131  static bool dBusAddressToHostAndPort(const QString &dbusAddress, QString &o_host, QString &o_port);
132 
134  static bool isQtDefaultConnection(const QDBusConnection &connection);
135 
139  static bool isDBusAvailable(const QString &host, int port, int timeoutMs = 1500);
140  static bool isDBusAvailable(const QString &host, int port, QString &message, int timeoutMs = 1500);
141  static bool isDBusAvailable(const QString &dbusAddress, QString &message, int timeoutMs = 1500);
142  static bool isDBusAvailable(const QString &dbusAddress, int timeoutMs = 1500);
144 
145  private:
146  ServerMode m_serverMode = SERVERMODE_P2P;
147  QScopedPointer<QDBusServer> m_busServer;
148  QMap<QString, QObject *> m_objects;
149  QMap<QString, QDBusConnection> m_connections;
150 
152  static QString getDBusInterfaceFromClassInfo(QObject *object);
153 
155  static QDBusConnection::RegisterOptions registerOptions();
156 
158  bool registerObjectsWithP2PConnection(QDBusConnection connection);
159  };
160 } // namespace swift::misc
161 
162 #endif // SWIFT_MISC_DBUSSERVER_H
Custom DBusServer.
Definition: dbusserver.h:34
ServerMode
Server mode.
Definition: dbusserver.h:49
CDBusServer(const QString &address, QObject *parent=nullptr)
Construct a server for the core service.
Definition: dbusserver.h:56
Free functions in swift::misc.
#define SWIFT_MISC_EXPORT
Export a class or function from the library.