manager.h revision 63bdf085f9d68f86950f5b45c8c8ad0ba2088dc0
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 331175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Bukaclass BuffetConfig; 34a0305d34a19eec89b0ebc1929617a7c5b784d4c4Vitaly Bukaclass DBusCommandDispacher; 3500882b78d09f4d3bc5db9de626de374984e2bfd6Vitaly Bukaclass HttpTransportClient; 36f0f55340a10fea9d106b832cd1392441a5efcfd4Alex Vakulenkoclass MdnsClient; 37f0f55340a10fea9d106b832cd1392441a5efcfd4Alex Vakulenkoclass NetworkClient; 381642bec2c8a50aa40c0e40fc76c80187607d9525Alex Vakulenkoclass WebServClient; 39becd461462f428f136cd5368c664a951935222e9Vitaly Bukastruct BuffetConfigPaths; 40a0305d34a19eec89b0ebc1929617a7c5b784d4c4Vitaly Buka 4112e2c1aaa0b5493af7d657079e90841f5740a8eeAlex Vakulenkotemplate<typename... Types> 426c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenkousing DBusMethodResponsePtr = 438d78ebf7f8ca3abc445ef7cf02f843fccde09366Alex Vakulenko std::unique_ptr<chromeos::dbus_utils::DBusMethodResponse<Types...>>; 4412e2c1aaa0b5493af7d657079e90841f5740a8eeAlex Vakulenko 456c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenkotemplate<typename... Types> 466c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenkousing DBusMethodResponse = 476c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko chromeos::dbus_utils::DBusMethodResponse<Types...>; 486c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko 494b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// The Manager is responsible for global state of Buffet. It exposes 504b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// interfaces which affect the entire device such as device registration and 514b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// device state. 5263bdf085f9d68f86950f5b45c8c8ad0ba2088dc0Alex Vakulenkoclass Manager final : public com::android::Weave::ManagerInterface { 534b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley public: 54b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko explicit Manager( 55b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko const base::WeakPtr<chromeos::dbus_utils::ExportedObjectManager>& 56b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko object_manager); 57ecf961a28365581f179f47d30f4259cb7a5ad028Alex Vakulenko ~Manager(); 58ecf961a28365581f179f47d30f4259cb7a5ad028Alex Vakulenko 590c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka void Start(const weave::Device::Options& options, 60becd461462f428f136cd5368c664a951935222e9Vitaly Buka const BuffetConfigPaths& paths, 6158a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka const std::set<std::string>& device_whitelist, 6284fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka chromeos::dbus_utils::AsyncEventSequencer* sequencer); 6384fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka 6484fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka void Stop(); 654b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 664b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley private: 67b6351535f5f48a079dbf7c8cb9d9ce66263c645fAlex Vakulenko // DBus methods: 686c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void CheckDeviceRegistered( 696c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko DBusMethodResponsePtr<std::string> response) override; 706c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void GetDeviceInfo(DBusMethodResponsePtr<std::string> response) override; 716c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void RegisterDevice(DBusMethodResponsePtr<std::string> response, 72cbadabee10023456ce7738162b65982703533100Vitaly Buka const std::string& ticket_id) override; 73760d6323be191349712429c4d924ccadfeb1936cVitaly Buka bool UpdateDeviceInfo(chromeos::ErrorPtr* error, 740c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka const std::string& name, 750c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka const std::string& description, 760c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka const std::string& location) override; 777cd019782f6613314e3b386f6897161d4feb881eVitaly Buka bool UpdateServiceConfig(chromeos::ErrorPtr* error, 787cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& client_id, 797cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& client_secret, 807cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& api_key, 817cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& oauth_url, 827cd019782f6613314e3b386f6897161d4feb881eVitaly Buka const std::string& service_url) override; 836c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void UpdateState(DBusMethodResponsePtr<> response, 8412e2c1aaa0b5493af7d657079e90841f5740a8eeAlex Vakulenko const chromeos::VariantDictionary& property_set) override; 85ceab1772b975ea66f92ec27c45c6e9abd1a8d36bAlex Vakulenko bool GetState(chromeos::ErrorPtr* error, std::string* state) override; 866c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void AddCommand(DBusMethodResponsePtr<std::string> response, 87c03ec2b09318f8fcc0591793cddffd74f5e9941aVitaly Buka const std::string& json_command, 88c03ec2b09318f8fcc0591793cddffd74f5e9941aVitaly Buka const std::string& in_user_role) override; 896c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void GetCommand(DBusMethodResponsePtr<std::string> response, 905515de066b5040e499aa654bb458142c5f945cb1Vitaly Buka const std::string& id) override; 9112e2c1aaa0b5493af7d657079e90841f5740a8eeAlex Vakulenko std::string TestMethod(const std::string& message) override; 927b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka bool EnableWiFiBootstrapping( 937b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka chromeos::ErrorPtr* error, 947b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const dbus::ObjectPath& in_listener_path, 957b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const chromeos::VariantDictionary& in_options) override; 967b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka bool DisableWiFiBootstrapping(chromeos::ErrorPtr* error) override; 977b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka bool EnableGCDBootstrapping( 987b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka chromeos::ErrorPtr* error, 997b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const dbus::ObjectPath& in_listener_path, 1007b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka const chromeos::VariantDictionary& in_options) override; 1017b3ba79c30f381424b7f4115f2f2b8bdb8dde88dVitaly Buka bool DisableGCDBootstrapping(chromeos::ErrorPtr* error) override; 1024b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 1036c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void OnGetDeviceInfoSuccess( 1046c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko const std::shared_ptr<DBusMethodResponse<std::string>>& response, 1056c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko const base::DictionaryValue& device_info); 1066c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko void OnGetDeviceInfoError( 1076c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko const std::shared_ptr<DBusMethodResponse<std::string>>& response, 1084f77153a124969f9bc48a498d37c943a82a82527Vitaly Buka const weave::Error* error); 1096c375269d604c61b708ff4186bc92d075fd216bcAlex Vakulenko 1100c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka void StartPrivet(const weave::Device::Options& options, 11184fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka chromeos::dbus_utils::AsyncEventSequencer* sequencer); 11284fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka 1132b30e7ab39a4afb7a9f5fd31dbdeedf6b55fee8eVitaly Buka void OnStateChanged(); 1143b0863183b7cc527be15cb0bd6d9db8ae32d923dVitaly Buka void OnRegistrationChanged(weave::RegistrationStatus status); 11500b83491a3cdd9bda8784585501dbdb58466b9b4Vitaly Buka void OnConfigChanged(const weave::Settings& settings); 1160c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka void UpdateWiFiBootstrapState(weave::WifiSetupState state); 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_; 12700882b78d09f4d3bc5db9de626de374984e2bfd6Vitaly Buka std::unique_ptr<HttpTransportClient> http_client_; 128f0f55340a10fea9d106b832cd1392441a5efcfd4Alex Vakulenko std::unique_ptr<NetworkClient> network_client_; 129f0f55340a10fea9d106b832cd1392441a5efcfd4Alex Vakulenko std::unique_ptr<MdnsClient> mdns_client_; 1301642bec2c8a50aa40c0e40fc76c80187607d9525Alex Vakulenko std::unique_ptr<WebServClient> web_serv_client_; 1311175a9bd12d1c52adfaa908d7e65a93ba8c6225eVitaly Buka std::unique_ptr<BuffetConfig> config_; 1320c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka std::unique_ptr<weave::Device> device_; 133a0305d34a19eec89b0ebc1929617a7c5b784d4c4Vitaly Buka std::unique_ptr<DBusCommandDispacher> command_dispatcher_; 134f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko 135e43871f2e06996d6fec175865099ec34d08b4e10Vitaly Buka base::WeakPtrFactory<Manager> weak_ptr_factory_{this}; 1364b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley DISALLOW_COPY_AND_ASSIGN(Manager); 1374b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley}; 1384b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 1394b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley} // namespace buffet 1404b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley 1414b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#endif // BUFFET_MANAGER_H_ 142