blob: 3174ca06ce8ae2dfa2b766e2c1c697aa91bf1ab0 [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Vitaly Buka7b6b3f02015-06-09 15:50:20 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Vitaly Buka912b6982015-07-06 11:13:03 -07005#ifndef LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_
6#define LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_
Vitaly Buka7b6b3f02015-06-09 15:50:20 -07007
8#include <memory>
9#include <set>
10#include <string>
11#include <vector>
12
13#include <base/memory/weak_ptr.h>
14#include <base/scoped_observer.h>
Vitaly Buka7b382ac2015-08-03 13:50:01 -070015#include <weave/device.h>
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070016
Stefan Sauer2d16dfa2015-09-25 17:08:35 +020017#include "src/privet/cloud_delegate.h"
18#include "src/privet/security_manager.h"
19#include "src/privet/wifi_bootstrap_manager.h"
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070020
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070021namespace libwebserv {
22class ProtocolHandler;
23class Request;
24class Response;
25class Server;
26}
27
Vitaly Bukab6f015a2015-07-09 14:59:23 -070028namespace weave {
29
30class CommandManager;
31class DeviceRegistrationInfo;
Vitaly Buka1e363672015-09-25 14:01:16 -070032class DnsServiceDiscovery;
33class Network;
Vitaly Bukab6f015a2015-07-09 14:59:23 -070034class StateManager;
35
36namespace privet {
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070037
Vitaly Bukaae96cc32015-06-09 17:22:18 -070038class CloudDelegate;
39class DaemonState;
40class DeviceDelegate;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070041class PrivetHandler;
Vitaly Buka0bd32132015-07-30 15:54:48 -070042class Publisher;
Vitaly Bukaae96cc32015-06-09 17:22:18 -070043class SecurityManager;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070044
Vitaly Bukae6073612015-10-01 17:58:52 -070045class Manager : public CloudDelegate::Observer {
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070046 public:
Vitaly Buka5fe76092015-10-08 13:37:53 -070047 explicit Manager(provider::TaskRunner* task_runner);
Vitaly Buka8b4ab962015-07-14 19:19:39 -070048 ~Manager() override;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070049
Vitaly Buka5fe76092015-10-08 13:37:53 -070050 void Start(provider::Network* network,
Vitaly Buka1e363672015-09-25 14:01:16 -070051 provider::DnsServiceDiscovery* dns_sd,
52 provider::HttpServer* http_server,
53 provider::Wifi* wifi,
Vitaly Bukab6f015a2015-07-09 14:59:23 -070054 DeviceRegistrationInfo* device,
55 CommandManager* command_manager,
Vitaly Buka8e2f4162015-08-02 21:14:50 -070056 StateManager* state_manager);
Vitaly Bukaae96cc32015-06-09 17:22:18 -070057
Vitaly Buka0fa51e52015-07-10 00:12:25 -070058 std::string GetCurrentlyConnectedSsid() const;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070059
Vitaly Buka0fa51e52015-07-10 00:12:25 -070060 void AddOnPairingChangedCallbacks(
Vitaly Bukae6073612015-10-01 17:58:52 -070061 const Device::PairingBeginCallback& begin_callback,
62 const Device::PairingEndCallback& end_callback);
Vitaly Bukaae96cc32015-06-09 17:22:18 -070063
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070064 private:
Vitaly Buka0fa51e52015-07-10 00:12:25 -070065 // CloudDelegate::Observer
66 void OnDeviceInfoChanged() override;
67
Vitaly Buka1e363672015-09-25 14:01:16 -070068 void PrivetRequestHandler(
Vitaly Buka5fe76092015-10-08 13:37:53 -070069 std::unique_ptr<provider::HttpServer::Request> request);
70
71 void PrivetRequestHandlerWithData(
72 const std::shared_ptr<provider::HttpServer::Request>& request,
73 const std::string& data);
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070074
Vitaly Buka1e363672015-09-25 14:01:16 -070075 void PrivetResponseHandler(
Vitaly Buka5fe76092015-10-08 13:37:53 -070076 const std::shared_ptr<provider::HttpServer::Request>& request,
Vitaly Buka1e363672015-09-25 14:01:16 -070077 int status,
78 const base::DictionaryValue& output);
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070079
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070080 void OnChanged();
Vitaly Bukabf6840a2015-09-21 13:38:56 -070081 void OnConnectivityChanged();
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070082
Vitaly Buka8589b052015-09-29 00:46:14 -070083 void SaveDeviceSecret(Config* config);
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070084
Vitaly Bukaae96cc32015-06-09 17:22:18 -070085 bool disable_security_{false};
Vitaly Buka5fe76092015-10-08 13:37:53 -070086 provider::TaskRunner* task_runner_{nullptr};
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070087 std::unique_ptr<CloudDelegate> cloud_;
88 std::unique_ptr<DeviceDelegate> device_;
89 std::unique_ptr<SecurityManager> security_;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070090 std::unique_ptr<WifiBootstrapManager> wifi_bootstrap_manager_;
Vitaly Buka0bd32132015-07-30 15:54:48 -070091 std::unique_ptr<Publisher> publisher_;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070092 std::unique_ptr<PrivetHandler> privet_handler_;
Vitaly Buka95d0e452015-08-01 00:17:09 -070093
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070094 ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};
95
96 base::WeakPtrFactory<Manager> weak_ptr_factory_{this};
97 DISALLOW_COPY_AND_ASSIGN(Manager);
98};
99
Vitaly Bukab6f015a2015-07-09 14:59:23 -0700100} // namespace privet
101} // namespace weave
Vitaly Buka7b6b3f02015-06-09 15:50:20 -0700102
Vitaly Buka912b6982015-07-06 11:13:03 -0700103#endif // LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_