/* 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/. */ #include "DBusFreedesktopPropertiesStub.h" #include "DBusStubAdapter.h" #include "DBusServicePublisher.h" #include "DBusOutputStream.h" #include "DBusInputStream.h" #include #include namespace CommonAPI { namespace DBus { DBusFreedesktopPropertiesStub::DBusFreedesktopPropertiesStub(const std::string& dbusObjectPath, const std::string& dbusInterfaceName, const std::shared_ptr& dbusConnection, const std::shared_ptr& dbusStubAdapter) : dbusObjectPath_(dbusObjectPath), dbusConnection_(dbusConnection), dbusStubAdapter_(dbusStubAdapter) { assert(!dbusObjectPath.empty()); assert(dbusObjectPath[0] == '/'); assert(dbusConnection); dbusInterfacesLock_.lock(); if(managedInterfaces_.find(dbusInterfaceName) == managedInterfaces_.end()) { managedInterfaces_.insert({dbusInterfaceName, dbusStubAdapter}); } dbusInterfacesLock_.unlock(); } DBusFreedesktopPropertiesStub::~DBusFreedesktopPropertiesStub() { // TODO: maybee some deregistration etc. } const char* DBusFreedesktopPropertiesStub::getMethodsDBusIntrospectionXmlData() const { return "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n"; } bool DBusFreedesktopPropertiesStub::onInterfaceDBusMessage(const DBusMessage& dbusMessage) { auto dbusConnection = dbusConnection_.lock(); if (!dbusConnection || !dbusConnection->isConnected()) { return false; } if (!dbusMessage.isMethodCallType() || !(dbusMessage.hasMemberName("Get") || dbusMessage.hasMemberName("GetAll") || dbusMessage.hasMemberName("Set"))) { return false; } DBusInputStream dbusInputStream(dbusMessage); std::string interfaceName; dbusInputStream >> interfaceName; if(dbusInputStream.hasError()) { return false; } std::lock_guard dbusInterfacesLock(dbusInterfacesLock_); auto managedInterfacesIterator = managedInterfaces_.find(interfaceName); if(managedInterfacesIterator == managedInterfaces_.end()) { return false; } return managedInterfacesIterator->second->onInterfaceDBusFreedesktopPropertiesMessage(dbusMessage); } const bool DBusFreedesktopPropertiesStub::hasFreedesktopProperties() { return false; } const std::string& DBusFreedesktopPropertiesStub::getDBusObjectPath() const { return dbusObjectPath_; } const char* DBusFreedesktopPropertiesStub::getInterfaceName() { return "org.freedesktop.DBus.Properties"; } } // namespace DBus } // namespace CommonAPI