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