Commit Graph
412 Commits
Author SHA1 Message Date
Stanislav Angelovič abc4d755f7 fix: conditional use and tests of span (#411) 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 4c35e98668 fix: pass correctly underlying lib to intg tests 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 87500ad9ad docs: add v2 migration notes to the tutorial (#407) 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 9a5616a87a refactor: rename connection creation methods (#406)
This PR makes things around connection factories a little more consistent and more intuitive:

    * createConnection() has been removed. One shall call more expressive createSystemConnection() instead to get a connection to the system bus.
    * createDefaultBusConnection() has been renamed to createBusConnection(), so as not to be confused with libsystemd's default_bus, which is a different thing (a reusable thread-local bus).

Proxies still by default call createBusConnection() to get a connection when the connection is not provided explicitly by the caller, but now createBusConnection() does a different thing, so now the proxies connect to either session bus or system bus depending on the context (as opposed to always to system bus like before).

The integration tests were modified to use createBusConnection().
2024-04-24 20:20:29 +02:00
Stanislav Angelovič 4a90f80933 chore: update ChangeLog for v2.0.0 (#405) 2024-04-24 20:20:29 +02:00
Stanislav Angelovič d177d2e365 chore: reorder some API functions (#404)
In sdbus-c++ v1, new virtual functions (e.g. overloads of existing virtual functions) were always placed at the end of the class to keep backwards ABI compatibility. Now, with v2, these functions are reordered and functions forming a logical group are together.
2024-04-24 20:20:29 +02:00
Stanislav Angelovič c205178fc0 chore: rename COMPONENTs in CMake (#402) 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 280fcfb067 refactor: remove deprecated API stuff (#403) 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 0074c79e7f refactor: rename and re-organize CMake options (#401)
This improves usability of sdbus-c++ in downstream CMake projects. CMake options now have `SDBUSCPP_` prefix so potential conflicts with downstream options/variables are minimized. Also, all configurable options and variables are placed in a single place in the root CMake file.
2024-04-24 20:20:29 +02:00
Stanislav Angelovič 3de2812a60 refactor: use optional for passing potential call errors (#396)
This switches from a raw pointer to std::optional type to pass prospective call errors to the client (using std::optional was not possible years back when sdbus-c++ was based on C++14). This makes the API a little clearer, safer, idiomatically more expressive, and removes potential confusion associated with raw pointers (like ownership, lifetime questions, etc.).
2024-04-24 20:20:29 +02:00
Stanislav Angelovič 914d133d10 refactor: add nodiscard attribute for more functions 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 4721060d76 refactor: use correct header include order 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 1c72f1ce52 refactor: add Async suffix to async callMethod functions (#394)
This makes naming consistent, so all asynchronously working functions have Async suffix
2024-04-24 20:20:29 +02:00
Stanislav Angelovic b65461c404 refactor: add nodiscard attribute for some functions 2024-04-24 20:20:29 +02:00
Stanislav Angelovic 24776f2047 chore: remove legacy comments 2024-04-24 20:20:29 +02:00
Stanislav Angelovic f1b9226491 refactor: remove deprecated dont_request_slot_t tag 2024-04-24 20:20:29 +02:00
Stanislav Angelovic dc0c2562b8 refactor: rename request_slot tag to return_slot 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 84932a6985 refactor: improve Proxy signal subscription (#389)
This makes D-Bus proxy signal registration more flexible, more dynamic, and less error-prone since no `finishRegistration()` call is needed. A proxy can register to a signal at any time during its lifetime, and can unregister freely by simply destroying the associated slot.
2024-04-24 20:20:29 +02:00
Stanislav Angelovič bdf313bc60 refactor: improve Object vtable registration (#388)
This improves the D-Bus object API registration/unregistration by making it more flexible, more dynamic, closer to sd-bus API design but still on high abstraction level, and -- most importantly -- less error-prone since no `finishRegistration()` call is needed anymore.
2024-04-24 20:20:29 +02:00
Stanislav Angelovič e76d38c317 fix: add missing header to ScopeGuard.h 2024-04-24 20:20:29 +02:00
Stanislav Angelovič c92f5722c7 refactor: use sd_bus_match_signal() for signal registration (#372)
sd_bus_match_signal() is more convenient than more general sd_bus_add_match() for signal registration, and requires less code on our side. Plus, systemd of at least v238 is required for sdbus-c++ v2, and this version already ships with sd_bus_match_signal().
2024-04-24 20:20:29 +02:00
Stanislav Angelovič 20a13eeafb refactor: make Variant constructor explicit (#370)
This makes the library more robust and prone to user's errors when the user writes an extension for their custom type. In case they forget to implement a serialization function for that type and yet insert an object of that type into sdbus::Message, the current behavior is that, surprisingly, the library masks the error as it resolves the call to the Variant overload, because Variant provides an implicit template converting constructor, so the library tries to construct first the Variant object from the object of custom type, and then inserting into the message that Variant object. Variant constructor serializes the underlying object into its internal message object, which resolves to the same message insertion overload, creating an infinite recursion and ultimately the stack overflow. This is undesired and plain wrong. Marking this Variant converting constructor solves these problems, plus in overall it makes the code a little safer and more verbose. With explicit Variant constructor, when the user forgets to implement a serialization function for their type, the call of such function will fail with an expressive compilation error, and will produce no undesired, surprising results.
2024-04-24 20:20:29 +02:00
Stanislav Angelovič 4fd09d4e81 fix(tests): enable skipped test for Clang and FreeBSD (#369)
The test now works with Clang, libc++ and -O2 optimization, since the underlying implementation has been completely re-designed and doesn't suffer from that problem anymore.
2024-04-24 20:20:29 +02:00
Stanislav Angelovič 35fd3ff5ce refactor: simplify async call state flag (#368)
Since synchronous D-Bus calls are simplified in v2.0 and no more implemented in terms of an async call, the issue reported in #362 is no more relevant, and we can return to the simple boolean flag for indicating a finished call.
2024-04-24 20:20:29 +02:00
Stanislav Angelovič 6f35f00fcf refactor: let callbacks take message objects by value (#367)
Signatures of callbacks async_reply_handler, signal_handler, message_handler and property_set_callback were modified to take input message objects by value, as opposed to non-const ref.

The callee assumes ownership of the message. This API is more idiomatic, more expressive, cleaner and safer. Move semantics is used to pass messages to the callback handlers. In some cases, this also improves performance.
2024-04-24 20:20:29 +02:00
Stanislav Angelovic 9412940d1e refactor: use sd-bus API to get current message 2024-04-24 20:20:29 +02:00
Marcel Hellwig c6afa26541 fix: update cmake version for library to 2.0.0
This will also install the library as `libsdbus-c++.so.2.0.0`, which
represents the actual version of this library
2024-04-24 20:20:29 +02:00
Marcel Hellwig b4d036c503 fix: prevent installing a time event, when there's no need for a timeout
See #324 for discussion
2024-04-24 20:20:29 +02:00
Stanislav Angelovič 0bfda9ab92 chore: require cmake v3.14 and use FetchContent_MakeAvailable 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 64337e545d test: support new googletest git tags 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 788168eded ci: build googletest manually on older ubuntus 2024-04-24 20:20:29 +02:00
Stanislav Angelovič b9aa770f58 feat: introduce sd-event integration 2024-04-24 20:20:29 +02:00
Stanislav Angelovic 2efb6909b5 chore: enable actions on release/v2.0 branch 2024-04-24 20:20:29 +02:00
Stanislav Angelovic 3e20fc639e refactor: simplify async D-Bus connection handling 2024-04-24 20:20:29 +02:00
Stanislav Angelovič 7450515d0b chore: release version v1.6.0 v1.6.0 2024-04-24 20:04:34 +02:00
Stanislav Angelovič c769637f3b chore: update years in header comments 2024-04-16 22:48:34 +02:00
Anthony Brandon 334fcb8833 feat: add std::variant constructor and conversion operator to sdbus::Variant (#429)
Signed-off-by: Anthony Brandon <anthony@amarulasolutions.com>
2024-04-04 20:16:27 +02:00
Stanislav Angelovič b9088cc801 test: add integration tests for std::variant (#427)
This also introduces `always_false` technique instead of `sizeof` trick for unsupported D-Bus type representation static assert. This one is more expressive and leads to more specific, more revealing compiler error messages.
2024-04-02 16:44:45 +02:00
Anthony BrandonandStanislav Angelovič a73eb9b8c1 feat: add support for std::variant as D-Bus variant representation (#415)
Signed-off-by: Anthony Brandon <anthony@amarulasolutions.com>
Co-authored-by: Stanislav Angelovič <stanislav.angelovic@protonmail.com>
2024-04-01 13:23:08 +02:00
Yuriy Chernyshov 700a011b80 fix: add missing #include <exception> (#421) 2024-03-25 20:16:23 +01:00
Marcel Hellwig 8a9cfc1f19 feat: support enums in D-Bus serialization and signatures (#416) 2024-03-07 17:49:05 +01:00
Stanislav Angelovič 30d9f1d462 chore: release v1.5.0 v1.5.0 2024-02-26 08:29:35 +01:00
Stanislav Angelovič 28921ad424 fix: request name signal handling issue (#392)
In case a signal arrives during the `RequestName` or `ReleaseName` D-Bus call (which is a synchronous call), the signal may not be processed immediately, which is a bug. This is solved now by waking up the event loop.
2023-12-30 17:37:00 +01:00
Stanislav Angelovič 721f583db1 refactor: handle exceptions correctly also in match callback handlers (#386)
This is a follow-up to #375. It covers match callback handlers that were missed in #375.
2023-12-05 19:06:41 +01:00
Stanislav Angelovič 47a84ab889 feat: implement Overload pattern in utils (#385) 2023-12-05 18:16:59 +01:00
Stanislav Angelovič d80483cdc0 feat: extend ScopeGuard with success and failure overloads (#384) 2023-12-05 18:16:45 +01:00
Stanislav Angelovič 934d51fa8a chore: add INSTALL_TESTS CMake option (#382)
* Change default test installation path to tests/sdbus-c++ , while also respecting CMAKE_INSTALL_PREFIX
* Introduce INSTALL_TESTS CMake option, so BUILD_TESTS is now split into BUILD_TESTS just for building and INSTALL_TESTS for installing the test binaries

Per discussion in #358 (comment), the change in the default settings is fine a for a minor release.
2023-11-23 21:05:44 +01:00
FuchtelJockelandStanislav Angelovič fb9e4ae371 fix: correctly add libsystemd dependency to pkgconfig (#378)
* fix: correctly add libsystemd dependency to pkgconfig

* refactor: solve sd-bus dependencies uniformly

---------

Co-authored-by: Stanislav Angelovič <stanislav.angelovic@protonmail.com>
2023-11-20 14:41:59 +01:00
David ReissandDavid Reiss 6e348f3910 refactor: minor UnixFd cleanups (#376)
* chore: Use std::exchange in UnixFd

This was suggested in code review for #376 .

* fix: Protect against UnixFd self-assignment

While self-assignment is rare, it is expected to be safe.  Add a check
to prevent putting the object in an invalid state.

* fix: Improve hygiene around dup system call

- Don't try to call dup on a negative value.
- Check dup return code and throw if it fails, rather than returning an
  empty UnixFd object.

* chore: Move UnixFd::close to Types.cpp

Minor convenience for applications: unistd.h doesn't have to be included
in the public header.

---------

Co-authored-by: David Reiss <dreiss@meta.com>
2023-11-18 18:11:00 +01:00
Alfred Wingate f50e4676fe fix: add missing algorithm header include (#380)
* https://gcc.gnu.org/gcc-14/porting_to.html

Using gcc 14 uncovers a missing include in Message.h

Signed-off-by: Alfred Wingate <parona@protonmail.com>
2023-11-16 22:26:42 +01:00