Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/api/auth.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ class AuthenticatorDBus : public Authenticator {
error::Error FetchJwtToken() override;

dbus::DBusClient dbus_client_;
bool watching_token_signal_ {false};
};
#endif

Expand Down
3 changes: 1 addition & 2 deletions src/api/auth/platform/dbus/auth.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ namespace mlog = mender::common::log;
namespace expected = mender::common::expected;

error::Error AuthenticatorDBus::StartWatchingTokenSignal() {
if (watching_token_signal_) {
if (dbus_client_.WatchingSignal("io.mender.Authentication1", "JwtTokenStateChange")) {
return error::NoError;
}

Expand All @@ -47,7 +47,6 @@ error::Error AuthenticatorDBus::StartWatchingTokenSignal() {
HandleReceivedToken(ex_auth_dbus_data, NoTokenAction::Finish);
});

watching_token_signal_ = (err == error::NoError);
return err;
}

Expand Down
44 changes: 36 additions & 8 deletions src/common/platform/dbus.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,35 @@ namespace mender {
namespace common {
namespace dbus {

struct SignalSpec {
std::string iface_;
std::string signal_;

bool operator==(const SignalSpec &other) const {
return iface_ == other.iface_ && signal_ == other.signal_;
}

size_t hash() const {
return std::hash<std::string> {}(iface_ + signal_);
}
};
} // namespace dbus
} // namespace common
} // namespace mender

namespace std {
template <>
struct hash<mender::common::dbus::SignalSpec> {
size_t operator()(const mender::common::dbus::SignalSpec &s) const {
return s.hash();
}
};
} // namespace std

namespace mender {
namespace common {
namespace dbus {

namespace error = mender::common::error;
namespace expected = mender::common::expected;
namespace events = mender::common::events;
Expand Down Expand Up @@ -70,10 +99,6 @@ using DBusCallReplyHandler = function<void(ReplyType)>;
template <typename SignalValueType>
using DBusSignalHandler = function<void(SignalValueType)>;

// Might need something like
// struct {string iface; string signal;}
// in the future.
using SignalSpec = string;

using StringPair = std::pair<string, string>;
using ExpectedStringPair = expected::expected<StringPair, error::Error>;
Expand Down Expand Up @@ -131,22 +156,25 @@ class DBusClient : public DBusPeer {
template <typename SignalValueType>
error::Error RegisterSignalHandler(
const string &iface, const string &signal, DBusSignalHandler<SignalValueType> handler);
void UnregisterSignalHandler(const string &iface, const string &signal);
error::Error UnregisterSignalHandler(const string &iface, const string &signal);

#ifdef MENDER_USE_ASIO_LIBDBUS
// see DBusPeer's friends for some details
friend DBusHandlerResult MsgFilter(
DBusConnection *connection, DBusMessage *message, void *data);
#endif // MENDER_USE_ASIO_LIBDBUS

bool WatchingSignal(const string &iface, const string &signal) const;
void CleanUp();

private:
unordered_map<SignalSpec, DBusSignalHandler<expected::ExpectedString>> signal_handlers_string_;
unordered_map<SignalSpec, DBusSignalHandler<ExpectedStringPair>> signal_handlers_string_pair_;

error::Error InitializeConnection() override;

template <typename SignalValueType>
void AddSignalHandler(const string &spec, DBusSignalHandler<SignalValueType> handler);
void AddSignalHandler(const SignalSpec &spec, DBusSignalHandler<SignalValueType> handler);

template <typename SignalValueType>
optional<DBusSignalHandler<SignalValueType>> GetSignalHandler(const SignalSpec &spec);
Expand Down Expand Up @@ -213,10 +241,10 @@ class DBusServer : public DBusPeer {
DBusConnection *connection, DBusMessage *message, void *data);

private:
error::Error RegisterDBusName();

string service_name_;
vector<DBusObjectPtr> objects_;

error::Error InitializeConnection() override;
};

} // namespace dbus
Expand Down
Loading