manager.h revision 786a90630feaa70b81e029edd4f6620e7ab3a211
14b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// Copyright 2014 The Chromium OS Authors. All rights reserved. 24b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// Use of this source code is governed by a BSD-style license that can be 34b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// found in the LICENSE file. 44b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 54b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#ifndef BUFFET_MANAGER_H_ 64b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#define BUFFET_MANAGER_H_ 74b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 824aa1222afa953e7f94c7729af5084d816ed46bfAlex Vakulenko#include <memory> 9da2312c1680a4f96ea48d24e4f02c0aa08c9251aVitaly Buka#include <set> 1024aa1222afa953e7f94c7729af5084d816ed46bfAlex Vakulenko#include <string> 11acec6aa730dd537583b3a7f48814f089a42cbabdAlex Vakulenko#include <vector> 1224aa1222afa953e7f94c7729af5084d816ed46bfAlex Vakulenko 13357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley#include <base/files/file_path.h> 14274226bab9c240b22ea230fa15b95a789e10179bAlex Vakulenko#include <base/macros.h> 15d71774fa4971503ddcaae6a0cc70a37702934f14Christopher Wiley#include <base/memory/weak_ptr.h> 16f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko#include <base/values.h> 1795877b58fd5bba413aef4f8b159bd21b495dedfbAlex Vakulenko#include <chromeos/dbus/data_serialization.h> 18b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko#include <chromeos/dbus/dbus_object.h> 1924e5f5d44b25c1ad61e5f07f951467e3c2870871Alex Vakulenko#include <chromeos/dbus/exported_property_set.h> 2024e5f5d44b25c1ad61e5f07f951467e3c2870871Alex Vakulenko#include <chromeos/errors/error.h> 21e2713aceb7b2fb9d2486cfdd983e44a1f8832ecbVitaly Buka#include <weave/device.h> 224b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 2363bdf085f9d68f86950f5b45c8c8ad0ba2088dc0Alex Vakulenko#include "buffet/dbus_bindings/com.android.Weave.Manager.h" 24106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley 251aa980ea5f5325cb5f5fc43c1748fbb393c6ec51Christopher Wileynamespace chromeos { 26d71774fa4971503ddcaae6a0cc70a37702934f14Christopher Wileynamespace dbus_utils { 27d71774fa4971503ddcaae6a0cc70a37702934f14Christopher Wileyclass ExportedObjectManager; 28d71774fa4971503ddcaae6a0cc70a37702934f14Christopher Wiley} // namespace dbus_utils 291aa980ea5f5325cb5f5fc43c1748fbb393c6ec51Christopher Wiley} // namespace chromeos 301aa980ea5f5325cb5f5fc43c1748fbb393c6ec51Christopher Wiley 313b0863183b7cc527be15cb0bd6d9db8ae32d923dVitaly Bukanamespace buffet { 324b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 33f86123d4738a875523df9d9c10143d766309cba3Robert Gindaclass BluetoothClient; 341175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaclass BuffetConfig; 35a0305d34a19eec89b0ebc1929617a7c5b784d4c4Vitaly Bukaclass DBusCommandDispacher; 3600882b78d09f4d3bc5db9de626de374984e2bfd6Vitaly Bukaclass HttpTransportClient; 37f0f55340a10fea9d106b832cd1392441a5efcfd4Alex Vakulenkoclass MdnsClient; 38786a90630feaa70b81e029edd4f6620e7ab3a211Peter Qiuclass ShillClient; 391642bec2c8a50aa40c0e40fc76c80187607d9525Alex Vakulenkoclass WebServClient; 40becd461462f428f136cd5368c664a951935222e9Vitaly Bukastruct BuffetConfigPaths; 41a0305d34a19eec89b0ebc1929617a7c5b784d4c4Vitaly Buka 4212e2c1aaa0b5493af7d657079e90841f5740a8eeAlex Vakulenkotemplate<typename... Types> 436c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenkousing DBusMethodResponsePtr = 448d78ebf7f8ca3abc445ef7cf02f843fccde09366Alex Vakulenko std::unique_ptr<chromeos::dbus_utils::DBusMethodResponse<Types...>>; 4512e2c1aaa0b5493af7d657079e90841f5740a8eeAlex Vakulenko 466c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenkotemplate<typename... Types> 476c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenkousing DBusMethodResponse = 486c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko chromeos::dbus_utils::DBusMethodResponse<Types...>; 496c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko 504b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// The Manager is responsible for global state of Buffet. It exposes 514b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// interfaces which affect the entire device such as device registration and 524b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// device state. 5363bdf085f9d68f86950f5b45c8c8ad0ba2088dc0Alex Vakulenkoclass Manager final : public com::android::Weave::ManagerInterface { 544b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley public: 55b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko explicit Manager( 56b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko const base::WeakPtr<chromeos::dbus_utils::ExportedObjectManager>& 57b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko object_manager); 58ecf961a28365581f179f47d30f4259cb7a5ad028Alex Vakulenko ~Manager(); 59ecf961a28365581f179f47d30f4259cb7a5ad028Alex Vakulenko 600c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka void Start(const weave::Device::Options& options, 61becd461462f428f136cd5368c664a951935222e9Vitaly Buka const BuffetConfigPaths& paths, 6258a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka const std::set<std::string>& device_whitelist, 6384fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka chromeos::dbus_utils::AsyncEventSequencer* sequencer); 6484fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka 6584fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka void Stop(); 664b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 674b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley private: 68b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko // DBus methods: 696c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void CheckDeviceRegistered( 706c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko DBusMethodResponsePtr<std::string> response) override; 716c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void GetDeviceInfo(DBusMethodResponsePtr<std::string> response) override; 726c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void RegisterDevice(DBusMethodResponsePtr<std::string> response, 73cbadabee10023456ce7738162b65982703533100Vitaly Buka const std::string& ticket_id) override; 74760d6323be191349712429c4d924ccadfeb1936cVitaly Buka bool UpdateDeviceInfo(chromeos::ErrorPtr* error, 750c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka const std::string& name, 760c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka const std::string& description, 770c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka const std::string& location) override; 787cd019782f6613314e3b386f6897161d4feb881eVitaly Buka bool UpdateServiceConfig(chromeos::ErrorPtr* error, 797cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& client_id, 807cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& client_secret, 817cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& api_key, 827cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& oauth_url, 837cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& service_url) override; 846c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void UpdateState(DBusMethodResponsePtr<> response, 8512e2c1aaa0b5493af7d657079e90841f5740a8eeAlex Vakulenko const chromeos::VariantDictionary& property_set) override; 86ceab1772b975ea66f92ec27c45c6e9abd1a8d36bAlex Vakulenko bool GetState(chromeos::ErrorPtr* error, std::string* state) override; 876c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void AddCommand(DBusMethodResponsePtr<std::string> response, 88c03ec2b09318f8fcc0591793cddffd74f5e9941aVitaly Buka const std::string& json_command, 89c03ec2b09318f8fcc0591793cddffd74f5e9941aVitaly Buka const std::string& in_user_role) override; 906c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void GetCommand(DBusMethodResponsePtr<std::string> response, 915515de066b5040e499aa654bb458142c5f945cb1Vitaly Buka const std::string& id) override; 9212e2c1aaa0b5493af7d657079e90841f5740a8eeAlex Vakulenko std::string TestMethod(const std::string& message) override; 937b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka bool EnableWiFiBootstrapping( 947b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka chromeos::ErrorPtr* error, 957b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const dbus::ObjectPath& in_listener_path, 967b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const chromeos::VariantDictionary& in_options) override; 977b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka bool DisableWiFiBootstrapping(chromeos::ErrorPtr* error) override; 987b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka bool EnableGCDBootstrapping( 997b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka chromeos::ErrorPtr* error, 1007b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const dbus::ObjectPath& in_listener_path, 1017b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const chromeos::VariantDictionary& in_options) override; 1027b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka bool DisableGCDBootstrapping(chromeos::ErrorPtr* error) override; 1034b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 1046c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void OnGetDeviceInfoSuccess( 1056c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko const std::shared_ptr<DBusMethodResponse<std::string>>& response, 1066c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko const base::DictionaryValue& device_info); 1076c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void OnGetDeviceInfoError( 1086c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko const std::shared_ptr<DBusMethodResponse<std::string>>& response, 1094f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka const weave::Error* error); 1106c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko 1110c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka void StartPrivet(const weave::Device::Options& options, 11284fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka chromeos::dbus_utils::AsyncEventSequencer* sequencer); 11384fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka 1142b30e7ab39a4afb7a9f5fd31dbdeedf6b55fee8eVitaly Buka void OnStateChanged(); 1153b0863183b7cc527be15cb0bd6d9db8ae32d923dVitaly Buka void OnRegistrationChanged(weave::RegistrationStatus status); 11600b83491a3cdd9bda8784585501dbdb58466b9b4Vitaly Buka void OnConfigChanged(const weave::Settings& settings); 1177b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka void OnPairingStart(const std::string& session_id, 1180c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka weave::PairingType pairing_type, 1197b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const std::vector<uint8_t>& code); 1207b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka void OnPairingEnd(const std::string& session_id); 1212f7729382e9a7daf309ae5a5c8b9f7c0644befd6Christopher Wiley 12263bdf085f9d68f86950f5b45c8c8ad0ba2088dc0Alex Vakulenko com::android::Weave::ManagerAdaptor dbus_adaptor_{this}; 123b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko chromeos::dbus_utils::DBusObject dbus_object_; 1244b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 125e74c872e5d3d927c373d94e40549035c7ce9648cVitaly Buka class TaskRunner; 126e74c872e5d3d927c373d94e40549035c7ce9648cVitaly Buka std::unique_ptr<TaskRunner> task_runner_; 127f86123d4738a875523df9d9c10143d766309cba3Robert Ginda std::unique_ptr<BluetoothClient> bluetooth_client_; 12800882b78d09f4d3bc5db9de626de374984e2bfd6Vitaly Buka std::unique_ptr<HttpTransportClient> http_client_; 129786a90630feaa70b81e029edd4f6620e7ab3a211Peter Qiu std::unique_ptr<ShillClient> shill_client_; 130f0f55340a10fea9d106b832cd1392441a5efcfd4Alex Vakulenko std::unique_ptr<MdnsClient> mdns_client_; 1311642bec2c8a50aa40c0e40fc76c80187607d9525Alex Vakulenko std::unique_ptr<WebServClient> web_serv_client_; 1321175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka std::unique_ptr<BuffetConfig> config_; 1330c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka std::unique_ptr<weave::Device> device_; 134a0305d34a19eec89b0ebc1929617a7c5b784d4c4Vitaly Buka std::unique_ptr<DBusCommandDispacher> command_dispatcher_; 135f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko 136e43871f2e06996d6fec175865099ec34d08b4e10Vitaly Buka base::WeakPtrFactory<Manager> weak_ptr_factory_{this}; 1374b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley DISALLOW_COPY_AND_ASSIGN(Manager); 1384b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley}; 1394b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 1404b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley} // namespace buffet 1414b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 1424b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#endif // BUFFET_MANAGER_H_ 143