trunks_dbus_proxy.h revision 4dc4629c415e7ca90ff146d7bb75b5646ecd8b17
1// 2// Copyright (C) 2014 The Android Open Source Project 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17#ifndef TRUNKS_TRUNKS_DBUS_PROXY_H_ 18#define TRUNKS_TRUNKS_DBUS_PROXY_H_ 19 20#include <string> 21 22#include <base/memory/weak_ptr.h> 23#include <base/threading/platform_thread.h> 24#include <dbus/bus.h> 25#include <dbus/object_proxy.h> 26 27#include "trunks/command_transceiver.h" 28#include "trunks/trunks_export.h" 29 30namespace trunks { 31 32// TrunksDBusProxy is a CommandTransceiver implementation that forwards all 33// commands to the trunksd D-Bus daemon. See TrunksDBusService for details on 34// how the commands are handled once they reach trunksd. A TrunksDBusProxy 35// instance must be used in only one thread. 36class TRUNKS_EXPORT TrunksDBusProxy : public CommandTransceiver { 37 public: 38 TrunksDBusProxy(); 39 ~TrunksDBusProxy() override; 40 41 // Initializes the D-Bus client. Returns true on success. 42 bool Init() override; 43 44 // CommandTransceiver methods. 45 void SendCommand(const std::string& command, 46 const ResponseCallback& callback) override; 47 std::string SendCommandAndWait(const std::string& command) override; 48 49 private: 50 base::WeakPtr<TrunksDBusProxy> GetWeakPtr() { 51 return weak_factory_.GetWeakPtr(); 52 } 53 54 base::PlatformThreadId origin_thread_id_; 55 scoped_refptr<dbus::Bus> bus_; 56 dbus::ObjectProxy* object_proxy_; 57 58 // Declared last so weak pointers are invalidated first on destruction. 59 base::WeakPtrFactory<TrunksDBusProxy> weak_factory_; 60 61 DISALLOW_COPY_AND_ASSIGN(TrunksDBusProxy); 62}; 63 64} // namespace trunks 65 66#endif // TRUNKS_TRUNKS_DBUS_PROXY_H_ 67