blob: 1342584318c6a530dd8443fb9a89aeed45867193 [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
Alex Vakulenkod91d6252015-12-05 17:14:39 -080030class ComponentManager;
Vitaly Bukab6f015a2015-07-09 14:59:23 -070031class DeviceRegistrationInfo;
Vitaly Buka1e363672015-09-25 14:01:16 -070032class DnsServiceDiscovery;
33class Network;
Vitaly Bukab6f015a2015-07-09 14:59:23 -070034
35namespace privet {
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070036
Vitaly Bukaae96cc32015-06-09 17:22:18 -070037class CloudDelegate;
38class DaemonState;
39class DeviceDelegate;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070040class PrivetHandler;
Vitaly Buka0bd32132015-07-30 15:54:48 -070041class Publisher;
Vitaly Bukaae96cc32015-06-09 17:22:18 -070042class SecurityManager;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070043
Vitaly Bukae6073612015-10-01 17:58:52 -070044class Manager : public CloudDelegate::Observer {
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070045 public:
Vitaly Buka5fe76092015-10-08 13:37:53 -070046 explicit Manager(provider::TaskRunner* task_runner);
Vitaly Buka8b4ab962015-07-14 19:19:39 -070047 ~Manager() override;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070048
Vitaly Buka5fe76092015-10-08 13:37:53 -070049 void Start(provider::Network* network,
Vitaly Buka1e363672015-09-25 14:01:16 -070050 provider::DnsServiceDiscovery* dns_sd,
51 provider::HttpServer* http_server,
52 provider::Wifi* wifi,
Vitaly Bukab6f015a2015-07-09 14:59:23 -070053 DeviceRegistrationInfo* device,
Alex Vakulenkod91d6252015-12-05 17:14:39 -080054 ComponentManager* component_manager);
Vitaly Bukaae96cc32015-06-09 17:22:18 -070055
Vitaly Buka0fa51e52015-07-10 00:12:25 -070056 std::string GetCurrentlyConnectedSsid() const;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070057
Vitaly Buka0fa51e52015-07-10 00:12:25 -070058 void AddOnPairingChangedCallbacks(
Vitaly Bukae6073612015-10-01 17:58:52 -070059 const Device::PairingBeginCallback& begin_callback,
60 const Device::PairingEndCallback& end_callback);
Vitaly Bukaae96cc32015-06-09 17:22:18 -070061
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070062 private:
Vitaly Buka0fa51e52015-07-10 00:12:25 -070063 // CloudDelegate::Observer
64 void OnDeviceInfoChanged() override;
65
Vitaly Buka1e363672015-09-25 14:01:16 -070066 void PrivetRequestHandler(
Vitaly Buka5fe76092015-10-08 13:37:53 -070067 std::unique_ptr<provider::HttpServer::Request> request);
68
69 void PrivetRequestHandlerWithData(
70 const std::shared_ptr<provider::HttpServer::Request>& request,
71 const std::string& data);
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070072
Vitaly Buka1e363672015-09-25 14:01:16 -070073 void PrivetResponseHandler(
Vitaly Buka5fe76092015-10-08 13:37:53 -070074 const std::shared_ptr<provider::HttpServer::Request>& request,
Vitaly Buka1e363672015-09-25 14:01:16 -070075 int status,
76 const base::DictionaryValue& output);
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070077
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070078 void OnChanged();
Vitaly Bukabf6840a2015-09-21 13:38:56 -070079 void OnConnectivityChanged();
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070080
Vitaly Buka8589b052015-09-29 00:46:14 -070081 void SaveDeviceSecret(Config* config);
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070082
Vitaly Bukaae96cc32015-06-09 17:22:18 -070083 bool disable_security_{false};
Vitaly Buka5fe76092015-10-08 13:37:53 -070084 provider::TaskRunner* task_runner_{nullptr};
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070085 std::unique_ptr<CloudDelegate> cloud_;
86 std::unique_ptr<DeviceDelegate> device_;
Vitaly Bukaf08caeb2015-12-02 13:47:48 -080087 std::unique_ptr<AuthManager> auth_;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070088 std::unique_ptr<SecurityManager> security_;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070089 std::unique_ptr<WifiBootstrapManager> wifi_bootstrap_manager_;
Vitaly Buka0bd32132015-07-30 15:54:48 -070090 std::unique_ptr<Publisher> publisher_;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070091 std::unique_ptr<PrivetHandler> privet_handler_;
Vitaly Buka95d0e452015-08-01 00:17:09 -070092
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070093 ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};
94
95 base::WeakPtrFactory<Manager> weak_ptr_factory_{this};
96 DISALLOW_COPY_AND_ASSIGN(Manager);
97};
98
Vitaly Bukab6f015a2015-07-09 14:59:23 -070099} // namespace privet
100} // namespace weave
Vitaly Buka7b6b3f02015-06-09 15:50:20 -0700101
Vitaly Buka912b6982015-07-06 11:13:03 -0700102#endif // LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_