summaryrefslogtreecommitdiff
path: root/src/CommonAPI/DBus/DBusConnection.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/CommonAPI/DBus/DBusConnection.h')
-rw-r--r--src/CommonAPI/DBus/DBusConnection.h242
1 files changed, 0 insertions, 242 deletions
diff --git a/src/CommonAPI/DBus/DBusConnection.h b/src/CommonAPI/DBus/DBusConnection.h
deleted file mode 100644
index 7550c10..0000000
--- a/src/CommonAPI/DBus/DBusConnection.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/* Copyright (C) 2013 BMW Group
- * Author: Manfred Bathelt (manfred.bathelt@bmw.de)
- * Author: Juergen Gehring (juergen.gehring@bmw.de)
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#if !defined (COMMONAPI_INTERNAL_COMPILATION)
-#error "Only <CommonAPI/CommonAPI.h> can be included directly, this file may disappear or change contents."
-#endif
-
-#ifndef COMMONAPI_DBUS_DBUS_CONNECTION_H_
-#define COMMONAPI_DBUS_DBUS_CONNECTION_H_
-
-#include "DBusProxyConnection.h"
-#include "DBusDaemonProxy.h"
-#include "DBusServiceRegistry.h"
-#include "DBusObjectManager.h"
-#include "DBusMainLoopContext.h"
-#include "DBusConnectionBusType.h"
-
-#include <dbus/dbus.h>
-
-#include <atomic>
-
-
-namespace CommonAPI {
-namespace DBus {
-
-class DBusObjectManager;
-
-class DBusConnectionStatusEvent: public DBusProxyConnection::ConnectionStatusEvent {
- friend class DBusConnection;
-
- public:
- DBusConnectionStatusEvent(DBusConnection* dbusConnection);
-
- protected:
- virtual void onListenerAdded(const CancellableListener& listener);
-
- DBusConnection* dbusConnection_;
-};
-
-struct WatchContext {
- WatchContext(std::weak_ptr<MainLoopContext> mainLoopContext, DispatchSource* dispatchSource) :
- mainLoopContext_(mainLoopContext), dispatchSource_(dispatchSource) {
- }
-
- std::weak_ptr<MainLoopContext> mainLoopContext_;
- DispatchSource* dispatchSource_;
-};
-
-class DBusConnection: public DBusProxyConnection, public std::enable_shared_from_this<DBusConnection> {
- public:
- DBusConnection(BusType busType);
-
- static std::shared_ptr<DBusConnection> getBus(const BusType& dbusBusType);
- static std::shared_ptr<DBusConnection> wrapLibDBus(::DBusConnection* libDbusConnection);
- static std::shared_ptr<DBusConnection> getSessionBus();
- static std::shared_ptr<DBusConnection> getSystemBus();
- static std::shared_ptr<DBusConnection> getStarterBus();
-
- DBusConnection(const DBusConnection&) = delete;
- DBusConnection(::DBusConnection* libDbusConnection);
-
- DBusConnection& operator=(const DBusConnection&) = delete;
- virtual ~DBusConnection();
-
- BusType getBusType() const;
-
- bool connect(bool startDispatchThread = true);
- bool connect(DBusError& dbusError, bool startDispatchThread = true);
- void disconnect();
-
- virtual bool isConnected() const;
-
- virtual ConnectionStatusEvent& getConnectionStatusEvent();
-
- virtual bool requestServiceNameAndBlock(const std::string& serviceName) const;
- virtual bool releaseServiceName(const std::string& serviceName) const;
-
- bool sendDBusMessage(const DBusMessage& dbusMessage, uint32_t* allocatedSerial = NULL) const;
-
- static const int kDefaultSendTimeoutMs = 5000;
-
- std::future<CallStatus> sendDBusMessageWithReplyAsync(
- const DBusMessage& dbusMessage,
- std::unique_ptr<DBusMessageReplyAsyncHandler> dbusMessageReplyAsyncHandler,
- int timeoutMilliseconds = kDefaultSendTimeoutMs) const;
-
- DBusMessage sendDBusMessageWithReplyAndBlock(const DBusMessage& dbusMessage,
- DBusError& dbusError,
- int timeoutMilliseconds = kDefaultSendTimeoutMs) const;
-
- virtual bool addObjectManagerSignalMemberHandler(const std::string& dbusBusName,
- DBusSignalHandler* dbusSignalHandler);
- virtual bool removeObjectManagerSignalMemberHandler(const std::string& dbusBusName,
- DBusSignalHandler* dbusSignalHandler);
-
- DBusSignalHandlerToken addSignalMemberHandler(const std::string& objectPath,
- const std::string& interfaceName,
- const std::string& interfaceMemberName,
- const std::string& interfaceMemberSignature,
- DBusSignalHandler* dbusSignalHandler,
- const bool justAddFilter = false);
-
- DBusProxyConnection::DBusSignalHandlerToken subscribeForSelectiveBroadcast(bool& subscriptionAccepted,
- const std::string& objectPath,
- const std::string& interfaceName,
- const std::string& interfaceMemberName,
- const std::string& interfaceMemberSignature,
- DBusSignalHandler* dbusSignalHandler,
- DBusProxy* callingProxy);
-
- void unsubscribeFromSelectiveBroadcast(const std::string& eventName,
- DBusProxyConnection::DBusSignalHandlerToken subscription,
- DBusProxy* callingProxy,
- const DBusSignalHandler* dbusSignalHandler);
-
- void registerObjectPath(const std::string& objectPath);
- void unregisterObjectPath(const std::string& objectPath);
-
- bool removeSignalMemberHandler(const DBusSignalHandlerToken& dbusSignalHandlerToken,
- const DBusSignalHandler* dbusSignalHandler = NULL);
- bool readWriteDispatch(int timeoutMilliseconds = -1);
-
- virtual const std::shared_ptr<DBusServiceRegistry> getDBusServiceRegistry();
- virtual const std::shared_ptr<DBusObjectManager> getDBusObjectManager();
-
- void setObjectPathMessageHandler(DBusObjectPathMessageHandler);
- bool isObjectPathMessageHandlerSet();
-
- virtual bool attachMainLoopContext(std::weak_ptr<MainLoopContext>);
-
- bool isDispatchReady();
- bool singleDispatch();
-
- typedef std::tuple<std::string, std::string, std::string> DBusSignalMatchRuleTuple;
- typedef std::pair<uint32_t, std::string> DBusSignalMatchRuleMapping;
- typedef std::unordered_map<DBusSignalMatchRuleTuple, DBusSignalMatchRuleMapping> DBusSignalMatchRulesMap;
- private:
- void dispatch();
- void suspendDispatching() const;
- void resumeDispatching() const;
-
- std::thread* dispatchThread_;
- bool stopDispatching_;
-
- std::weak_ptr<MainLoopContext> mainLoopContext_;
- DispatchSource* dispatchSource_;
- WatchContext* watchContext_;
-
- mutable bool pauseDispatching_;
- mutable std::mutex dispatchSuspendLock_;
-
- void addLibdbusSignalMatchRule(const std::string& objectPath,
- const std::string& interfaceName,
- const std::string& interfaceMemberName,
- const bool justAddFilter = false);
-
- void removeLibdbusSignalMatchRule(const std::string& objectPath,
- const std::string& interfaceName,
- const std::string& interfaceMemberName);
-
- void initLibdbusSignalFilterAfterConnect();
- ::DBusHandlerResult onLibdbusSignalFilter(::DBusMessage* libdbusMessage);
-
- void initLibdbusObjectPathHandlerAfterConnect();
- ::DBusHandlerResult onLibdbusObjectPathMessage(::DBusMessage* libdbusMessage);
-
- static void onLibdbusPendingCallNotifyThunk(::DBusPendingCall* libdbusPendingCall, void* userData);
- static void onLibdbusDataCleanup(void* userData);
-
- static ::DBusHandlerResult onLibdbusObjectPathMessageThunk(::DBusConnection* libdbusConnection,
- ::DBusMessage* libdbusMessage,
- void* userData);
-
- static ::DBusHandlerResult onLibdbusSignalFilterThunk(::DBusConnection* libdbusConnection,
- ::DBusMessage* libdbusMessage,
- void* userData);
-
- static dbus_bool_t onAddWatch(::DBusWatch* libdbusWatch, void* data);
- static void onRemoveWatch(::DBusWatch* libdbusWatch, void* data);
- static void onToggleWatch(::DBusWatch* libdbusWatch, void* data);
-
- static dbus_bool_t onAddTimeout(::DBusTimeout* dbus_timeout, void* data);
- static void onRemoveTimeout(::DBusTimeout* dbus_timeout, void* data);
- static void onToggleTimeout(::DBusTimeout* dbus_timeout, void* data);
-
- static void onWakeupMainContext(void* data);
-
- void enforceAsynchronousTimeouts() const;
- static const DBusObjectPathVTable* getDBusObjectPathVTable();
-
- ::DBusConnection* libdbusConnection_;
- mutable std::mutex libdbusConnectionGuard_;
- std::mutex signalGuard_;
- std::mutex objectManagerGuard_;
- std::mutex serviceRegistryGuard_;
-
- BusType busType_;
-
- std::weak_ptr<DBusServiceRegistry> dbusServiceRegistry_;
- std::shared_ptr<DBusObjectManager> dbusObjectManager_;
-
- DBusConnectionStatusEvent dbusConnectionStatusEvent_;
-
- DBusSignalMatchRulesMap dbusSignalMatchRulesMap_;
-
- DBusSignalHandlerTable dbusSignalHandlerTable_;
-
- std::unordered_map<std::string, size_t> dbusObjectManagerSignalMatchRulesMap_;
- std::unordered_multimap<std::string, DBusSignalHandler*> dbusObjectManagerSignalHandlerTable_;
- std::mutex dbusObjectManagerSignalGuard_;
-
- bool addObjectManagerSignalMatchRule(const std::string& dbusBusName);
- bool removeObjectManagerSignalMatchRule(const std::string& dbusBusName);
-
- bool addLibdbusSignalMatchRule(const std::string& dbusMatchRule);
- bool removeLibdbusSignalMatchRule(const std::string& dbusMatchRule);
-
- std::atomic_size_t libdbusSignalMatchRulesCount_;
-
- // objectPath, referenceCount
- typedef std::unordered_map<std::string, uint32_t> LibdbusRegisteredObjectPathHandlersTable;
- LibdbusRegisteredObjectPathHandlersTable libdbusRegisteredObjectPaths_;
-
- DBusObjectPathMessageHandler dbusObjectMessageHandler_;
-
- mutable std::unordered_map<std::string, uint16_t> connectionNameCount_;
-
- typedef std::pair<DBusPendingCall*, std::tuple<int, DBusMessageReplyAsyncHandler*, DBusMessage> > TimeoutMapElement;
- mutable std::map<DBusPendingCall*, std::tuple<int, DBusMessageReplyAsyncHandler*, DBusMessage>> timeoutMap_;
- mutable std::shared_ptr<std::thread> enforcerThread_;
- mutable std::mutex enforceTimeoutMutex_;
-};
-
-
-} // namespace DBus
-} // namespace CommonAPI
-
-#endif // COMMONAPI_DBUS_DBUS_CONNECTION_H_