sdbus-c++  1.6.0
High-level C++ D-Bus library based on systemd D-Bus implementation
IConnection.h
Go to the documentation of this file.
1 
27 #ifndef SDBUS_CXX_ICONNECTION_H_
28 #define SDBUS_CXX_ICONNECTION_H_
29 
30 #include <sdbus-c++/TypeTraits.h>
31 #include <string>
32 #include <memory>
33 #include <chrono>
34 #include <cstdint>
35 #include <optional>
36 
37 struct sd_bus;
38 
39 namespace sdbus {
40 
41  /********************************************/
52  {
53  public:
67  struct PollData
68  {
72  int fd;
76  short int events;
77 
81  uint64_t timeout_usec;
82 
90  [[nodiscard]] std::chrono::microseconds getAbsoluteTimeout() const
91  {
92  return std::chrono::microseconds(timeout_usec);
93  }
94 
100  [[nodiscard]] std::optional<std::chrono::microseconds> getRelativeTimeout() const;
101 
108  [[nodiscard]] int getPollTimeout() const;
109  };
110 
111  virtual ~IConnection() = default;
112 
120  virtual void requestName(const std::string& name) = 0;
121 
129  virtual void releaseName(const std::string& name) = 0;
130 
136  virtual std::string getUniqueName() const = 0;
137 
146  virtual void enterEventLoop() = 0;
147 
154  virtual void enterEventLoopAsync() = 0;
155 
163  virtual void leaveEventLoop() = 0;
164 
180  [[deprecated("Use one of other addObjectManager overloads")]] virtual void addObjectManager(const std::string& objectPath) = 0;
181 
200  virtual PollData getEventLoopPollData() const = 0;
201 
220  virtual bool processPendingRequest() = 0;
221 
234  virtual void setMethodCallTimeout(uint64_t timeout) = 0;
235 
239  template <typename _Rep, typename _Period>
240  void setMethodCallTimeout(const std::chrono::duration<_Rep, _Period>& timeout);
241 
251  virtual uint64_t getMethodCallTimeout() const = 0;
252 
268  virtual void addObjectManager(const std::string& objectPath, floating_slot_t) = 0;
269 
291  [[nodiscard]] virtual Slot addMatch(const std::string& match, message_handler callback) = 0;
292 
308  virtual void addMatch(const std::string& match, message_handler callback, floating_slot_t) = 0;
309 
329  [[nodiscard]] virtual Slot addMatchAsync(const std::string& match, message_handler callback, message_handler installCallback) = 0;
330 
347  virtual void addMatchAsync(const std::string& match, message_handler callback, message_handler installCallback, floating_slot_t) = 0;
348 
354  [[deprecated("This function has been replaced by enterEventLoop()")]] void enterProcessingLoop();
355 
361  [[deprecated("This function has been replaced by enterEventLoopAsync()")]] void enterProcessingLoopAsync();
362 
368  [[deprecated("This function has been replaced by leaveEventLoop()")]] void leaveProcessingLoop();
369 
375  [[deprecated("This function has been replaced by getEventLoopPollData()")]] PollData getProcessLoopPollData() const;
376  };
377 
378  template <typename _Rep, typename _Period>
379  inline void IConnection::setMethodCallTimeout(const std::chrono::duration<_Rep, _Period>& timeout)
380  {
381  auto microsecs = std::chrono::duration_cast<std::chrono::microseconds>(timeout);
382  return setMethodCallTimeout(microsecs.count());
383  }
384 
386  {
387  enterEventLoop();
388  }
389 
391  {
393  }
394 
396  {
397  leaveEventLoop();
398  }
399 
401  {
402  return getEventLoopPollData();
403  }
404 
412  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createConnection();
413 
422  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createConnection(const std::string& name);
423 
431  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createDefaultBusConnection();
432 
441  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createDefaultBusConnection(const std::string& name);
442 
450  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSystemBusConnection();
451 
460  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSystemBusConnection(const std::string& name);
461 
469  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSessionBusConnection();
470 
479  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSessionBusConnection(const std::string& name);
480 
491  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createSessionBusConnectionWithAddress(const std::string& address);
492 
501  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createRemoteSystemBusConnection(const std::string& host);
502 
511  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createDirectBusConnection(const std::string& address);
512 
524  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createDirectBusConnection(int fd);
525 
540  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createServerBus(int fd);
541 
569  [[nodiscard]] std::unique_ptr<sdbus::IConnection> createBusConnection(sd_bus *bus);
570 }
571 
572 #endif /* SDBUS_CXX_ICONNECTION_H_ */
std::unique_ptr< sdbus::IConnection > createServerBus(int fd)
Opens direct D-Bus connection at fd as a server.
std::unique_ptr< sdbus::IConnection > createRemoteSystemBusConnection(const std::string &host)
Creates/opens D-Bus system connection on a remote host using ssh.
std::unique_ptr< sdbus::IConnection > createDefaultBusConnection()
Creates/opens D-Bus session bus connection when in a user context, and a system bus connection,...
std::unique_ptr< sdbus::IConnection > createSystemBusConnection()
Creates/opens D-Bus system bus connection.
std::unique_ptr< sdbus::IConnection > createDirectBusConnection(const std::string &address)
Opens direct D-Bus connection at a custom address.
std::unique_ptr< sdbus::IConnection > createSessionBusConnection()
Creates/opens D-Bus session bus connection.
std::unique_ptr< sdbus::IConnection > createConnection()
Creates/opens D-Bus system bus connection.
std::unique_ptr< sdbus::IConnection > createBusConnection(sd_bus *bus)
Creates sdbus-c++ bus connection representation out of underlying sd_bus instance.
std::unique_ptr< sdbus::IConnection > createSessionBusConnectionWithAddress(const std::string &address)
Creates/opens D-Bus session bus connection at a custom address.
Definition: IConnection.h:52
void leaveProcessingLoop()
Leaves the I/O event loop running on this bus connection.
Definition: IConnection.h:395
void enterProcessingLoop()
Enters I/O event loop on this bus connection.
Definition: IConnection.h:385
virtual void releaseName(const std::string &name)=0
Releases D-Bus name on the connection.
virtual void leaveEventLoop()=0
Leaves the I/O event loop running on this bus connection.
virtual bool processPendingRequest()=0
Process a pending request.
virtual void requestName(const std::string &name)=0
Requests D-Bus name on the connection.
virtual void addObjectManager(const std::string &objectPath)=0
Adds an ObjectManager at the specified D-Bus object path.
virtual std::string getUniqueName() const =0
Retrieve the unique name of a connection. E.g. ":1.xx".
virtual void setMethodCallTimeout(uint64_t timeout)=0
Sets general method call timeout.
virtual void enterEventLoop()=0
Enters I/O event loop on this bus connection.
virtual uint64_t getMethodCallTimeout() const =0
Gets general method call timeout.
virtual void addObjectManager(const std::string &objectPath, floating_slot_t)=0
Adds an ObjectManager at the specified D-Bus object path.
virtual PollData getEventLoopPollData() const =0
Returns fd, I/O events and timeout data you can pass to poll.
virtual void addMatch(const std::string &match, message_handler callback, floating_slot_t)=0
Installs a floating match rule for messages received on this bus connection.
virtual void enterEventLoopAsync()=0
Enters I/O event loop on this bus connection in a separate thread.
PollData getProcessLoopPollData() const
Returns fd, I/O events and timeout data you can pass to poll.
Definition: IConnection.h:400
void enterProcessingLoopAsync()
Enters I/O event loop on this bus connection in a separate thread.
Definition: IConnection.h:390
virtual Slot addMatch(const std::string &match, message_handler callback)=0
Installs a match rule for messages received on this bus connection.
virtual void addMatchAsync(const std::string &match, message_handler callback, message_handler installCallback, floating_slot_t)=0
Asynchronously installs a floating match rule for messages received on this bus connection.
virtual Slot addMatchAsync(const std::string &match, message_handler callback, message_handler installCallback)=0
Asynchronously installs a match rule for messages received on this bus connection.
Definition: IConnection.h:68
short int events
Definition: IConnection.h:76
uint64_t timeout_usec
Definition: IConnection.h:81
int fd
Definition: IConnection.h:72
std::optional< std::chrono::microseconds > getRelativeTimeout() const
std::chrono::microseconds getAbsoluteTimeout() const
Definition: IConnection.h:90
Definition: TypeTraits.h:79